{"_id":"meetup-web-components","_rev":"2587-ad7b049887fc6a7a065c079503bf94c3","name":"meetup-web-components","description":"Meetup Web UI Component Library","dist-tags":{"beta":"8.1.316-beta","latest":"8.1.317","pro":"6.2.0"},"versions":{"0.0.8-beta":{"name":"meetup-web-components","version":"0.0.8-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","generate":"node src/utils/generate.js","lint":"eslint . --ext .js,.jsx --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base test:unit","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"e901e637eec28fb92fc448380a6c850e8a573cc1","_id":"meetup-web-components@0.0.8-beta","_shasum":"03e2615ae4c41c9dd7902f8ed48d49941e388dba","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"03e2615ae4c41c9dd7902f8ed48d49941e388dba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.0.8-beta.tgz","integrity":"sha512-9QNaze0thL3HMG/JAhea/e4OjqcLUTgkHONChp3yYyVTgGCpKeJ8YT9Y1vnQo2B+Xd27icKvJ13Zpxn2VDRgAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDK3q9HifsgJoPjxZcFf9AQ2PfzU0TJVnS8YRgkKGGDWAIgGMVGW2iApSJkrvsrqBKbv5OyneGGfu4JmpgDrVOfVjI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.0.8-beta.tgz_1478201067993_0.4775978038087487"},"directories":{}},"0.1.10":{"name":"meetup-web-components","version":"0.1.10","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","generate":"node src/utils/generate.js","lint":"eslint . --ext .js,.jsx --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base test:unit","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"f37bc0140fdb073099ef1a673966a888e039fa2f","_id":"meetup-web-components@0.1.10","_shasum":"4f2f366c2999da9ed0ab901143e5d74f119e114c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4f2f366c2999da9ed0ab901143e5d74f119e114c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.10.tgz","integrity":"sha512-7BZDWj8PwBF7Qh7iHumUCWiWFqz4vuAypqgFD0outwTwqlL35DsJQb60OqTwMpJ8NOvRBFbTnkQXVqy5U45SNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5OTfH0snBZmUP35mLRMNBlYqQc5143mb7B57y88jUVAIgVVJ4WRtqluvicz9l4c9SnhHoJX97OrltSpuWprzR2tg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.10.tgz_1478201570805_0.277518009301275"},"directories":{}},"0.1.11-beta":{"name":"meetup-web-components","version":"0.1.11-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"eslint . --ext .js,.jsx --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"6f47e31e97deadd3873ab4c55a5b64b6a8d07101","_id":"meetup-web-components@0.1.11-beta","_shasum":"c789e2a4118ef610f07a3a8a995bbdf308af9a1a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c789e2a4118ef610f07a3a8a995bbdf308af9a1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.11-beta.tgz","integrity":"sha512-Zg9wm1k/5eP9WtmTV68PwgJFOGf2FQO1yDRDeNFlTfKAilx8pxJeuWPUvkaJI/BllR4S42GtAobDnwnJawMvEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQ9mAfC32wHd896zKR7G34+oMfS0IeDmrzcJBwfFKuZwIhAMOWlCEzq128cQjcKhzC7GCJSxupaxjLPWwOa64ouiEj"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.11-beta.tgz_1478274992688_0.6354544383939356"},"directories":{}},"0.1.13-beta":{"name":"meetup-web-components","version":"0.1.13-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","generate":"node src/utils/generate.js","lint":"eslint . --ext .js,.jsx --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base test:unit","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"30837919b5face6f178fbf018553be47b118aadb","_id":"meetup-web-components@0.1.13-beta","_shasum":"75b832961fee731734ad464c785d2116feb0ae2e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"75b832961fee731734ad464c785d2116feb0ae2e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.13-beta.tgz","integrity":"sha512-ow24X9/mWiqdFukvn3qNzG27UwfefGI5ccHrIhgbC6cAsD3m7mYJG7z7BxmmJ9tCGjNJ0y/kKJUElg8GZvyXog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJTX0EAIJYKCeuCLwwpcfqlIqm6vxyNpi07bdaDuAYOAiEA1MGS90ZHSlsIXOa+BQM5kWoSNSzavAj1lrTwxlXoXbQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.13-beta.tgz_1478282739090_0.9053981783799827"},"directories":{}},"0.1.14":{"name":"meetup-web-components","version":"0.1.14","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","generate":"node src/utils/generate.js","lint":"eslint . --ext .js,.jsx --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base test:unit","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"4590acd91946b2e291025ab503b5600e0f19cc56","_id":"meetup-web-components@0.1.14","_shasum":"48d24ebb126056d2ef8045dbefaab21375325b1a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"48d24ebb126056d2ef8045dbefaab21375325b1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.14.tgz","integrity":"sha512-z3lzqFDbtRSiK7nqMBRO94ch1Wq6h+CV6+9fujWfAYORY5KyYnXKHDuqezfMs6dxzrdSf/OGq9xWjM29ngGZeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoAeVxl+Jokvl3IPmAt/5e4R0yXFri9mUHPskfSyKEnwIgHTlCED3mo+VjJwtO9a5GZq1R5HM9IcEQC3ZTY+RtgZs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.14.tgz_1478293335718_0.9048923265654594"},"directories":{}},"0.1.15-beta":{"name":"meetup-web-components","version":"0.1.15-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"0dad5c5d5c5d8b78694b7273869feb3e130913c0","_id":"meetup-web-components@0.1.15-beta","_shasum":"82843bda3bc49ac5940015d0d637bc11163660c8","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"82843bda3bc49ac5940015d0d637bc11163660c8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.15-beta.tgz","integrity":"sha512-Qi0c378SCEZPPnsCfszWKNLxKORP+ZwJYE8mwUiE+PYddUGOsWXoTtTvro74dFtP0PYTDcpqO91fA/Y8g4vFAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCc/0smyFLVz/7g0wDBQDRGpIrfyGBrvDID4BlrDyDDCwIgGkLRwnVvfZIt1bNG9dF5foPslMAglHQBPjfFiYSXlnw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.15-beta.tgz_1478535576079_0.029496062081307173"},"directories":{}},"0.1.16":{"name":"meetup-web-components","version":"0.1.16","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"731f79138e4020ac4e9b52fe1fec8a909dcd17cb","_id":"meetup-web-components@0.1.16","_shasum":"228cd82ebb7d0663622323ebca332ffc746e9992","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"228cd82ebb7d0663622323ebca332ffc746e9992","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.16.tgz","integrity":"sha512-uyxOT2IWXlaOw2g0/n3XTUQydEytvs+qFDREV3Y9vP97LKn6/podhcgx+mUqcMWEEEGrzezjXinsrbtO3B+AsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH3Yjpah825nkELoMtrAkrVMgEdvTAjoi5GcTopamf7kCIQD9etDpWty08HBgOv8VQsBZDqGwNKzs7SYNamEeG9p3jQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.16.tgz_1478535901790_0.8054817372467369"},"directories":{}},"0.1.17":{"name":"meetup-web-components","version":"0.1.17","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"node src/utils/create-icon-story && start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"32e618eca9ad92e27742505d12cd3f47cdbf8901","_id":"meetup-web-components@0.1.17","_shasum":"707452231bc325a1bcc988054e3cd6343373ad48","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"707452231bc325a1bcc988054e3cd6343373ad48","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.17.tgz","integrity":"sha512-Ag4oqh4wpXLeUIi7gj1/AXeVqLonqdxhSG/aqQcDwl/jW0BY7FQGZJ/QvdZu6N+YfVddu9YqDIlkYKpXNJFmIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWT8jx+0mAdwVZG3GBNV4nhBa6rxwLhF5PMz9zXGYGbAIhAJBiKu7Tt+NEM4GgGqwKgT0+x+BGpr18IVgU0IAkAQel"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.17.tgz_1478539040425_0.008125701453536749"},"directories":{}},"0.1.19-beta":{"name":"meetup-web-components","version":"0.1.19-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"7ff5bbf92192abc90e042fd4ac9a1f224dbb44ea","_id":"meetup-web-components@0.1.19-beta","_shasum":"7b0b21fb74ba15ee6b0bcde499976e4084af2cfa","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7b0b21fb74ba15ee6b0bcde499976e4084af2cfa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.19-beta.tgz","integrity":"sha512-tyvAEGdXiacDuS7b67vj+K2BxJCX42HvyQTUL+aBGQh1nsagO0vxWcdPc4l0RXuFu3L80FYmPY4+xnJDHLJP+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGMeArANgQPwuT3AfUjb7zf9wkuF7Eeo7tELLOE2LRTwIhAKfqjYQwypN3Ymb6/OcmDUf97rP3atLLGI7bSFHtHUTc"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.19-beta.tgz_1479492548921_0.622404303168878"},"directories":{}},"0.1.20-beta":{"name":"meetup-web-components","version":"0.1.20-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"965bfa73e0a81a91b2e38a6dec32d9f03ece8d76","_id":"meetup-web-components@0.1.20-beta","_shasum":"e8f17658e7aedcefd54441beb5dc2c550cc5d19e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e8f17658e7aedcefd54441beb5dc2c550cc5d19e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.20-beta.tgz","integrity":"sha512-c8YP5s4lBuncvgKOibe9n9jnWsZPBaxkY1OkqPkJgA9zckcaJxrHmRASeQeHDR9JSTU/iFWgRRno+cFjyKHfGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbsOamQ9oebR2S3HsU55JM/AXUBO2WHbKP1qwwrtwhMAiEA9txKjm4R5gRlx+Iz3lZA+mLWlC+9N9yPlqz7/CJDoRo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.20-beta.tgz_1479492672522_0.4513790402561426"},"directories":{}},"0.1.21-beta":{"name":"meetup-web-components","version":"0.1.21-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"68499ee21046ee9437e3e87dcfa2856a2b678897","_id":"meetup-web-components@0.1.21-beta","_shasum":"5f81eceaa45b33c0726dc1ad42376bd012cb35f0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5f81eceaa45b33c0726dc1ad42376bd012cb35f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.21-beta.tgz","integrity":"sha512-5C8hSGH4bSLM+QNQYZRs7fpTUGu5Qz8F8sYId+XkmwhOtPBBbZrr4EcTA/7LAi6ocfGKh0LoT26ZykwFZ0VPrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiXS+1lxRkZSL1sNAml6pcw0FgEyPATuBSpK3ahSst9gIhANhWXWg8xZzrJWkxU87Bfq0+qWzJPpIty11/ngJDiLvQ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.21-beta.tgz_1479495138040_0.2788532958365977"},"directories":{}},"0.1.22":{"name":"meetup-web-components","version":"0.1.22","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","bourbon":"4.2.7","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","julep":"1.4.5","meetup-swatches":"3.1.1","meetup-web-platform":"0.5.189","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.2"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"9ca61bc82f34395b55a8231e2ff6322e24511595","_id":"meetup-web-components@0.1.22","_shasum":"9dbb3115611d70d22157adf1c891c2ce0bfb9303","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9dbb3115611d70d22157adf1c891c2ce0bfb9303","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.22.tgz","integrity":"sha512-XCx6F9nQ2sMJ8L/FZzwFsw37zeHUV0xxK5oO3TWF0hHe3MY3KDaUIl5e1/djXobph/MN7FnpC9rT8VNb6LbAcQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxfSgqfcmB26TNGHFVM3nuEiw5F0Z50sRwCzjMPeBI6gIgduZzQSSPfEsj5Q6V4tm7kGFseeJIyQU5KKyTuDrdKGk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.22.tgz_1479823381906_0.8019240701105446"},"directories":{}},"0.1.23-beta":{"name":"meetup-web-components","version":"0.1.23-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","meetup-web-mocks":"0.1.6","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"d1b3efd00381b1ef8d93f7d007251ffd9509a181","_id":"meetup-web-components@0.1.23-beta","_shasum":"ea9a4c4353531fe53809425299e7c84dba039f3b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ea9a4c4353531fe53809425299e7c84dba039f3b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.23-beta.tgz","integrity":"sha512-R1aewKJcA8hS0hQeppZkrFSS4LDEum337v3swcsSEbLFMZLrmTURNXkLgKDDD2EZ5EpSbO4Sy7bAbhWEwaKGjA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkzc73IRPzBaUoRIVai/A5ROZZivPF3aL/yxgsefnhbAiEAwC6zpYT58erOOvv8lOOE8LO+5lkdyHIjh9n3m1AwZzg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.23-beta.tgz_1479918635836_0.3234970411285758"},"directories":{}},"0.1.24":{"name":"meetup-web-components","version":"0.1.24","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.0","babel-jest":"16.0.0","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.9.1","eslint-plugin-react":"6.4.1","meetup-web-mocks":"0.1.6","node-sass":"3.10.1","react":"15.3.2","react-addons-test-utils":"15.3.2","react-dom":"15.3.2","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.24.1","babel-loader":"6.2.4","coveralls":"2.11.14","css-loader":"0.23.1","eslint-loader":"1.5.0","inquirer":"1.2.2","jest-cli":"15.1.1","npm-run-all":"2.3.0","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.3"},"gitHead":"c257f0c536be75c50be0cb2fd96ce92d55ba40be","_id":"meetup-web-components@0.1.24","_shasum":"457290030e7ad1876da8e6198102da94d0c29382","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"457290030e7ad1876da8e6198102da94d0c29382","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.24.tgz","integrity":"sha512-6fnqgexQYCbAMjrLLZ11kvkFDnngbDiKBw306iuQiLcgSqoWjYeBhBAr8RI0W/x228tzLsAcBDZXoatql/nORA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtIGRtKbNFyj/feExawcvTpmTNis5daayyZtGOAKzuTAiA+OZgQFz++upK+XizxCG5o2RibNtv390gogV83mEQ2zA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.24.tgz_1479922416622_0.012210819404572248"},"directories":{}},"0.1.33-beta":{"name":"meetup-web-components","version":"0.1.33-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"2a823231cf9fd60c3616b1ade37120f1c04ed5e5","_id":"meetup-web-components@0.1.33-beta","_shasum":"e9c061df8d20787c242ec45761e60f8d58ad06d6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e9c061df8d20787c242ec45761e60f8d58ad06d6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.33-beta.tgz","integrity":"sha512-oZ7l72R0aU89rRcdPFQRswHaV9a8NVcXojigESwnuFkR0x2NLLXN4c4lsJKa1/foZ8fZmjmhUXMX70YurfdRRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK9TgtTqQHo63VSsY0Kq3kAcPcvAsOx/KYpTuM0Z6XdQIhAJT6AdJlmljQbNjbvewbZq1Y7JJSQH0Rx+PWlpw18QsM"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.33-beta.tgz_1480578215922_0.5481484250631183"},"directories":{}},"0.1.34":{"name":"meetup-web-components","version":"0.1.34","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"45198094ef9ed8b885231c7c3c63c6a8324ced65","_id":"meetup-web-components@0.1.34","_shasum":"672e4fe8c1702f1a4edd642ee61392a323c3c2e4","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"672e4fe8c1702f1a4edd642ee61392a323c3c2e4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.34.tgz","integrity":"sha512-WoK/VJ3gHgJqinoUI7vEnPECJCTOF4AHaTeoDC0stBIiyZoW4xB2GPXL4lY1NEkYfnh2jD5O3pAkujLSpCIUlw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICS8h2L5Hes8nsIIcRcb4+ewhrmW7ArCSggEvp7JV31oAiB1apKPQ2Av16zg9LPu57VrsRXYozzRapmCYyB6X5DPeA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.34.tgz_1480592737628_0.9945387842599303"},"directories":{}},"0.1.37-beta":{"name":"meetup-web-components","version":"0.1.37-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"6e0787aa14b272b6c8a7771bd3eda891261ed48e","_id":"meetup-web-components@0.1.37-beta","_shasum":"5718909f7fdfd319c0c42e964c635251835bd89e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5718909f7fdfd319c0c42e964c635251835bd89e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.37-beta.tgz","integrity":"sha512-Y4NwEdLEOKmKTDZ+HizE0/rG8zgsrAwLUUxjBaAfPPUNroxqh4LvPFKn6k/xqTNY5CqGmE2daxm6CSZBoA3IKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGmdmhYNbxMpn8YaOhenCSyPluM1nuwkzSX0rrhE+Q/dAiEA8E8uFlz6h4PYVg7X8wohAXCLnEXHhVQJcjLxyb5+kGU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.37-beta.tgz_1480708759588_0.13430237397551537"},"directories":{}},"0.1.38-beta":{"name":"meetup-web-components","version":"0.1.38-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"3590630d5f27a396038d3672287d9f951649c08f","_id":"meetup-web-components@0.1.38-beta","_shasum":"d1d8acd7249beb999467e48837d7742c8c581ea6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d1d8acd7249beb999467e48837d7742c8c581ea6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.38-beta.tgz","integrity":"sha512-WngHTpV598BJyhtgDgtFQBhJhU5P4qW7cRX8Wwpu7mDcVzErE3aqugibfuw0Rxv/WPSuYQBRregGqOYmaOuh+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoeCcuPZh4xFuO+r3Ye7I9APyKaxJxGqmBYvYR2g+cpwIgPCbsQWH9dBbe0eR5jsPJjdbgKF06QEZU2gZPh/AL+ss="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.38-beta.tgz_1480715016226_0.6544740027748048"},"directories":{}},"0.1.39-beta":{"name":"meetup-web-components","version":"0.1.39-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"4490b31e1a2bdb9a0fe21efb88fc7bd8da631d2f","_id":"meetup-web-components@0.1.39-beta","_shasum":"57bcd853128985681b323bd64e5863d11ebba5ec","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"57bcd853128985681b323bd64e5863d11ebba5ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.39-beta.tgz","integrity":"sha512-J/A4wW/NnRhUDYI7EGa4ACNUAPbFzNO1wMwibJNkfWz6eHeu7yHSnp8jGMV55w68OgV8g3OaCS2kdlon38cc9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+E/tmH7Hsjpb1n3ZUH4jY3yxzoOBus43thitEDmI6ngIgVpPFjuu8HHUSVRYatnxnBYWyy5JFrMITrf9hX48/9yo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.39-beta.tgz_1480971179077_0.7110929326154292"},"directories":{}},"0.1.55-beta":{"name":"meetup-web-components","version":"0.1.55-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"bb3816006f2c25c277b307843c96c09f02ae74af","_id":"meetup-web-components@0.1.55-beta","_shasum":"1534e4b670c8b704b8d50195b11f422e8b5d5a62","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1534e4b670c8b704b8d50195b11f422e8b5d5a62","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.55-beta.tgz","integrity":"sha512-hSCmmYY6k+gJlJe7MQYcOMVW4oLlSUj+ZT8CQIwKvfD8Ef9gu5E969Is6Kq7+a0UylnrDUnMeJyNzYOldxtnxw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB5tZQK2IB1qSErwZvbtOK9gGBrurC3aGqxs5XOMu3zwAiEAvr5NyL0C5ZwKFCyWfjONzM2+BBmeNnsfXgV8mNq1ADA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.55-beta.tgz_1481737989752_0.6343788136728108"},"directories":{}},"0.1.56-beta":{"name":"meetup-web-components","version":"0.1.56-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"e5827b32c04ed73b3b7083d71ba895ebe9471bb4","_id":"meetup-web-components@0.1.56-beta","_shasum":"b7f9556cbeaf0335a375376db59ad7927c5429b3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b7f9556cbeaf0335a375376db59ad7927c5429b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.56-beta.tgz","integrity":"sha512-BRE5KVAZJ6jZ3DIyC3JCXERwOYcO6j5wO74ddEux8/KV6EfWCk4N9ylZ5SEdTE6W0dZ7ETBPN6HvHbnxZmlA+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBKsnT5JGARK5LZlBDbx3Un3GYk1RLcaaHSJ8vxiyqR6AiApzzw3JUiE8cWry86WVI7anXw9zYekAsJXYGQgYKBvpw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.56-beta.tgz_1481738119403_0.5326483419630677"},"directories":{}},"0.1.61":{"name":"meetup-web-components","version":"0.1.61","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"6a3549485c83a645ecdec4a80e8dd2fae56eddc6","_id":"meetup-web-components@0.1.61","_shasum":"10075505055432981afde107ffee26ea891da63d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"10075505055432981afde107ffee26ea891da63d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.61.tgz","integrity":"sha512-DTwBYZ7QwVCY8XufxxkD1kEZqiU796eeb4WcuoNqxHjDFJzXgGls2dePgHpO4eTzn5909LbBUuX7zcdhDvn2TQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAdWEpEnR0tjC5Hv6mAozD+I+Ggy8+vaI6FiC2wFGi/aAiEAylqKe2FZD04CtqxWpHsM/kU+g4TlC21JVVIdC/foLQA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.61.tgz_1481757466463_0.2955308291129768"},"directories":{}},"0.1.62":{"name":"meetup-web-components","version":"0.1.62","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"fd30c259ae92851c0df45edb6df35cf035260f30","_id":"meetup-web-components@0.1.62","_shasum":"ebabc574fba8f49fccbd678f0fc3d622f8c4e6b7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ebabc574fba8f49fccbd678f0fc3d622f8c4e6b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.62.tgz","integrity":"sha512-k32rqypSmcngXkuCvNmm0n3dFuy3fgAnE+S+Z5Ky6ucRcYfCrK9P6CXKQPp3aNjYjja8Es4xYb9gsZ68R9vdBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGUKo1EF5mf6/tNoPIEsqFmEQGrKAmOB5NAbHwtF0JYBAiAWc4wb8jv1H+52/0KQbhTyGlW8o2alGxVBkiLX/Q/drw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.62.tgz_1482249140197_0.4988736738450825"},"directories":{}},"0.1.63-beta":{"name":"meetup-web-components","version":"0.1.63-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"c0ddac41e0c5d0d7075d6bdf43a9deb44ab3a7cc","_id":"meetup-web-components@0.1.63-beta","_shasum":"9a2b726e3f2812732700eba885eaf847e44b16eb","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9a2b726e3f2812732700eba885eaf847e44b16eb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.63-beta.tgz","integrity":"sha512-IPjq/5JCCPSnkb2vtixIIPkF1CTUwQ28yfSQhfx0Uh/I+nHHuB00qkh+RGy0Ae4YfasRFrhyRc8cgReL839pEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAk8VuKUkZ8Waa8TuxI7nhdhXNDfmn6pT1GIHZQYxT/zAiEAmdLBsQpk8uNh8rCatYLrr+eRNDWdUQYg7LGyjEKuPBY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.63-beta.tgz_1482256788015_0.03763715666718781"},"directories":{}},"0.1.64-beta":{"name":"meetup-web-components","version":"0.1.64-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"6c476d97970c921b55fe1fd5dda5379ae994bde5","_id":"meetup-web-components@0.1.64-beta","_shasum":"7464058905cfb8c3645ddf693d1fd933cc8c9dcd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7464058905cfb8c3645ddf693d1fd933cc8c9dcd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.64-beta.tgz","integrity":"sha512-g5e3kyPJoInySnqRto0OX9C4CdN/8d6aJDJLU1KVYNLPX/M10pOw+lDZP/FQN10czsGbPLoTh/0rIgAZECl4yA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB6EfE52dmLliaj2cqyrJ5i/V/IhQIh0OFyejsCRVnDsAiByEDZ0hh/vGHRwWUqFf79JhaR0dfVQ+5UbNt5gzAkZRg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.64-beta.tgz_1482261618046_0.2181098978035152"},"directories":{}},"0.1.65":{"name":"meetup-web-components","version":"0.1.65","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"e021505e9963319986e4051ce98cdd9f5def3326","_id":"meetup-web-components@0.1.65","_shasum":"4e40efed58f0f9171041c6fdc22da535ad23dd3c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4e40efed58f0f9171041c6fdc22da535ad23dd3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.65.tgz","integrity":"sha512-zoV8SPQAx3r3dznZ+F5uJtcZ6q5Yr1n7ie4WKsgTHd32s8T6zsAo/XfeE5oi/fx4QYhZOM6x3c6Oqx7ITYjHTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFi1+SM4/Yua8EPASVdMfWqRNMwxfEm23hfsjMcQizXdAiBZx2yECfKaCkWqcikE4CEm1kMbWKyvT+Whgi7C1GoYrQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.65.tgz_1482262664174_0.1699782044161111"},"directories":{}},"0.1.66-beta":{"name":"meetup-web-components","version":"0.1.66-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"245505655d957659e7b3934dcd66083af49ef303","_id":"meetup-web-components@0.1.66-beta","_shasum":"63371339e938f1aaf1926665515a67e95a9bf6bd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"63371339e938f1aaf1926665515a67e95a9bf6bd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.66-beta.tgz","integrity":"sha512-jeQCVhG5j4V0SQtAwSBERFhxDlCg0xt61n5RIlvfLl0+Yu2IXFWc1tTrXvZzerMlTCGSDW1LHStdxEnwFzAlPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+NCpdSh6uMiAbU+BEuIhh0aOMv6OzRmKqHeTlfsvF+AiB3o4asbA8jlPCth3KGD5o382EORG7NSzdfVFa16B40Ww=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.66-beta.tgz_1482265235201_0.3112705310340971"},"directories":{}},"0.1.67-beta":{"name":"meetup-web-components","version":"0.1.67-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"681f78276a792eb891b735b1d17b88f4fa0dc305","_id":"meetup-web-components@0.1.67-beta","_shasum":"668a473cfca543b11dd33fc86d82f972fc01c3fa","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"668a473cfca543b11dd33fc86d82f972fc01c3fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.67-beta.tgz","integrity":"sha512-9qwLOcfb1Dyom/U/nBJcTp8VCpeXJ7iDKumavgEBjviMkCIavj2oL2mcYY5apdhrUWduADCsgn7xTzwuIyD/FA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGIlPcKor9RGlmDKID/Skhnt2gULuYZ67gNZAIqmSgC+AiBDHQPOxsdIU7yFqoXuTE/N8j29+w8zc1RG4WN8Wj+/xQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.67-beta.tgz_1482339231866_0.6378939675632864"},"directories":{}},"0.1.68-beta":{"name":"meetup-web-components","version":"0.1.68-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"3b3cb6dd17bad061ed13db20aa2ade083e3ca99e","_id":"meetup-web-components@0.1.68-beta","_shasum":"c7579d828457687351402e8d91e60da3da0dfd3d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c7579d828457687351402e8d91e60da3da0dfd3d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.68-beta.tgz","integrity":"sha512-nQ6tUdvmdiWZ7VBE/W9qBo7phYQ9evr25aboa8gFqypH6DDJ5Ke8/FPBnmlrJr8tvtyYKrttWPe83oJJ79WhSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4uKptTHR2CAoKAwcHabMM9HerZTkeXLw7HM1e93zmwQIhAI7gITeVgjl6+PuIXoaWLXfHrj0EM52dDx8KXUKTSEOr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.68-beta.tgz_1482339345062_0.9876152046490461"},"directories":{}},"0.1.69-beta":{"name":"meetup-web-components","version":"0.1.69-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"a02ff36622734de5e65dedbb4c8f9a5724dae613","_id":"meetup-web-components@0.1.69-beta","_shasum":"306e3cc61b63b1de91851d203f50e6f1bb96765e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"306e3cc61b63b1de91851d203f50e6f1bb96765e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.69-beta.tgz","integrity":"sha512-eSlJI8MN6MazDg7FL10oM+cpaBsYt10K7HG/D3Fs1Z8H0q4t+z4xzd3Ywysrmuy3Rik2iQ3lhBJzILMdhJMXWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDj8Rnk6Gmf/yZ3nMF1zfkuEeyV1ynTGaT4FradrDPQxAIgS75uTBfQpmElio+L45flIn2BbMKDGEWsQO8UBpiV4m8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.69-beta.tgz_1482339918824_0.30295752780511975"},"directories":{}},"0.1.70-beta":{"name":"meetup-web-components","version":"0.1.70-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"391c61392c80957038a3ecf1f1b338543a22d7de","_id":"meetup-web-components@0.1.70-beta","_shasum":"2846fc820d50afe0e171ff6f22e3851e0187f23d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2846fc820d50afe0e171ff6f22e3851e0187f23d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.70-beta.tgz","integrity":"sha512-w91Cq/QJNIsxMjj/C7Q0IUojJ4Zp4mJo1WWopsdHsq8hj1+8QkhIN+9y5LSz/DjDcXCpkB55okxVNwU595MEGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCg9PoLFUs9fxbhGUqXg1AYv31FUNZA43aJzGpuALaUpgIhAIj/k/y/TMlIoL0vy+RvzNC1KZAgoS4Q5daXaL+1FS5D"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.70-beta.tgz_1482350564407_0.30534317111596465"},"directories":{}},"0.1.71-beta":{"name":"meetup-web-components","version":"0.1.71-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"64c04022bf1381535a71fae566143065b944b2bf","_id":"meetup-web-components@0.1.71-beta","_shasum":"c8900b9e9c49a01042e6204b343a4f371399c548","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c8900b9e9c49a01042e6204b343a4f371399c548","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.71-beta.tgz","integrity":"sha512-XZ/4CbJvmSu+DzoDBGdjelsmzyBiWPSIMIFB215ok8CXr+UH97/HAWEQDeJODOkXlycGej6fxvdVdGkfKoHQ8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICe0DvO1mZWyt2kFGzuMrefzLtkXt/fWXfO03RXpkefGAiA1Xl25Pmw9hM9vt7JdFhJpO2kW07sBHM9kf/8zTHlAbg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.71-beta.tgz_1482351242429_0.859871041495353"},"directories":{}},"0.1.72-beta":{"name":"meetup-web-components","version":"0.1.72-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"8bcd7ac70da1db569a32bbc64164215e2429ef3c","_id":"meetup-web-components@0.1.72-beta","_shasum":"f269665d31b4c61cc38d3e7a2c43c10328d88fc6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f269665d31b4c61cc38d3e7a2c43c10328d88fc6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.72-beta.tgz","integrity":"sha512-PoWVCjvKoFql4PI9YpwhPwXR1+CArdTfBVGtphZmuIFgRexzWrqqd184ZlOMHckX73lU3nlI7huQ566VqLaQnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFw0u9QzzKhSQ+ysxPSMeg21nfN4BVaMUWo4L+7M56CaAiA3hJwYZJi9cEYebBIkvRbCAnhNIUCRuKTftimzPiZDXg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.72-beta.tgz_1482351672931_0.3108226698823273"},"directories":{}},"0.1.73":{"name":"meetup-web-components","version":"0.1.73","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"bffaaf8015f6516799e5dfe222c7052d69f2dae0","_id":"meetup-web-components@0.1.73","_shasum":"1b17a9249a0faef75bef606c1c8a7ba80f4d43ac","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1b17a9249a0faef75bef606c1c8a7ba80f4d43ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.73.tgz","integrity":"sha512-5Bemwjgu3osTi0DF47AEiUMwNDMe0K6+BVNVeo8zxNuBrMM1fD+07PLWKlOgKyuFuW0oNuFxFqjBgAbKLEnVug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCREpnpighQXqnY86nqOwqth5wloEv0w18iLV+859SDFwIgBtDzpPJWqCs4xJlIOK5qOVYb5nkgNmUp+Sf2L7yiY88="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.73.tgz_1482352972619_0.6356653880793601"},"directories":{}},"0.1.74-beta":{"name":"meetup-web-components","version":"0.1.74-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"ef26068503d43ba2152aff6a0b20460639a7199b","_id":"meetup-web-components@0.1.74-beta","_shasum":"14a720bbb203e403c841c409c4163c90291de3d3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"14a720bbb203e403c841c409c4163c90291de3d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.74-beta.tgz","integrity":"sha512-rubn4Ju0lXsUFfzpS+e2m694Zszc5yJjtOKgDQMLJ0nJhArFyuwLD0nN34fMv4LqEZUZegXVrf7bJJf2cUWkMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEgUZYZSZzrWtvpLPJrkFKdMqdQ83kDj6qO8b2brDs/bAiBIETkzaiKcnjM62bsa5pV4fmee6o813cjAXfabZX693A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.74-beta.tgz_1482356898131_0.09409874049015343"},"directories":{}},"0.1.75-beta":{"name":"meetup-web-components","version":"0.1.75-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"578954b59a9aa79258ba07f2ff0c20634348eea0","_id":"meetup-web-components@0.1.75-beta","_shasum":"147f6b26b1fcf87286776bf2d676bf8e0949a702","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"147f6b26b1fcf87286776bf2d676bf8e0949a702","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.75-beta.tgz","integrity":"sha512-lBvzZZhMIK7D3jvhK0TtdzghjaMIYcpADlTJt/PTN0B7cgo6mHNBxuQrG40b+aYHtoH1ahc0WfRGfbGqbdVY5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjShvT5UgI0DYEMKESxJWi67S9jiFEK5Uf6S1F2FnqdwIhAKjuvTfV3VcRjGnAoTFBFoE7hmdzJtmG+bkPNuXxq97D"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.75-beta.tgz_1482360176046_0.21641212655231357"},"directories":{}},"0.1.76-beta":{"name":"meetup-web-components","version":"0.1.76-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"4d350f6619ce0effa3c1c3a23676ce8dc42d0dd3","_id":"meetup-web-components@0.1.76-beta","_shasum":"6c5861fa94e8e7cb675e0c16b8bd4d3bf708f045","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6c5861fa94e8e7cb675e0c16b8bd4d3bf708f045","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.76-beta.tgz","integrity":"sha512-tYfFU7MnHQXHHK9aOcmywUDv9Veevu9U9h0t4xbTij7p6BHkStrNWNiiAw+l5KbYwQajWqYfibgFU58yh4uGhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBh9GZMPpfkOHWG+lIttWdxIcDsiVOJ4r4NxIP1hy/NXAiBxvJjMgAQgNpTUYwfHWws6MtkCWLnMJ+PZ0aFKtYTjBA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.76-beta.tgz_1482434987809_0.1449737367220223"},"directories":{}},"0.1.77-beta":{"name":"meetup-web-components","version":"0.1.77-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"7bf58aa87358679b3b3f7582fd785732352a63c1","_id":"meetup-web-components@0.1.77-beta","_shasum":"c5291ed5ac6df7b7fa931fb2e8e23d576fc36d97","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c5291ed5ac6df7b7fa931fb2e8e23d576fc36d97","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.77-beta.tgz","integrity":"sha512-qKNwbkivNTpcHydubucWb9B/s9nmgKLmQD9ofHADJCDZbvKIZMWfvPpXqmHfCcEekVA2KP2rtvBDKO9zKmTrMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQEXPd2z3TmayJCYLm395geZ4IK6mkSRbav8lv9pNqKAiBhjJsDmUBu24mrwLAm+1K2qH5Aa1Ny9Drj13yQUZXJyQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.77-beta.tgz_1482436259122_0.023210330866277218"},"directories":{}},"0.1.78":{"name":"meetup-web-components","version":"0.1.78","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"4a06f0c3a3793c687f01991afb40ea7f04c4472e","_id":"meetup-web-components@0.1.78","_shasum":"74eb4e689fa3072d53d93e996a6a122bcc5e41a3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"74eb4e689fa3072d53d93e996a6a122bcc5e41a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.78.tgz","integrity":"sha512-U1lTAfUD4N5SdFJfHfk9bY2L6vqGA5FtOkyM6AoXzhMxv4DFQkdVrtSm0d2NGxZ3dqM1Qbs8ZcglJZ335i5S5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEfF6Ptd02aW6uGXww93v/8DBDOQgRV1VWZJFu4atrcwIhALAwo6aFQ4ktpFPFwZl9TLK1QKjOS3/pWrZS8M0W/JA6"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.78.tgz_1482436563868_0.9175100736320019"},"directories":{}},"0.1.79-beta":{"name":"meetup-web-components","version":"0.1.79-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"6ebcfe01f8aefdbaaedafb25605a58f216c621a6","_id":"meetup-web-components@0.1.79-beta","_shasum":"bfff4c11b9a8225fbe535b56620e0e44438e6be6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bfff4c11b9a8225fbe535b56620e0e44438e6be6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.79-beta.tgz","integrity":"sha512-o+mrh2Eet4PuRLKXLNBOSyCUyvwSDR6QpLruyAgfh5bkp2VF+5BJxMSLl4orBOXHNZvY0JxAQpzodYAidpi2qA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjC7XSj4VgdjfqYNdBKYqAT8rAY+Bo3QFkGDdcop/R4QIgE7NWcgMofutf8co+n8A60MzS67lLu/eJif7HTKUjj/g="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.79-beta.tgz_1482958727207_0.132643731078133"},"directories":{}},"0.1.80-beta":{"name":"meetup-web-components","version":"0.1.80-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"573343e9b25185e67e814a14a2e725a5aeaa8ed1","_id":"meetup-web-components@0.1.80-beta","_shasum":"bf10d81dc668b9cc557bccda22142df26e72d2c2","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bf10d81dc668b9cc557bccda22142df26e72d2c2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.80-beta.tgz","integrity":"sha512-0o65pTPIDoYTB8EGWKJOdKsy4t9orHhAnb6aKBUh2gJJAXI0eDDdFyqZAD7UQJQyk/wRuXRuO681j4iRQEFzNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8c8VV6e1URQWHviHuaFRmr/H3OTATlEDuvf/cYTNm5AIhAMT/Uw0B9ns6xxpcwjgirKuCkT/omoNIItf4Jm7xF+JB"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.80-beta.tgz_1482958832758_0.08830908965319395"},"directories":{}},"0.1.82-beta":{"name":"meetup-web-components","version":"0.1.82-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"93cc24e1f1b57e21fa19d3619e13fbf6bc35f079","_id":"meetup-web-components@0.1.82-beta","_shasum":"9a69c9011b6a4cb7f509375fa5f011c0289b3ffd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9a69c9011b6a4cb7f509375fa5f011c0289b3ffd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.82-beta.tgz","integrity":"sha512-dDXyyXSyjOFVgJlVwExYXe///CuI3VRAzl0VBZXDHIm5cVD0/bhxKGYPA24cnxcZ498i4dILRP2iITtmBY2TdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd7/EPu37Vq1V5M4QYtR/0bxSiTudXURnLaljmoaVDIQIgBtC3Z+qkJggvozHgXRZOEL7p5Nx2WHboFFPGotlrJNE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.82-beta.tgz_1482968962226_0.11184541299007833"},"directories":{}},"0.1.89-beta":{"name":"meetup-web-components","version":"0.1.89-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"ec3d3a4518de5911c9c7f706217636fea0ebea23","_id":"meetup-web-components@0.1.89-beta","_shasum":"6a03862de86bac1022aa32618f75397f4af53865","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a03862de86bac1022aa32618f75397f4af53865","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.89-beta.tgz","integrity":"sha512-2L0YwZtUWof0rrypHNiGEfZrBuxZS1JlLvKYEAz9nbzxlwC8txNaMpeBNPQnGtbcjAyz0wi+XgeVtExeCTHXqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCf+1kpNtNd9SYIzA1WCsqGkvyW/SQjdv9Gx5uBREVzgIhAO3GP9DwJPcXUalePyGefKQoSYfFOC42t+7TEWuOwlFV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.89-beta.tgz_1483127884510_0.7880768589675426"},"directories":{}},"0.1.90-beta":{"name":"meetup-web-components","version":"0.1.90-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"0a34b534e231a46803716f640b5b79f3e140e8ce","_id":"meetup-web-components@0.1.90-beta","_shasum":"a117bc86fd14dabcaf4ef9d7fe909c54152ea1d9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a117bc86fd14dabcaf4ef9d7fe909c54152ea1d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.90-beta.tgz","integrity":"sha512-iULDS+kiWWWNdK+8Hy0CwzdlSKEH5T5RSIGMKPeee/up6mSwunNxWRwkN97vHgQjA5xyFCQKGsd+1ABeIWHvpQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQdMopROKIfoyxyvGKTtbOQuVkzlpdJGik2enqCeGOcgIhAJAhd4HYryM677vIuzlM8qBqcd+ooRChn3580HOj1Rfv"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.90-beta.tgz_1483545899008_0.9186568239238113"},"directories":{}},"0.1.94-beta":{"name":"meetup-web-components","version":"0.1.94-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"7a1cf0f31d7bab1954b7b3570704fdbe8e866219","_id":"meetup-web-components@0.1.94-beta","_shasum":"a20c3c3522d9d3a0f49a53fbf574a87e9c115922","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a20c3c3522d9d3a0f49a53fbf574a87e9c115922","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.94-beta.tgz","integrity":"sha512-fBIuKlfdesq5+nkD3wxDejJYykVZ1THFvxpp5H8RrKgTt50Qphyl3WITQ4ZXu42kI2BT5n6V+SpsINMrw2WIDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRQrJcKhFPK3lXUr//Mz7/e2C4qiHtW8K+v4MLgRbExAiA1BJfaGKF3NI+JCNe1DgIg3Ti7u1qI6ac7H10cEhSFbA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.94-beta.tgz_1483645238278_0.08129317942075431"},"directories":{}},"0.1.95":{"name":"meetup-web-components","version":"0.1.95","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"45e11d1576739573375ce27e9a4e233d448d379a","_id":"meetup-web-components@0.1.95","_shasum":"829a9e56869f47cf83784f551c8b3aebb2af27b9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"829a9e56869f47cf83784f551c8b3aebb2af27b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.95.tgz","integrity":"sha512-gpvy83WJSliDbXVXbQjrO4j+ypVI8XiEN7lEezkZfton7BaR1pBbCNF4jfuq6h4HUIzvaMLCH12/xk6corqz5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkcoAoUTVF1JUgi0bf2K6C/hpzsNPy0+Sl4cPykCHtbQIhAKx7E5L9BmubQX3yX31BnF24WCTw+Qtu7NptPGqKye5i"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.95.tgz_1483652011893_0.5778913970571011"},"directories":{}},"0.1.100-beta":{"name":"meetup-web-components","version":"0.1.100-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"7fbe9235d82bea55812ce6fd0da6ae5f089969a7","_id":"meetup-web-components@0.1.100-beta","_shasum":"be484bc9d29dd9c988f0551d64533dca2366131a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"be484bc9d29dd9c988f0551d64533dca2366131a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.100-beta.tgz","integrity":"sha512-UpcbsTBG54W4inXrkucJ1LBAUEqnoJ6agtpj+S6jk+gWKuFZXEQ2RXK8Z4IzuRSp55471O4lZP1svH0yIiZ5Bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBEQZ3dL+17dvBf+cc1boJCYNsufUWYZXF3YKfSDoljAiEApdMqCGeJajhivpA7+jehrvJ14zwRGpr/vRLkl2SInNA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.100-beta.tgz_1483998554012_0.3100400797557086"},"directories":{}},"0.1.102-beta":{"name":"meetup-web-components","version":"0.1.102-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"af8d7f2c2cb41f3f2379a6b2b5a40fd2e7ce4335","_id":"meetup-web-components@0.1.102-beta","_shasum":"143b347b4ad3c112d5035e126c8138986e93edad","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"143b347b4ad3c112d5035e126c8138986e93edad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.102-beta.tgz","integrity":"sha512-C/eerEkBkaGPat+ObkcKis0ZFgMCMN0notl0rBNwZKlFRwEygX7cEoRgbpSdPUXawUNC6iJvilHbJEBlcpZdqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCahth1TwvnJ4Il3hwQEo2PyTWVRRVjAe1PwHKf3gcbiwIgLAqqVWjtEczI0ZFRrrlvst5PFqxO9cFJrwzwXZqmYt0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.102-beta.tgz_1483999674571_0.9419413614086807"},"directories":{}},"0.1.103-beta":{"name":"meetup-web-components","version":"0.1.103-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"f8723a65a81268e313665f73240a809e09e964b4","_id":"meetup-web-components@0.1.103-beta","_shasum":"0587e029d134ae1e9bdd47fcab029e8db55b81ca","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0587e029d134ae1e9bdd47fcab029e8db55b81ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.103-beta.tgz","integrity":"sha512-Yw6WyNsFMEpcY+NbnLEqIxgRVlUBtkBVRTHhOmLVd2L5W3mmILOlRlfd+9nsdJ47d0EEHhsWJq+FQzT3h3F90g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvGrCW0yF7s8Km5MTVDrTx18XKHJersIsQe29KYsRC7AiA/fXOuD5HxnlQ7GMqn+cBZASzh1V3O1zzVG303/5ZDHA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.103-beta.tgz_1484066782040_0.7181485728360713"},"directories":{}},"0.1.104-beta":{"name":"meetup-web-components","version":"0.1.104-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"5662b21dc23aeae9c3541497283b517f598bdde2","_id":"meetup-web-components@0.1.104-beta","_shasum":"87f5017208d27b122e06d8d42bd56f16e2d0da68","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"87f5017208d27b122e06d8d42bd56f16e2d0da68","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.104-beta.tgz","integrity":"sha512-DXHLhzAeZEvsPudWIcr+Z8n+BC0vNzruee+Aim1GHHzwG80KHg/Tp1zMSFdfNjy5ji6HKbdnGgPWQwa9n6jj6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9pvdfH1qx/+OqZyaW51advwVc+4BlsQnJn5+Mz8y/KAiEAqm14HQ/E6MhyEV0ocqDox+m1I//O4EMaWqq7ePI9jRU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.104-beta.tgz_1484068286620_0.2612504418939352"},"directories":{}},"0.1.107-beta":{"name":"meetup-web-components","version":"0.1.107-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"b2e904a933461ac6ae2e684388dde1e5d4083f09","_id":"meetup-web-components@0.1.107-beta","_shasum":"509c169a6ef0fbad92988b21a9bb4ac4bb7a7c29","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"509c169a6ef0fbad92988b21a9bb4ac4bb7a7c29","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.107-beta.tgz","integrity":"sha512-6o1DgTbesdoqx9nQjZHnwkn39hv8nyD+SMaCguzN0/2oF5t2sIsk7NaxStebIxCi6bcDAtHhbb+LjxUCp42kHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPcxnnnaLHcLTKGXKU4p79vFKcJBRQOu6Q5oBsJW465QIgItjAb82A23RhCkUWkXC98gHSvXRxi94XghrfStGkdsA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.107-beta.tgz_1484090925385_0.1421888971235603"},"directories":{}},"0.1.108-beta":{"name":"meetup-web-components","version":"0.1.108-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"b2c54693b0d293fa231c9021714ad363d429caf5","_id":"meetup-web-components@0.1.108-beta","_shasum":"50bd716bb2c7b6b9c2537165539cddbb7eb0e04a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"50bd716bb2c7b6b9c2537165539cddbb7eb0e04a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.108-beta.tgz","integrity":"sha512-UfC+e7lrZpNloG/vT8tuLf2whI0kEZ2pu8/jwHS/+Jhg7uk1imXlIUqL8ypKMe5Y2cXbkVNVpXJEmVBUn34oIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5iNhiPPzt4tSAGi004/zkqt3TGOLWg6J1r1A1N02GagIhAOr8XFhtmJypeLoWTWW6RLeMCt+SRKM7hXyQuwmQUuin"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.108-beta.tgz_1484091592311_0.8375750794075429"},"directories":{}},"0.1.110-beta":{"name":"meetup-web-components","version":"0.1.110-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"17191370f4059c7feb94a7e03511f2c7c806f1d1","_id":"meetup-web-components@0.1.110-beta","_shasum":"9dd72548d49403adb34a41a081f2c688350a566d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9dd72548d49403adb34a41a081f2c688350a566d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.110-beta.tgz","integrity":"sha512-5Yxk+aEePmrB/T1NQ0p7VETaigrUFgtJA19MEzNTn7daPa7Fp6LtQ5HRsQ+tsiod9aOX0D+AiuEg36l7r3gbdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUY9DKLjmtu1r0Yr21Qn8Z4jcVvT63erhJjx/ovHyHyAIgdD/89JenrLJqMg9gi6nJlH6xGABn/DLsMrQnA5SEurM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.110-beta.tgz_1484095744855_0.9704232742078602"},"directories":{}},"0.1.111-beta":{"name":"meetup-web-components","version":"0.1.111-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"ee659d81ebf19dcea3f668c7b77ada7914888968","_id":"meetup-web-components@0.1.111-beta","_shasum":"b3af6bf6c0709dd899e8d8a6b2e646513246fb61","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b3af6bf6c0709dd899e8d8a6b2e646513246fb61","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.111-beta.tgz","integrity":"sha512-a4anNpZ1sgUTObBTO1NtbDAggCZQZr+c7UM0/G1juDrfxgjtxkiMyl6guKc+TkSgTTWeQc1ueDRTU3XlZoFcKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDX2zp/ZEneyx36bUCb4GvTvj7aZQ31vUGMqVea5Vr0hQIgaBKBoF0qcVH9ZLR8fBBUxxnxUA95IMbX0KT6EsIQaXY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.111-beta.tgz_1484097326548_0.754556423984468"},"directories":{}},"0.1.112-beta":{"name":"meetup-web-components","version":"0.1.112-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"1bc3022a99f1b5ea8a6f1966810baa6b3196fe42","_id":"meetup-web-components@0.1.112-beta","_shasum":"89cde9b456af05aca53d7a85599f103d6fcdb011","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"89cde9b456af05aca53d7a85599f103d6fcdb011","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.112-beta.tgz","integrity":"sha512-FA/pxWIjDD6PQVi0vxKXWexCRXfX0fqwqkdQ+5OGm9Nx6n83UQaz8NNykxbIA+njzx+f5kUYu7k0PfoPzGR56A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYWzi332bj4BuT8zfOCNrjGg08XxaiwoVkFmZWtvB91gIgMf9pRCSmTM+XiSFfiQiYoTRDS2WbJ0eNbdShWzhZpAg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.112-beta.tgz_1484151705678_0.7351938243955374"},"directories":{}},"0.1.114":{"name":"meetup-web-components","version":"0.1.114","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"ea454e38c512aa9939c0ee099b7ba6219129a085","_id":"meetup-web-components@0.1.114","_shasum":"86d8c9f05bdf6cbbf3992614d2c6f43391b64601","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"86d8c9f05bdf6cbbf3992614d2c6f43391b64601","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.114.tgz","integrity":"sha512-/4TSHLK/K+QeTpUG/mQHbi6faT+bYxunGWd0efJ4jZVT0S39h58EVw2URTGGs50ZoyTxOv7rflimaiid1QPgmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIED94qxoA8JRu3cUmQOmQUCSnBtWBVk4De34AHv+fUyrAiBmBrZNXgCdqXYRdmSXZ11QdLbeLZ6hStS9uI36cccFRw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.114.tgz_1484160403407_0.06681997911073267"},"directories":{}},"0.1.115-beta":{"name":"meetup-web-components","version":"0.1.115-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"7f18a8df1c44d71cc112e92506ae725ad358b3c2","_id":"meetup-web-components@0.1.115-beta","_shasum":"9a9795d53b8ad0ad29a38436bb67906a1d9468ea","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9a9795d53b8ad0ad29a38436bb67906a1d9468ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.115-beta.tgz","integrity":"sha512-Kj1I9m/A40K/KVf+T336rY+11vDecptVB8NL8Vfrwn1hhixo0WrmuuZqZhDi3kmjpx/+bi//q0oVVlCsabFZwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBGBR48Gyu/KQP3mTgw4pv5j5gj18krkOki9RykI6LbQAiEA47O+Q+xZYbytP1nlE6cA1Uq+nzPbUej9VKyr3pS0TFk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.115-beta.tgz_1484160836915_0.08915816387161613"},"directories":{}},"0.1.116-beta":{"name":"meetup-web-components","version":"0.1.116-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"1fd6fe1caee02188aaa78e192fcf3c6814020c23","_id":"meetup-web-components@0.1.116-beta","_shasum":"31bdabeb2416305af7a59fb141e9fa40f998730e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"31bdabeb2416305af7a59fb141e9fa40f998730e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.116-beta.tgz","integrity":"sha512-r3NswLWeRWshhxB0TaTkqOr82VokQRMa/ux6EYol0Iv4mQX4H1PoE2vIQUe4r/1J4o5Jh58WefNikiMrRxh8yQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3SxFXXXBOx1dZU9XSKY2R7fu2xbGCrHu8sjilY9+yxgIgZKUIZCUKADqU4r+wRJnh4zfIKk02tuO3KXyW5dObp6Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.116-beta.tgz_1484174995675_0.288117058807984"},"directories":{}},"0.1.117-beta":{"name":"meetup-web-components","version":"0.1.117-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"6a08d807b553d03f8f88669b7e08fb0a7f578761","_id":"meetup-web-components@0.1.117-beta","_shasum":"a1c941863cfd98cd263b564940926a0054cf4e6c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a1c941863cfd98cd263b564940926a0054cf4e6c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.117-beta.tgz","integrity":"sha512-HZLul2Yl4dswYcbNDiTOSGZCmA714UZBVSUGmx8oCSM6KrWVWP1XSHia9lYKxMz3VMNesFt3SgmW8/apUMYtGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDo0g0T4MGVp1o1r5nSsFw67cD4BRz1TVqtMHoh9Hi1DAiEAmeF5zospa/vP4H/ghMDLNIysqR4mnHTLmmZneGtJ7Yk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.117-beta.tgz_1484175687699_0.9608088636305183"},"directories":{}},"0.1.118-beta":{"name":"meetup-web-components","version":"0.1.118-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"75c5e891c7dd7a23ff53193cd345d466fe21af00","_id":"meetup-web-components@0.1.118-beta","_shasum":"f5ac771ea6a432f91e69aecc8d42926e3158efcb","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f5ac771ea6a432f91e69aecc8d42926e3158efcb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.118-beta.tgz","integrity":"sha512-SzNUlqhsEGMkVTmCzYllltZkLmeAyvDXJdUwy371+zHH2Lnz3Yvj7/8dwHaGNnFuPjgvosqk07lsuYtGLocMsg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwyF2ulTtGqq8DC0cFGGEmSyJoF0WY4/OfcmZIDffp3wIhAJxgy+yWaZO2INOzyOpSigAfAcz1YOucrZdzfRrvUeKT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.118-beta.tgz_1484176339490_0.8448743696790189"},"directories":{}},"0.1.120-beta":{"name":"meetup-web-components","version":"0.1.120-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"625698577732515381bb7bbdc35e6c3df23ffe22","_id":"meetup-web-components@0.1.120-beta","_shasum":"e3d4083eb9582afb9f1d8653ed93a4742d506225","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e3d4083eb9582afb9f1d8653ed93a4742d506225","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.120-beta.tgz","integrity":"sha512-1mQRWwE5EAH5O8GxnNF7ckLy/e2tWk2q2a01tEXkxGvxYBtT1cNm5//0wrJoxUh0UGAe/cp7nSF/R1x7R1zTkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC38NKmy5Tpy1sWEG9WcxtFvlhzNP6C/5c8GHI/f7u8pQIgV9hUPKBCpGwa8UGIZ8tTsRpfDp2k/K90fGX+W05Wdig="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.120-beta.tgz_1484235226258_0.2784930388443172"},"directories":{}},"0.1.121-beta":{"name":"meetup-web-components","version":"0.1.121-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"c8fb93bf2ab52acfb6669fe32c89052bbe08a8c0","_id":"meetup-web-components@0.1.121-beta","_shasum":"d31154a0088b3dd413449118cc5a04344b88135e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d31154a0088b3dd413449118cc5a04344b88135e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.121-beta.tgz","integrity":"sha512-bPFx2mo+tbB7HqwgVd3OByO1MKluUfFV9qmVNdEUP7ZIphASeV1y8x19J9h0jtIP4CUeO1CiS8VGgre5DbMYpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDC55eRDmm/A8BfPDNuAJRt2Xqn7Y27aEWW2WU7YgpkZAIgGhlmbQ5wbBV8Q8InE7Dx/lqZXXNnBAFCzqxCn9rZadQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.121-beta.tgz_1484235420675_0.3772945140954107"},"directories":{}},"0.1.122-beta":{"name":"meetup-web-components","version":"0.1.122-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"3c45da4e34b7d8c88894425534a3de861be88464","_id":"meetup-web-components@0.1.122-beta","_shasum":"7ff0d880f51fa4a25c4a7792fa0ce25f53ccc3c5","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7ff0d880f51fa4a25c4a7792fa0ce25f53ccc3c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.122-beta.tgz","integrity":"sha512-+RISQeskYgyQj7T1JOdew6DA9KaQlxalqyPsQG9JWpjMei24+erDw0+9HORbh7/VK5zcBsxu7fpSZAPopsI9bA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGmzXVlU1Aj+i1UR9OnUTG9ZGp+Sim6/yqZ2evIyzko6AiABUSSwQNvKxStbA9C/wbC47taE+TA/gnaQZIANSsPBhQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.122-beta.tgz_1484242452814_0.01723931240849197"},"directories":{}},"0.1.123-beta":{"name":"meetup-web-components","version":"0.1.123-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"e12121d3dcf0f2e931875827d47476c6320faeec","_id":"meetup-web-components@0.1.123-beta","_shasum":"e3cd10f3b5d6a8c9cee2d1f274c9538786b05c71","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e3cd10f3b5d6a8c9cee2d1f274c9538786b05c71","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.123-beta.tgz","integrity":"sha512-/0UBHn26TNwRfooO1/Upen96JaPQSBC7R/VnAREKAHJCyAy83R/0nwArmutAiuK7uZ6qRXuYlVXEWanRVZRPIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAXj+UrLno6d5hxUaO/iTQvrMYwdnZ+KTCal5J4BVFREAiB6YFo9fujwM6+131DZQU6pILgIfzxRCNn64sDSXiIFeA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.123-beta.tgz_1484245376544_0.6115282024256885"},"directories":{}},"0.1.124-beta":{"name":"meetup-web-components","version":"0.1.124-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"88172c3bdb5970f108705d3759434608cbd09b61","_id":"meetup-web-components@0.1.124-beta","_shasum":"97bb28c04d935c9d1d06b9b2bd03b33466f0ffd9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"97bb28c04d935c9d1d06b9b2bd03b33466f0ffd9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.124-beta.tgz","integrity":"sha512-xVkONEgTzR5JSrZX22C76aFyneQnUlfNPW0gBXCIQ7XXsGTohxlZ3Js1tf/Tnyl7niSjHasw8iUfZ0i3CSgB4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4Y6c6yCj2L4dFUprJNRWhutHJHmy/PthGX85AxdSWkwIhAMXXedsDkSwjZGihoYmyL5vSAHh7a6O5oYbe2rNuO7z8"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.124-beta.tgz_1484245629496_0.06970469118095934"},"directories":{}},"0.1.125-beta":{"name":"meetup-web-components","version":"0.1.125-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"b7db1369665d1da1faa14b3a4afe0a9d93c41dee","_id":"meetup-web-components@0.1.125-beta","_shasum":"6b96a52dcf79d7d0f2607607cf02b14317664f42","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6b96a52dcf79d7d0f2607607cf02b14317664f42","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.125-beta.tgz","integrity":"sha512-pecI1fLeGVRhuPG7XiXoMWj/atFuEIddS9aOq9+UlHZ6hPyaOUmlwWu7VHeZgAqK+N08zcGJ/nPuf3dCv5B96w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDu4q17FhAiFS6aXr8yOwLAnZ3lRmNkkexLbwjxEUVahQIhAMzxDmOZL/GVtLIU0bxGBFZ/T39QLxB+KeX07M9jONzL"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.125-beta.tgz_1484245747836_0.013008428271859884"},"directories":{}},"0.1.126-beta":{"name":"meetup-web-components","version":"0.1.126-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.18.2","babel-jest":"17.0.2","babel-plugin-react-intl":"2.2.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.11.1","eslint-plugin-react":"6.7.1","meetup-web-mocks":"0.1.10","node-sass":"3.13.0","react":"15.4.1","react-addons-test-utils":"15.4.1","react-dom":"15.4.1","react-intl":"2.1.5","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.33.1","babel-loader":"6.2.8","coveralls":"2.11.15","css-loader":"0.26.0","eslint-loader":"1.6.1","inquirer":"1.2.3","jest-cli":"17.0.3","npm-run-all":"3.1.2","sass-loader":"4.0.2","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.5"},"gitHead":"eb2ae17f6ebdb6e99ff1dfa8dce7d25800c55031","_id":"meetup-web-components@0.1.126-beta","_shasum":"ab395fe216582b4e8cdcee8831218cac2a7a97fb","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ab395fe216582b4e8cdcee8831218cac2a7a97fb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.126-beta.tgz","integrity":"sha512-mkesPXlkIrYXM1oRtMyVks/THyyhsytaUFVN/EJYLY1Mgb/ZeIErAUmhfJXzkShqu8UJ9iF3vi2qTGdn5GFiqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHf5n+YF/MRzHGjVNw+IJx6QhnXc4A0FzoFbPLWOmlCAiEA6QJA81yyHbn27EDu9xGdBpnCVdeTyfIFcAOCQqJYs8g="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.126-beta.tgz_1484248256614_0.21924213389866054"},"directories":{}},"0.1.127-beta":{"name":"meetup-web-components","version":"0.1.127-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"ecd4a9eb58edad87fa60456af3e425a3e1ed2bca","_id":"meetup-web-components@0.1.127-beta","_shasum":"b129eb029b6e0e74589d35189c1aa877e6384f38","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b129eb029b6e0e74589d35189c1aa877e6384f38","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.127-beta.tgz","integrity":"sha512-Z0Vq4g5tKkImoRfDzdjXOj7sBAqhgZW/aXoUsRZXYtankDKQCJmtxpuB6hgivKAA4B+oMvKHgUqD0ES5yxdRUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWPANfAOsW62jZldTjJUYCdiPWihxwQP5VbPWkelVrBAIgeG2UdbmhziQIcmsf8kViGa/vCyJr/TB3XoKcCW+Db+U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.127-beta.tgz_1484252373394_0.08391254674643278"},"directories":{}},"0.1.128":{"name":"meetup-web-components","version":"0.1.128","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"4982b79b5012466015b4c15f140edeaab4abda14","_id":"meetup-web-components@0.1.128","_shasum":"486868fd2cb36299fe0d9258b6dfefc449ad705a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"486868fd2cb36299fe0d9258b6dfefc449ad705a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.128.tgz","integrity":"sha512-/NSPaThh/fJ8uOEeO3/xLjm7FeAjW1beLYQVEU/Q+MNosgqIcjGTSqg+NJLWktE23/rSuErk2YEnFRGxxZbr9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpyes65gIOV4uMndhwaA32RPYGwLTJ0iFIILiKklZhkAiBa0HrprHd0Yc4AoEHyxXkxCucbS7IM1rCFHgwfXT+k5A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.128.tgz_1484252925699_0.5793623535428196"},"directories":{}},"0.1.129":{"name":"meetup-web-components","version":"0.1.129","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"904ef7733a8f1bcfec3470b3ba25c9f0347bffca","_id":"meetup-web-components@0.1.129","_shasum":"8fd505bd9df67e8f7f81a875ac59e8542f230fb9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8fd505bd9df67e8f7f81a875ac59e8542f230fb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.129.tgz","integrity":"sha512-ySJ/mOCndm0ane/ghc/jg1Rn4iXYjo0/mENZ46I2GKlrk0gr7SB7KLdUGsVgvjFHvK1kiOGF1ja5MG3OqYOKtQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNQEAanEWmfZg4+SHri0LeLo/7LxqemA3yAKfBX/qPhQIgGm4njLOHw3OzeBEkpjt2wUe7MqHq6peE/XOZ5pDllcM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.129.tgz_1484254778901_0.7474047064315528"},"directories":{}},"0.1.130":{"name":"meetup-web-components","version":"0.1.130","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"eed918a3ae440dc7b730dc0f86483c69cfe5cd47","_id":"meetup-web-components@0.1.130","_shasum":"f6e6bed9eb64ba8008b4e46ff32f3109fb8979d0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f6e6bed9eb64ba8008b4e46ff32f3109fb8979d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.130.tgz","integrity":"sha512-TS8bFTEEfQCNfpf7S4AA3Gf+u1Y7hssszAcqFujEcjTDbxIHl4SXZuSphnpSIy5ATALa2m4lrE6QYEDZqgwVag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFCQfS88SXezVRU91PtMuJ+xAge9rlbXpp5lmLZWtNPXAiEAxiwPk8+e3Y4Hi6Rv0A2Q64xJFllW4skNpiDiPDvolaQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.130.tgz_1484254826833_0.5807949895970523"},"directories":{}},"0.1.131":{"name":"meetup-web-components","version":"0.1.131","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"e1fac902eb81aec4688c0de2103aa97e808ceafd","_id":"meetup-web-components@0.1.131","_shasum":"24b19e406acbf0d216b36d604e8956cb39d3dc44","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"24b19e406acbf0d216b36d604e8956cb39d3dc44","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.131.tgz","integrity":"sha512-P5Q4B1byo0JyO3yj9VzS9M3k6uM3h/1kBHdQGEYHRdcirigQcwvUTWmAgEedgi0rofOrn0iMNhm00Lwo8CcmpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkkf4lytDX58uvoDEeu0QwsNZ7Mg05+7ZRuG+C45voqQIgYUlcRXp8WCttY37K0k43EjKcOPJTNPohkWMBpTYf0x8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.131.tgz_1484254857637_0.7302166840527207"},"directories":{}},"0.1.132-beta":{"name":"meetup-web-components","version":"0.1.132-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"719262b51c3f0ec1ca55473982b1931f195700f4","_id":"meetup-web-components@0.1.132-beta","_shasum":"50558685fd2c080fb0bf753e43c477f200a8541c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"50558685fd2c080fb0bf753e43c477f200a8541c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.132-beta.tgz","integrity":"sha512-VM5N1O1MruItIS8Vo32XAhcnMVn0rK6KFu/9UaJkHL/BlX7b2kJqfpoKPH8Ni52pDcI6uBnKXakH+Qex3XkQ9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAf/BfaqTC6QDjk6fm8p6fywXGM9llG1xfiWVc+TSWLmAiEAoCguj3Oc1Z9jBvgxMk21mcHgb3E7FO9iBLIa6C5Qgbo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.132-beta.tgz_1484255203879_0.9085529230069369"},"directories":{}},"0.1.133-beta":{"name":"meetup-web-components","version":"0.1.133-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"3ef7ef0157db00f21e0c416909af2bca8327c849","_id":"meetup-web-components@0.1.133-beta","_shasum":"4cf9c31a67d162e427f9cc3263345078e3188faf","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4cf9c31a67d162e427f9cc3263345078e3188faf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.133-beta.tgz","integrity":"sha512-qeitEbFvO7Tqy1G6cgHsAV3/DHvoBykXKc/NbyrcqKiNq1uApk3FVSnSPGutpTQcL6cO2IqthDLtonyz5ZHcxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoVWu2hqA9+U8Pgk0riBZKy1dWQ4l/Ymk4pdSQnmi9dQIgFjWxbVc6nnVEKHNcHCCtuYh8CozYiZ7GqtFiRs3HtPk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.133-beta.tgz_1484255261188_0.5778009102214128"},"directories":{}},"0.1.134-beta":{"name":"meetup-web-components","version":"0.1.134-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"58e347d4e7ce7d90b7d052ebe502cc37308447e2","_id":"meetup-web-components@0.1.134-beta","_shasum":"bf24911828c394e62988f19c2da90d400a911805","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bf24911828c394e62988f19c2da90d400a911805","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.134-beta.tgz","integrity":"sha512-6eBQca3kxIVomn9clE3mmIYVID2faHWtpD5kLIliWhBS0qrKzMpFzbs94f+xPxAUOUENyq/y/sfoQ5E/dZaftQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH3uKN0YBskMyS4HexS7GNovILC/3GHu7ATWg3uH+o9bAiAlA5YomCp82X5h25O4fa/3Oaz3nnlrj3uGCpniqQ2itw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.134-beta.tgz_1484256552754_0.34772807685658336"},"directories":{}},"0.1.135-beta":{"name":"meetup-web-components","version":"0.1.135-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"b7ab3ae3ae1af183a89f5309a16c09a1f7ed2980","_id":"meetup-web-components@0.1.135-beta","_shasum":"4c4ca9fcbc32ee3b4b34f9c0138726e512d3b440","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4c4ca9fcbc32ee3b4b34f9c0138726e512d3b440","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.135-beta.tgz","integrity":"sha512-Fd5x0uSd+Wd2U8Ml1a3iS5vZLthhtlvz0mD8goMKrnKXeM8UXa4KIFmZowUMwU59WSGi+K0/CLVVKtHkNsJC5Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAXpxAG2DHJn7/HgNPN7IAl85EKES167VymQT387bSuGAiAM3AGM+qicLy0+bQhvSMKypvzB4qHEy5UtXN32rcfBYw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.135-beta.tgz_1484259390139_0.19493464403785765"},"directories":{}},"0.1.136-beta":{"name":"meetup-web-components","version":"0.1.136-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"03ca66ae3fc66f7d8e9b735822334449f10c802d","_id":"meetup-web-components@0.1.136-beta","_shasum":"df4bf354fc7f16d644410efb1655ada1701bb2b9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"df4bf354fc7f16d644410efb1655ada1701bb2b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.136-beta.tgz","integrity":"sha512-DvYZKbMfJJE5NyObthm4kavs1TvHDkMm1Rw/5WBGnKIfDy0LZpPzZY3fwB7eddFj1Ch2Gl2fpQJ9Q6Gdq6ZoZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGgP9JXgVmoFQw5hdwUGm0nSXRKuoFSYFrxp5dwLNqiHAiEAi68PxrV8dFshScT5XDQjjjeFyq/GQU6TT/Xe1NuBmTE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.136-beta.tgz_1484261351431_0.47027518576942384"},"directories":{}},"0.1.137-beta":{"name":"meetup-web-components","version":"0.1.137-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"f0b3112c7b1f41af6a7afb251ced84802b046ccb","_id":"meetup-web-components@0.1.137-beta","_shasum":"dc9111bf9a736853f6bdb88119446aab6598e3a3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dc9111bf9a736853f6bdb88119446aab6598e3a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.137-beta.tgz","integrity":"sha512-Ym77FCMAhKFhaRF4LUlTgG2tQ4s5LuTgZ6bpKyZtCoGXLSgZlQf5Py3HQgQ/oB0qhjB63g5cGiyg/lwOXorH9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdrKAmE4ivYfQjWteA8+OPf3xeccvGalkeyRZ8cknCgwIgJGkqQKCtZFQ4p6p38bH14rUKk80x0zprxJkDnhiw9WY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.137-beta.tgz_1484262228053_0.49219818017445505"},"directories":{}},"0.1.138":{"name":"meetup-web-components","version":"0.1.138","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.2.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"611525026f27bd1fde7de7dd344b0201db069072","_id":"meetup-web-components@0.1.138","_shasum":"4c2209bce082b216d27c3c13f68753affc9fdeed","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4c2209bce082b216d27c3c13f68753affc9fdeed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.138.tgz","integrity":"sha512-y2q44Nn9AkxcUL3sNrlb6qAp0Eqt69Tel7e1poh9ffsGYijCS9GqMoQjVtOGJHzors/h9XtKmbREvk8HkMEvDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDqTFYAFv923dEA8Ju5hdO/Rh25qojZD08nJIQN3xn/bAiAvJGpTkllYR9CpD2YOJY6oyJNZDO626ShiNuWNjBAl4A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.138.tgz_1484270720061_0.7615306857042015"},"directories":{}},"0.1.140-beta":{"name":"meetup-web-components","version":"0.1.140-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.40","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"e54835dbc72c33e8f6544e86c9c091fa955e90c5","_id":"meetup-web-components@0.1.140-beta","_shasum":"6615f5a36b209f0ea38d7fe1bebef9623e3d7898","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6615f5a36b209f0ea38d7fe1bebef9623e3d7898","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.140-beta.tgz","integrity":"sha512-tKxmTb7/AS5l26bIn3OHPpsWa0TKg5AlUMIvbD3NwNq44+RyL/hp0tdI584u+heK1x/rKSLWUpSgqvc+re0gYw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp5ZthNXGxh6u8vudlsHkgW8hIzVT2RYpcM5Oi848IWgIhANnftVmN8DQHe8z1i/QIfBpztx/pCondERZ6LvJYH13n"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.140-beta.tgz_1484326824726_0.9484446260612458"},"directories":{}},"0.1.141-beta":{"name":"meetup-web-components","version":"0.1.141-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"132a751e2b5d9a67f8a8a899a29bed99154ac507","_id":"meetup-web-components@0.1.141-beta","_shasum":"c5ef9206fd2f6772afd10d6af1631c7aaa4274e7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c5ef9206fd2f6772afd10d6af1631c7aaa4274e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.141-beta.tgz","integrity":"sha512-D9V0z0UPymKBZqzaXuxB3/VMkhs4uAa9o3kvO95Fkx22AQywnzXYgfgdgftnHPKPFycsF4mIHd4W8zaE7/rkdQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKflkQb/1uBToWgHmNu0XVbkYYCE3BKyK9qwUzasdoZAiAfNo5tM38nn2YNrAFJTkvTJvvJXlB72PiYZTdNZ84YSQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.141-beta.tgz_1484329872220_0.40488967299461365"},"directories":{}},"0.1.142":{"name":"meetup-web-components","version":"0.1.142","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"7ea3d7f594dfe7f243a821d9bc1a0fe85c94a77c","_id":"meetup-web-components@0.1.142","_shasum":"facf3fe4a012b16586567553b698a1f3d33c7c0a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"facf3fe4a012b16586567553b698a1f3d33c7c0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.142.tgz","integrity":"sha512-T5CGA7Dqv1fBF8JjIEavakTpKIPvjXAScKFF2MjB/KFUBqq5ucdkNsfOeqdgvuRV3LF7d5m8nHfQrgoW8uq+bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPH9fAvsy8BFSfidykkRyw0xzXGTTCH1RNYKy//u4rhAiEAzFqnuSUcsfXi3GsPoE4iqH0Lvwk13gHELrlFm9W3fEk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.142.tgz_1484330227222_0.42078882409259677"},"directories":{}},"0.1.143":{"name":"meetup-web-components","version":"0.1.143","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"955eb3a074cc3639ed4bcd254aaabc21ded2a433","_id":"meetup-web-components@0.1.143","_shasum":"e3318a94bc945041f07d2c79ddb2cd562f20df69","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e3318a94bc945041f07d2c79ddb2cd562f20df69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.143.tgz","integrity":"sha512-2vMVlrI87/RoUFo6lJ82LKBX9SNrv+XXgcauVd+y72ukhlmYXZagBhTUo2VNSyxJOajboSPRF4YGT6200SNbmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLahGA3S14REo2vtLM+gqgYI+zGRTnFDPTxTuSzStthwIhANrVdqoK/Xi6Uthbo/J2sYAztTS5+HtsMYD8sYDKXnKT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.143.tgz_1484337625647_0.2829525121487677"},"directories":{}},"0.1.144-beta":{"name":"meetup-web-components","version":"0.1.144-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"8d912fca54f2992a4529df01b4a64b8bf2ccb745","_id":"meetup-web-components@0.1.144-beta","_shasum":"16f986458c582e4c57fabeffd4f399f94c688e4e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"16f986458c582e4c57fabeffd4f399f94c688e4e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.144-beta.tgz","integrity":"sha512-nABLv/IMY7iT180KoKlxqWjP3xYSyHScq93xe616nZdoU3bpnDx1fiJ63f3YJQvuQx7ZazXLc2yqD9KLglooZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAxp7Qwqzzy2yOV7oBNZxOMj0h2d/rkj0H/Dg+gc5fMwAiBcD60MSSI65eSVRQyZKdyH2/Lrp8Elp9xV0TD4WkFafQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.144-beta.tgz_1484344738215_0.34991350723430514"},"directories":{}},"0.1.145-beta":{"name":"meetup-web-components","version":"0.1.145-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"4c8a0baba76a8141833f8ffe81f01b2f70640e74","_id":"meetup-web-components@0.1.145-beta","_shasum":"19b6abc3ae65b7e27252e5ef50ee404162c88f63","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"19b6abc3ae65b7e27252e5ef50ee404162c88f63","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.145-beta.tgz","integrity":"sha512-OEKrf2DYVM4N1qxWsj7LVrkkx3WU8FqxJuU++7VPxrzbTmu1meZYQBM98aZ1NGQjUol978TzDZslpjhaET4cKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICrFR/ySF0zZwqOcAKnqXvuchZ5QMDwikViA3np4ENcmAiAj62XGm3+1uOwiCgujL/DZ/GKSdgRJPiCqXnShcHeQMw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.145-beta.tgz_1484441143366_0.3252808963879943"},"directories":{}},"0.1.146-beta":{"name":"meetup-web-components","version":"0.1.146-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.2","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"19645a9e49ea0d62b4340319243efedefbcd4380","_id":"meetup-web-components@0.1.146-beta","_shasum":"1697463eac0265c7e595f673ac7fdcdc617c547e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1697463eac0265c7e595f673ac7fdcdc617c547e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.146-beta.tgz","integrity":"sha512-h0LCqgfOFJCZzOtwNW7XgOQOVAp0zbNv9pT7M5ReinTc76+HD8akpuCrVn/CkKFfQM+VN12B01IoJ32ibEaoFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKOR9HPte323nSFL/NJm4XXaRsOsd1th1uUBaJGUI8EwIga5Eb/w/tPc27g1KY4DZB1dTULwGXKuXZN35+KH+mw2c="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.146-beta.tgz_1484447040507_0.8702815319411457"},"directories":{}},"0.1.148":{"name":"meetup-web-components","version":"0.1.148","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"78d9a228f299553a44bb7ff91b428fabf44bd70f","_id":"meetup-web-components@0.1.148","_shasum":"9d90954017618017c1fa84b52e56d9f64c31f70c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9d90954017618017c1fa84b52e56d9f64c31f70c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.148.tgz","integrity":"sha512-mJQC15wgNbmk6hAKnW/5SZhSZpJ6X4LSqjz7BFGwGRe61GDIlHeSaKSZLtISH/+xPn/D/ufdHpJXMqIOEeZYiQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkg3my2DlkB57uvGXpNhqcQ7p9OzyfGGDYk/587I238gIgBrzkaRuC/wdyVFGhKMLU6LYgryXOF+FnmaWURVZvKPY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.148.tgz_1484587145101_0.12979065696708858"},"directories":{}},"0.1.147":{"name":"meetup-web-components","version":"0.1.147","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.2","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"0d279fb64ad9e25c13684ddb7c746b80c22c62ba","_id":"meetup-web-components@0.1.147","_shasum":"9a6c2692b08adf0ba2da37f83a863cc539a2eb5b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9a6c2692b08adf0ba2da37f83a863cc539a2eb5b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.147.tgz","integrity":"sha512-Gxv2EpdQQn6sASqp34Cd8WYVOGtCbddUt8oAhoJREdl/Cw9XnOOnvMP7aCleGpwY2CWbaIBKfVyclUOF6g5VGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZb0zWnJcuVyU1i17mnl2hS+gyHEw8c7eRmP/4wdCojwIhAIQVE7FE6TzQJIEUPe743lG32YpXZI927z7LyY+SzsXe"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.147.tgz_1484587154310_0.3251533801667392"},"directories":{}},"0.1.149-beta":{"name":"meetup-web-components","version":"0.1.149-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"a66153e3539888bb207b7eb962c85cf57da4b574","_id":"meetup-web-components@0.1.149-beta","_shasum":"112308748e8ef8ae8f10db964cf2f628f58c9522","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"112308748e8ef8ae8f10db964cf2f628f58c9522","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.149-beta.tgz","integrity":"sha512-f5POnsFF1dUmh0MDCkdhc7gKyxzNGmCDS9mvZu6dFe6jORPsxJVOGCC3IM7yZdBTZmAgOW2H8Vw7vhiTmNStiQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3B+/6DycYAD2Q+4bFqgnnCRNRjCpVbsdQ2Cov/yGwAwIgFXS/GSha/GWqp0zPI+mDKO46gyiw6E283eCmywn4qZs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.149-beta.tgz_1484651913178_0.17915716348215938"},"directories":{}},"0.1.150-beta":{"name":"meetup-web-components","version":"0.1.150-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.0","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"201bb10fe2fc0c8bb8b53ba8bc25a7a5313080da","_id":"meetup-web-components@0.1.150-beta","_shasum":"79589316d739d8d3c5941a8b5ceae1115c6cdf4e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"79589316d739d8d3c5941a8b5ceae1115c6cdf4e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.150-beta.tgz","integrity":"sha512-p7Yvqw0CnHrsas0Mmdi2anNAgY95DFo+AeMsN2mQRApJohPhf5rjIEadmKGKNwu7GHr/Ixx5OGhfGDjrH8NH1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC75bRKyOKUUbJ+YmUawHfKR3gsiDD8jexRDTq8qMPKVgIhAOd9xn4+W+rHEIc0UmfgUXscAvValpEoTQJFEovtEEzk"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.150-beta.tgz_1484676022473_0.46010828064754605"},"directories":{}},"0.1.151":{"name":"meetup-web-components","version":"0.1.151","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"b23470776726ac9a9b3a86c7259548e724ddd902","_id":"meetup-web-components@0.1.151","_shasum":"8b724fc82bf5066d4ea1cb418336f6a16c9b8f54","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8b724fc82bf5066d4ea1cb418336f6a16c9b8f54","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.151.tgz","integrity":"sha512-hPTExzc7f62nAE3FZligiawGjsCyhNFUn2Yo6S78i2ycIze8UqiPBcYc7ajVdM3JYXnbXAI1dABqdthVOuHXLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFjWt68mmxYs14As1lHH/8cXNb3z5giXlo18LHRGE+JNAiBTPLFQYjryuVp67YIBlEExj/Io9VVHYFK9yw1UtjFj5A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.151.tgz_1484687724757_0.23692259285598993"},"directories":{}},"0.1.152-beta":{"name":"meetup-web-components","version":"0.1.152-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"aba805fb4702d4d15a0648228922d1c282ff2390","_id":"meetup-web-components@0.1.152-beta","_shasum":"986999280bd2698d7882cd234f80596bb9226f50","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"986999280bd2698d7882cd234f80596bb9226f50","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.152-beta.tgz","integrity":"sha512-5vCxD9oh/CD2jMLQ76mrwNwg22cCbUZSKy80GqAbEpELedhgqGx3ubVeY9T4koSpn7VPjhhUFT1Ma66T5nEndg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGfCi/u89P1b2eOSE96omN9ollwO299yVj+ZBhJ/2OgjAiB32q2nVBqcJNJJb5rYm47Ls+d7dWXGf8+UGJr83d0ilA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.152-beta.tgz_1484751999397_0.9744272471871227"},"directories":{}},"0.1.153":{"name":"meetup-web-components","version":"0.1.153","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"2f95ddbc31646882710cdf248a894c889b46c7d1","_id":"meetup-web-components@0.1.153","_shasum":"357c31c2ac9b76faeb960e61bf2ebdbf0a3d705c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"357c31c2ac9b76faeb960e61bf2ebdbf0a3d705c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.153.tgz","integrity":"sha512-gZZ5U3bS3YCAvHQDunAF5LHlIeJEOnoykwfitcv0pUn4UtAYAqC8bqAKzLHcRIkZioBdWr4tI55Py41Kqd7clQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICvyTOwR50KMQOowV+7EMp4lDOSOtgpP01tFffPCE52tAiBTgoWu80N1hV899Hb10c96gxOwE3eQ8CtgGyT4RTSFQQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.153.tgz_1484759830257_0.2080051035154611"},"directories":{}},"0.1.154-beta":{"name":"meetup-web-components","version":"0.1.154-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"999dc79a5c569c21f573282913a7b62fdca907ed","_id":"meetup-web-components@0.1.154-beta","_shasum":"40abc55acd75d8fdb9aa8437188547c31bf32eb5","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"40abc55acd75d8fdb9aa8437188547c31bf32eb5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.154-beta.tgz","integrity":"sha512-2nQObNSTCZ+9ouRa5rQO7VOTTEmbR0lA8aQu2tcSGB1LIt16LUY/kgzK48qvPAroIOndAU651PnC0rCfpPrZ7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDmJH7Nv0MVXbHlgWObbO56HkSZf5bz34HR18RQrzZc1AiEA///wYOIR8e+aC+j8bMZcZ+RPSkzqg+0mNgd+TgGeaww="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.154-beta.tgz_1484759842468_0.35884021036326885"},"directories":{}},"0.1.155-beta":{"name":"meetup-web-components","version":"0.1.155-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"6cd651eb3b00205248a679c6c0331218c96a0961","_id":"meetup-web-components@0.1.155-beta","_shasum":"e38049b980fe682f5beb034e63cfd38932167a94","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e38049b980fe682f5beb034e63cfd38932167a94","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.155-beta.tgz","integrity":"sha512-H/jANITb4Vdbay7VfkVTDltpGup5znLB/TqBo3FVzxGSPY2Sj3E9azW4kjkY8/7CAh0NMUxwzVHDxHfDv5oMpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZG74nqHNGSvDDNmhejEhdIla95RF6f/eJziO+eEemUQIgIzAHTW5u3dHPP0OM/qU9O/oT9jNTrWnPMcJInhBhPpY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.155-beta.tgz_1484760384722_0.1982753756456077"},"directories":{}},"0.1.156":{"name":"meetup-web-components","version":"0.1.156","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"6aa972e0c200baaefd8e9e1de6457b4acd0efcee","_id":"meetup-web-components@0.1.156","_shasum":"cc71401da0d910260a92af0021bb2be16f223707","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cc71401da0d910260a92af0021bb2be16f223707","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.156.tgz","integrity":"sha512-T99q7gA9xS/2/L8tnIlLdTGuTJNJL5n0miVVXMNtK9i7BF/KZJJ7yqtlMhlo8rg+xa0gzMDbXXLLksbjlxIe/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhdoUb0KiQbxeWpHwLLgbk4ya8YbA3P6uJOOKSjjeHUgIhAMc/MZubiKKTml2otpBV53gewEFmHnYD4pZQKPaAGGjn"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.156.tgz_1484763397595_0.5357921165414155"},"directories":{}},"0.1.157-beta":{"name":"meetup-web-components","version":"0.1.157-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"271a589f43fe1d93a84d6ba743638aecfddadac1","_id":"meetup-web-components@0.1.157-beta","_shasum":"395874d419943acb1a932963b297da281e7a0956","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"395874d419943acb1a932963b297da281e7a0956","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.157-beta.tgz","integrity":"sha512-c3snttL2aWiz3roqKhjUFyrS5bOLiokR79MWkKUaFWjCX0qhVAR1naMKQoI45Fq+5qNXzOYKHLd4aHLH7TPDAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwBXgiQCwiOWjpzj4sVMlOzbJJv99alNwO/Znt3aI38wIhANjTki6yhDdId4X3U8w2l67x5ey80Sp5GUiSTIeuCd/S"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.157-beta.tgz_1484763531373_0.6857268013991416"},"directories":{}},"0.1.158":{"name":"meetup-web-components","version":"0.1.158","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"79295b6a94df942d8b60dd3fc1df840b743eba0c","_id":"meetup-web-components@0.1.158","_shasum":"70e8a6fb0e64fbb62e86d5fa890a2d9c5024325a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"70e8a6fb0e64fbb62e86d5fa890a2d9c5024325a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.158.tgz","integrity":"sha512-jrDbNNDpC9JQNaGiwgNaXt954U8VM8csJlZ77smhXGmOU6hwU4I4bwcF5XLyq9hN2SHxnxQayfqLyRiO9ndFVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzoFK+LqAKEVdt/zCIbC0Rf/s+vXX6kJr2Syh+Db5LIAiB7zZQKq1F/gEsNKhkmpIKAYEdmF81CKbRWLDUZrmOpaA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.158.tgz_1484764551862_0.9383152471855283"},"directories":{}},"0.1.159":{"name":"meetup-web-components","version":"0.1.159","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"10b4a53c11802e319d7d2bbfa99c19d5f9e43f42","_id":"meetup-web-components@0.1.159","_shasum":"50597e08a7c16e75a556222fbf4ed648c98030a1","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"50597e08a7c16e75a556222fbf4ed648c98030a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.159.tgz","integrity":"sha512-uIOMHqRK9DcIBRZkvUjTOiw08QeCI9pkHKfBd4MV9NR0KPKY904T+nC7dHqoKtImYchu86IecCfxfo9eMCfKVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2RBGzzBMgk+hXv7DzoF4YdhAPDuNr19PlV9xde2nFXAiEA2rWO/m/HOm3kvYTFg0oikKjrXszT0qHLTepXLC9JxLE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.159.tgz_1484770919715_0.11257123970426619"},"directories":{}},"0.1.160-beta":{"name":"meetup-web-components","version":"0.1.160-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"9eafeb4a4c5c61f72ba62290bf2440ac6ec16af7","_id":"meetup-web-components@0.1.160-beta","_shasum":"8c95497bfa8d753a8567b4616d2af2c97c5cf21c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8c95497bfa8d753a8567b4616d2af2c97c5cf21c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.160-beta.tgz","integrity":"sha512-+ne+obqhWmwUALs48WOdAZbXq8XNrsfcQuUAunR3G3+59/PK3/Use2KOMTgfAQXs38+QZ0cPngKoBLC2LqwORQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGkLPm6sbkKt+VOuY2KSDwHq9FEW+yuSQDKxRHErclkIAiEAuhycdMllZmEdEq05cUm5mx4ExP2h4rHkczBh893UgZ4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.160-beta.tgz_1484772413699_0.041003803024068475"},"directories":{}},"0.1.161-beta":{"name":"meetup-web-components","version":"0.1.161-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"023c7634735f9ef5fe68ab7441e645909bf014ad","_id":"meetup-web-components@0.1.161-beta","_shasum":"bbab307cf68e13fb53a085a81435b77a4ef47173","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bbab307cf68e13fb53a085a81435b77a4ef47173","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.161-beta.tgz","integrity":"sha512-sl7xpq4BwB5NG62F5n95p4/Xkg+uk3kI9Ebv8t0pyn9DKcvZqNZBZLnbqNfqfZ3XcgJW/NzMv7hibuNMa3OwcQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDojrBEdJ6HqWu+8nZ0h88bJy8rmvhUBi1DsOGEFakw5AiEA8k87W/+2RAbNGhYS3tXnBXMOKrNcOA1Enil1KP7kluQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.161-beta.tgz_1484774877958_0.2724536703899503"},"directories":{}},"0.1.162":{"name":"meetup-web-components","version":"0.1.162","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"70fb86d8c95bb55e8d1e2c4ae199560f5da3c085","_id":"meetup-web-components@0.1.162","_shasum":"093b4f1873e7166eac34e8c533f548a49abe5814","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"093b4f1873e7166eac34e8c533f548a49abe5814","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.162.tgz","integrity":"sha512-CaoA+NVayRmDDYX7MJpnvn1szgjP7JG2wu97lC+z1oXcs7YCM6G4dGWD18X35TO8++iqy7Gi5N0sgWNc/vqi4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGn4oQsthr/QseumTMN0QOWDvU92did+1RLSd0jUCaH+AiAQtHiNbgyHxl4ey/hcUvGVOjAGalSpqqy4XjhHGUxPvg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.162.tgz_1484776300160_0.2877141498029232"},"directories":{}},"0.1.163-beta":{"name":"meetup-web-components","version":"0.1.163-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","babel-loader":"6.2.10","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-plugin-react":"6.9.0","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.41","react-addons-test-utils":"15.4.2","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","sassquatch2":"2.4.4","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"5e52c36aa7de1d3c9c8851d7bc7d256b91226c2c","_id":"meetup-web-components@0.1.163-beta","_shasum":"e45002f4afa0e52322236e8b78eefb3dfc6f82a1","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e45002f4afa0e52322236e8b78eefb3dfc6f82a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.163-beta.tgz","integrity":"sha512-O9+tq0Rg3XuEd5YsnNGooR9Hb+YS7dLLV0hTfKjapy1i5G68t3UnD7PW2cCGx/3aehd95JT8pHk+dRpaS2GmiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR2UdHFw7BbVc5CVuT+rlaw3RZl/r2RYazLJD/Mbv7JwIgN9Jcgp+M10lc1pByV95E1oYPFjXMh/zJuwp4QtCbdmo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.163-beta.tgz_1484785445570_0.8244968899525702"},"directories":{}},"0.1.166-beta":{"name":"meetup-web-components","version":"0.1.166-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.45","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","react-redux":"5.0.2","react-router":"3.0.2","rxjs":"5.0.3","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"50cedb66f04d6d44657ad50a68480cd5044d4750","_id":"meetup-web-components@0.1.166-beta","_shasum":"fd1a007090d57d4672d97f6977fb4935f420521a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fd1a007090d57d4672d97f6977fb4935f420521a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.166-beta.tgz","integrity":"sha512-40CCkR0Syy1uxAlVGEz2ocek2LlrO8uQDt20ouqJk+PMKcr2FDDuc/EVUFUO6197xsRr4eM2VD80shZxeifaUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHpVCWa0CoXfGRMyGnMKC3WSGAe5ClWx+TUvEVla05JfAiEAx7LdMcvqAoTqtkUXudzwIBhZqcuHajoKjfsvGT7vARI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.166-beta.tgz_1484837345564_0.9956985453609377"},"directories":{}},"0.1.167-beta":{"name":"meetup-web-components","version":"0.1.167-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"a423cd0dd413cc57cad83322648759a6e5856319","_id":"meetup-web-components@0.1.167-beta","_shasum":"a659d2b13b407ec214320623791b2cd92586bb62","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a659d2b13b407ec214320623791b2cd92586bb62","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.167-beta.tgz","integrity":"sha512-YVRr97+T3jKyz8p3siOHSaifLyLBfORj2sGVaVYJ20P3DfK/teDcyGmuJ+++saCxg3XagiEC7u8P6i9Ccz8laQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYOCl4x+I6G8jdBj2xy1qcp0J/E2EfRArapMp5PSzgogIgKS2UUoYBWssPavx7RCVFU+XdRxreD//8JSJmYpLgeWc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.167-beta.tgz_1484843608909_0.942769467830658"},"directories":{}},"0.1.168-beta":{"name":"meetup-web-components","version":"0.1.168-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.0"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","babel-loader":"6.2.10","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-plugin-react":"6.9.0","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.41","react-addons-test-utils":"15.4.2","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","sassquatch2":"2.4.4","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"318702c727d4bfaf992ed11871e297bb7af7d2d8","_id":"meetup-web-components@0.1.168-beta","_shasum":"bc4aee71dcd853ce3e046646ef8996b3072f106b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bc4aee71dcd853ce3e046646ef8996b3072f106b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.168-beta.tgz","integrity":"sha512-6fGwG/ljNTCzRDIyG3kEGldXoJOPuC7l6nhbF1sPbWlWzUiL7s4kk0yIx0s1Tdn+Mx5th3TmBtCAHSz7hpTUSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDvGk+cATTcJkf/EZEiXcuAIks2+SZR+PIUtp0SywPLwIhAJdvpHkbdoMYT1rClKis8bqp3ltqUXZXl1B0MxoOR+i6"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.168-beta.tgz_1484844919221_0.5709769413806498"},"directories":{}},"0.1.169":{"name":"meetup-web-components","version":"0.1.169","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"3153a94cb82585b28463313b19d225e2578f04b4","_id":"meetup-web-components@0.1.169","_shasum":"b224c9df846bce2bafb21383e814dd4ca128b9ce","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b224c9df846bce2bafb21383e814dd4ca128b9ce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.169.tgz","integrity":"sha512-1zJkf6QK0hNMUbmMS4KCHXCoHECHgxxtlBwHmDn4SC/dMjPeBnZrZQZ29eBZPIpuwJG+QkyIeImsHZj/GawkCw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkE7dF269QYJNInUFFwIH9jDLdepPqwWYGabfDfgJ8ogIhAKK6dNHybEbzwTp/p+rNeYq7tP3Ubj/G7Ofxax7s8J+7"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.169.tgz_1484848692133_0.12628172198310494"},"directories":{}},"0.1.170-beta":{"name":"meetup-web-components","version":"0.1.170-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.21.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"2cde2f7f279d9fdee64419cae6f904d80c61c0cc","_id":"meetup-web-components@0.1.170-beta","_shasum":"16eb04667836278244af96a415de8f1e4efd2369","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"16eb04667836278244af96a415de8f1e4efd2369","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.170-beta.tgz","integrity":"sha512-CWiqLyLPVL5ThcusPhuhBxu/mUa5gW1wwhVYcCO3cWglLHJcQ00cCKBZ0LX0cGMeki/llnhgyGH2h0g0w54J8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDisNls40kecv3Oe9yMCl0MEBI869/sjFJtOVgsoy4p/gIgNgL1BqlEJp1yzIAbeVOfUDr68jTkhxv6R5qjrb5TlgI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.170-beta.tgz_1484865671922_0.5644541236106306"},"directories":{}},"0.1.171-beta":{"name":"meetup-web-components","version":"0.1.171-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.22.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"d358eaf56db752c1b8f9df98b0d9d45a79d37dee","_id":"meetup-web-components@0.1.171-beta","_shasum":"ba998be0a67a91e3830e4c716b4f9df419900589","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ba998be0a67a91e3830e4c716b4f9df419900589","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.171-beta.tgz","integrity":"sha512-wGTfrAfk78Ih1BY2F1i21lrn9rgpaToaDsqZLt8IoaAjJ2qWCcximULsdSUQhnRy1lrANnroK+YseTRVcw0Sow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGdqUHfTUSISVqek5pnSxxSwD35gjRia5AlS0eDgrTZGAiBEr10oTkGxNE5RhLmu5w4l7ySeLdckYvBPzsLKwkTlJg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.171-beta.tgz_1484873065927_0.9417944855522364"},"directories":{}},"0.1.172":{"name":"meetup-web-components","version":"0.1.172","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.22.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"f5b656e3fb4cd1809ef4f91ab8c9478c352caf1f","_id":"meetup-web-components@0.1.172","_shasum":"d7f947d726d386f0dd96b674a2791bf80d57bc2f","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d7f947d726d386f0dd96b674a2791bf80d57bc2f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.172.tgz","integrity":"sha512-4NqlyBiAmd3dW9Li38zuEuIszum4xVva+jc8lobifP4iV30Fdl2eDpiO8qw2VsowmYfhcAhG4969/qBL/+tXPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrqosSI2cbjzUd1kEp0BFfvRQ5dh1KZn5HneV5cOd1ZAiEA/CmzMAG96/YlsKCHPeDUj62m3GfR9IouINL5ai6r+Bs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.172.tgz_1484874553119_0.5544750730041414"},"directories":{}},"0.1.173-beta":{"name":"meetup-web-components","version":"0.1.173-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.18.0","babel-core":"6.22.1","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"d1b665d94dad648fe295b87dd23f1ed704b951c2","_id":"meetup-web-components@0.1.173-beta","_shasum":"13110e6dcf4aebe118e66a7e07d58ca772403320","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"13110e6dcf4aebe118e66a7e07d58ca772403320","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.173-beta.tgz","integrity":"sha512-YOPWVYAg3Dh+vfTC3lpVyIihSZkT+Uv9uA0QunhMIudY9QvGGpN2bPnDCFxNMPUE+sNigaFHxv92dFE5COwooA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgligP0pGJuIB0nJhhdy/OOatAvmfdjJTK0F1t2ibr1gIgazB9a42lNIp2V4I4mG34wexjVYu8M5UKW3HegvVlMpc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.173-beta.tgz_1484882564576_0.6817538659088314"},"directories":{}},"0.1.174-beta":{"name":"meetup-web-components","version":"0.1.174-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"8852659de4eae473643f0277ae4f2bf0a9656d3b","_id":"meetup-web-components@0.1.174-beta","_shasum":"bf8b74964c3b3bc675bbf64706b995f8fdf850a7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bf8b74964c3b3bc675bbf64706b995f8fdf850a7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.174-beta.tgz","integrity":"sha512-uQj2IJDZhqsAguvWVMe534tXNK7k20As4QytN8mVhHZ7Y7IE4uCCSnPhP85wC5wsrrcYOwM/6CV0PXTWtA0Oyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFbvKgglOYUSCob/adNgLQCY0iNyBIRL/8hajkleBmRqAiA/r3hw9QkFqHzxLu5V3TNvcEI1Thf4Axagknmi9UED/g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.174-beta.tgz_1484892929438_0.4363639014773071"},"directories":{}},"0.1.175":{"name":"meetup-web-components","version":"0.1.175","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","dependencies":{"babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","eslint":"3.13.1","eslint-plugin-react":"6.9.0","meetup-web-mocks":"0.1.41","node-sass":"4.3.0","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-transform-catch-errors":"1.0.2","sassquatch2":"2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-loader":"6.2.10","coveralls":"2.11.15","css-loader":"0.26.1","eslint-loader":"1.6.1","inquirer":"2.0.0","jest-cli":"18.1.0","npm-run-all":"4.0.1","sass-loader":"4.1.1","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"69910ad4d2aff1c70bbb34ee8e7f1b6dc65850e3","_id":"meetup-web-components@0.1.175","_shasum":"a55ad34b30513b07f196a84ddb4132ecc2f5f35b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a55ad34b30513b07f196a84ddb4132ecc2f5f35b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.175.tgz","integrity":"sha512-bMB8xu3ErTdqjTI29OvXwzZA2aC40U3TdDPVjTA2CSxoDpq1+osSnFAMSB/1IzU8qt29QVG+9bbP54PjAbHjrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuCERl9A5mBikwDE9wW3yRV+F/Ttiis5tsE2VfDwX/+AIhAJy/rC9HCK/lWbJ/JTeAig2ZTjzuVhEwwZGBEpgTmalA"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.175.tgz_1484920674460_0.8011929150670767"},"directories":{}},"0.1.176-beta":{"name":"meetup-web-components","version":"0.1.176-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"a32d9c4f49d6041cd7a0edacce631d83dbaea89e","_id":"meetup-web-components@0.1.176-beta","_shasum":"0129f1e40af766d7964aacd54ad8fcc821ac4021","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0129f1e40af766d7964aacd54ad8fcc821ac4021","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.176-beta.tgz","integrity":"sha512-gHBHSIo/NQ67+4uBww1mCj/Joi+nL7wkURYf/nZswKUQF1zptVpBpCWdVfWSgnAOviw40kxDHiE3IvkSYsXaIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8XbOkwuZfxJlD2hcccH4gHP2YGCgB7BF+xjVl/ZsqhwIgEo/FAhTfgDZo2dzZNcNaPVklL/cAkGmD/nRB9lT+P3c="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.176-beta.tgz_1484936378032_0.8614559089764953"},"directories":{}},"0.1.177-beta":{"name":"meetup-web-components","version":"0.1.177-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"8386d114155789ee1fb0f4279bd0781fe69cc835","_id":"meetup-web-components@0.1.177-beta","_shasum":"f0e7fe61d8dae2e39603495bfdf1b584a63970a5","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f0e7fe61d8dae2e39603495bfdf1b584a63970a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.177-beta.tgz","integrity":"sha512-gyGdX45e2pxmcQkkYoQzLWHHwSjms85/k/6nNJ0pOJwdtaBEqOoQshcdupaVVqtOuTpatLr4cptjqB39tMiBnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM6bA1JVxlqvXRsDfqd/H6YcZCLPLQzKrkg6Y8P682RgIhAORdlf3ilh7gBcSsxq8VBWGZOtUZKq/8TzyhW7cLlpMR"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.177-beta.tgz_1484937809880_0.704722156515345"},"directories":{}},"0.1.178":{"name":"meetup-web-components","version":"0.1.178","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"a06b9f0049ab28681dc5326ae68743ab5eb9d686","_id":"meetup-web-components@0.1.178","_shasum":"0dc4613b78ee5003dbab2486a071491e8b0b2cc6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0dc4613b78ee5003dbab2486a071491e8b0b2cc6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.178.tgz","integrity":"sha512-xDbYepUiOTEcfZf+F5yauvEWGvAklJ974NtFhOwmW3OV9kiJs3D9+IxDhkO6H2IRMhE28NRCPniq0MUFoaKfMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoo1TRZCeUPCAZQBqqWvxHo0NXM6c6kFN28U6BECg5swIgTNiNiFe7EFFKItZPQDqW7l+MsPdDPnoK5WgOyYTxUyc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.178.tgz_1484944859405_0.15607449552044272"},"directories":{}},"0.1.179":{"name":"meetup-web-components","version":"0.1.179","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"e0380c69e6e631d19b0804caeefaf8a0970c8199","_id":"meetup-web-components@0.1.179","_shasum":"690f94b3a9068b576b86f07d888ca9d7fc875c10","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"690f94b3a9068b576b86f07d888ca9d7fc875c10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.179.tgz","integrity":"sha512-v3+rh6WU+dbY5FQC/sxL8y5sPacRpDQNSxOB2fjsWuOoCPniGkdyN7WSIYAQ+pxXQMgOELbwrVQmBnXspYXGrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8bD0DLvJjPAEhhZ85JvP7ymycq0bRYMaFJ9NKhuVAZAiA2rLykQo4dhfSYjQP+Z/W5l8xr/gKGQQsImSUScgYZJA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.179.tgz_1484945207769_0.4326764731667936"},"directories":{}},"0.1.182-beta":{"name":"meetup-web-components","version":"0.1.182-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"ad4616d64d82ed49222e94b276a0c0c3a35635e0","_id":"meetup-web-components@0.1.182-beta","_shasum":"ddaa7517940b36e296201916dbea5925f743cddd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ddaa7517940b36e296201916dbea5925f743cddd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.182-beta.tgz","integrity":"sha512-yIoas9+ZHF0+diFQdFzVMkcGSQ9drOOdPpEI3G3mz/hKzVT2Xoz2pTJwVgKHRRJ48+D/+4hWMiR0C9Mjx6ZIAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDbGLRZMZV8sZOsLB0SHMN1UGwy6LJJk2FbVjuseJFy2AiEA+gfdwq5xRC0W7oQIrt8j4G0X58rkkTvKSOXNU4GomTk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.182-beta.tgz_1485193699222_0.4257790532428771"},"directories":{}},"0.1.183-beta":{"name":"meetup-web-components","version":"0.1.183-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"2d8b8860726c68217d82316c32472cef23702b7f","_id":"meetup-web-components@0.1.183-beta","_shasum":"76f5742c4991f4a5f47ea919b130f8819faa1773","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"76f5742c4991f4a5f47ea919b130f8819faa1773","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.183-beta.tgz","integrity":"sha512-KjTZcooWC4I2ENOblOJjHNj7z2karG0I2yVsExyHjtdQYcWjbOlAZdvPNZyfJrvFlhA7uGP3vsQOczTi+Q+peQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBS0as9OaTWJXy1Cv4W6vWNpxVxFXJ+5EFRQBiOKmSi5AiEA1IX2qhQCYupPHEF300eA0V9zcQmBUDJqw6/mbU67wbI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.183-beta.tgz_1485196151394_0.9055881495587528"},"directories":{}},"0.1.184-beta":{"name":"meetup-web-components","version":"0.1.184-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"294ec709746b04e07663e777f7efd43dcb5bf3eb","_id":"meetup-web-components@0.1.184-beta","_shasum":"7beb18d00979abfe14de628aaf7a77dd2fba3fc0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7beb18d00979abfe14de628aaf7a77dd2fba3fc0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.184-beta.tgz","integrity":"sha512-eBCA5pDkY/UySNVRyiJNOmJHmcICyW9tY3lZgSSr3V35RcNYeuNq+eUqA+XgbWTgnlalikfNFT26PdVWAVPYwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbuMaB1q06oHOElhSRtoONwquQ/rkwhXQN6WlkYjYnhAiBe1nEJNjyHj9fx0wkUubrhKlZdVbA3/EtWoK0sSpPK6A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.184-beta.tgz_1485196164488_0.6537025475408882"},"directories":{}},"0.1.185-beta":{"name":"meetup-web-components","version":"0.1.185-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"05d5125da77d03108d05d387b100d4f8d58eea59","_id":"meetup-web-components@0.1.185-beta","_shasum":"ffda3e72d1f4c1ab9d888d66c0c64bf6521d6e53","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ffda3e72d1f4c1ab9d888d66c0c64bf6521d6e53","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.185-beta.tgz","integrity":"sha512-rwTUhE0e6XDpPR5nzGxi4MLvFIfl8ovyHiez1qCZSqrbh5WYpFVSmfIULyrpKF/CVU0RSyU2yX2jGrzSFUIipQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbN8QmlTjZmEQJjhjw75G5IPwOPhkkgKWMRi1jtnUQrwIgTYarQdGgESNLI6AyqLsGAZVl3+Eq7iTwiZ4VHSoA7a4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.185-beta.tgz_1485198815766_0.8835722450166941"},"directories":{}},"0.1.189":{"name":"meetup-web-components","version":"0.1.189","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","webpack-svgstore-plugin":"3.0.6"},"gitHead":"72176c38911c2f5cead71175eb0c4ffb857c0fc3","_id":"meetup-web-components@0.1.189","_shasum":"0109dcc44d2afe8217db29820b47a78a7d3a35ac","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0109dcc44d2afe8217db29820b47a78a7d3a35ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.189.tgz","integrity":"sha512-Ip+LKBS9tyMLzh5ZkN4Ivm6YUNV5rRzcm4QzK6iO3hmjiDH02Hhr3tOrlNvfFnKNoR3DEuEdOTF79ErSZDUBqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXR/Ie/mmVXCUspe89GojP+0bmUzMHw1ARDkn9XevyKwIhAPIRiwcMcPZOEoNtspIEDduCGn9Jc33KZ+Y9LtIYEcHy"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.189.tgz_1485273933878_0.6202667441684753"},"directories":{}},"0.1.190":{"name":"meetup-web-components","version":"0.1.190","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"0662f074c7dcbc3b259dccba53028a8e1e91c103","_id":"meetup-web-components@0.1.190","_shasum":"812463481933dbda45f91a4c4d750bc8f582b251","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"812463481933dbda45f91a4c4d750bc8f582b251","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.190.tgz","integrity":"sha512-xWc2DIBxceimDDH6qED7NiWz/fyqVWv8PntKK0WkmCAL/C5NHUiOaR91d2Bwa+uWB0DXrNjdu/XKhNBgBJyjHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtfE4+SNFtkR8xiNXKZ1qN3GX/S0A/yqte/S+I1SJhowIgO12FGN4qWPMS9Yk0AqYj0nPcSx6ZTzcunbNDqnqhrrg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.190.tgz_1485277892504_0.8222706699743867"},"directories":{}},"0.1.191-beta":{"name":"meetup-web-components","version":"0.1.191-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"75dd2f51e15de05da7209f5b8de0b4b5b98edaf8","_id":"meetup-web-components@0.1.191-beta","_shasum":"894e0094f9e539109e449784e3143b08364d25c3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"894e0094f9e539109e449784e3143b08364d25c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.191-beta.tgz","integrity":"sha512-mlpyd7Q9jZXZNED5ZkEk0cSD9e/lEHbCD2HlXSL8EDfMwBwUTYve6R7/ACRigNXBMpOXLiiWu0nrI6abfsxmiw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaYQcbaChAvatzIvSOelwC9IKbuXUthLX44p3QDrKKnQIgOGkFXlAlEGjbywV1NmMeAPieIjkGYJIqLz64ugzzK1o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.191-beta.tgz_1485279163085_0.2988018861506134"},"directories":{}},"0.1.192-beta":{"name":"meetup-web-components","version":"0.1.192-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"ae921b5c1de8330370450b7f8f8b385fbe43d524","_id":"meetup-web-components@0.1.192-beta","_shasum":"3436283616e6f7a1c69cf98aef1a882185b7096d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3436283616e6f7a1c69cf98aef1a882185b7096d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.192-beta.tgz","integrity":"sha512-elxy+6gSToXT4424DlGQ08b96LYUPMmuX9mco/SxtSGGN2lAHAPWEwuVz5q5gjmMoMXlJZ+X1Uci31IUAM4E5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbnnWWMy7xTPczANow9Q/OSICg7lBt9pMpdzTI1+WNAAIgA3ReFKtwFg04V5da7tDTc1gjs3tCGrUuH0vA1Mdiz8s="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.192-beta.tgz_1485279186140_0.397993634454906"},"directories":{}},"0.1.193-beta":{"name":"meetup-web-components","version":"0.1.193-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"31c3f16dd3b543107ba2878649ed93ab66f4df73","_id":"meetup-web-components@0.1.193-beta","_shasum":"e4af597370312fad105842447e64d9103e1d5ce6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e4af597370312fad105842447e64d9103e1d5ce6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.193-beta.tgz","integrity":"sha512-6kuCC+v9/lgEmJt0ZN7svf3PuCINH9vDsnEMSR+fwbz5iAZgH9jO/DJZMrOlmt3CFVY/7whA1hGL7T/yT/U/HQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1S6FmP1q1bQkCnEbrXuEzR/7fURt4xQ75OT9Ec2v6qQIhAJ6J3fFWSRQdt8+CjMk4nPMg+Iy80d+TuTii80crJWUp"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.193-beta.tgz_1485279538083_0.8778303067665547"},"directories":{}},"0.1.194-beta":{"name":"meetup-web-components","version":"0.1.194-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"0f0a6486a0754ffe337e26d220093df740c38ef6","_id":"meetup-web-components@0.1.194-beta","_shasum":"0ba7416bc285fc0ec2ce92e24d346bc94b2e02d3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0ba7416bc285fc0ec2ce92e24d346bc94b2e02d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.194-beta.tgz","integrity":"sha512-eNzlUDGFCgKsp6Hm8lvaK2gE/XrQoWR5hICFRQjV7J7m85F49qIZUcOyjlcfiHiAnD6dGPNmlGOFHAKlSaszRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZCPVyj3ox6bIHJLulJH+ExsVE0g7cTnLd6BTC5l5lpAiBoLm4amxVDsAvsUSYwf8oLNntnzoseJc1L4S1Eg9gw7w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.194-beta.tgz_1485282838270_0.688280489295721"},"directories":{}},"0.1.195":{"name":"meetup-web-components","version":"0.1.195","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"dc911698957377ae4b24923a7eca0317d5e4048d","_id":"meetup-web-components@0.1.195","_shasum":"048c5118f0a0db6d1ca7070817c41f74f87948f3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"048c5118f0a0db6d1ca7070817c41f74f87948f3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.195.tgz","integrity":"sha512-oDVcgYLYR3lIuGnICKX+zzRBB6IGvLp7AMoisWiO8YbaoJW5gQd/E4unNY+uE1q/2dWOq2Hj9sC8siKRtWVrvg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIm4oi+b7bEYBGYH6m9Dc/lseOrjXb7REzc+BtaUt7FAIgDoRyuaHbELX28Nnys/4ANBpQ8cLxSpsa5g18xvW7df4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.195.tgz_1485286917747_0.9254071416798979"},"directories":{}},"0.1.197-beta":{"name":"meetup-web-components","version":"0.1.197-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"ed15b0ed25b0c14f5ec7006c6e726727b66d1a46","_id":"meetup-web-components@0.1.197-beta","_shasum":"ff1f383a55c86c11c22afcc41123e39a37f7063b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ff1f383a55c86c11c22afcc41123e39a37f7063b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.197-beta.tgz","integrity":"sha512-Z+dOeUO1SM0V4Sj0gPuCXEMWD+J6HEn+aLxpJukNEVaWeWel+7Wnrxu0gydvdRRlDQB7rPPlB6qk484/8R0Byw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBnc/UuQRPtQtpKEXZZJu7NQYMwPXpUu5+Y9QZ7K8z7AIhAJJ9nzTrACm7q0rnwzkGiTJzaTRTMjcR+kDHNQEeu7sX"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.197-beta.tgz_1485295095568_0.7382286870852113"},"directories":{}},"0.1.198-beta":{"name":"meetup-web-components","version":"0.1.198-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"93501264dfa680b9977008a15b55c78bf69cada1","_id":"meetup-web-components@0.1.198-beta","_shasum":"fe1ab55ea82d7d9378cc86fea071f0ae6d05b2d5","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fe1ab55ea82d7d9378cc86fea071f0ae6d05b2d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.198-beta.tgz","integrity":"sha512-YNsE+f5t3ImoGwT8NPqIU3U9KaDUVWn3BBTalh0uSEl4+oq1r2cfkf/Gv4nfR5KXtPT5N4oqiGCgTAjyp0o38Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIADXTWUbjPjRZKeF+g4wjh1wOK8ectyctdTV0dpXDbGwAiEAhTNO5dYn2WE/9VtWoaqz4/4I+ctMcxnX+NWgqWl9ZIM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.198-beta.tgz_1485297569977_0.12760469736531377"},"directories":{}},"0.1.199":{"name":"meetup-web-components","version":"0.1.199","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/storybook":"2.35.3","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"e672f1de68c81c72953dd19b24c7faa59082cd9b","_id":"meetup-web-components@0.1.199","_shasum":"cbaaf5db81a9f37e45abb3945b33fc6ad15a4d04","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cbaaf5db81a9f37e45abb3945b33fc6ad15a4d04","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.199.tgz","integrity":"sha512-IRHW8tN2ptbE8IMz0+eu2OhFHKQJvQ8hmvp8d0Mob8O3JjAozRglGKcuvxQ/2f+zmeJp++QRbSF9bwLbYrAOFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVvRBWuij/iT117qUqBBrsbD7ubPh5Iz9+VkO1CuL38AiEA8eYQaJlXHAD2XPg+VexQAN4NDTD1NVzN5G/alVQUgtU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.199.tgz_1485297874818_0.7252772301435471"},"directories":{}},"0.1.200-beta":{"name":"meetup-web-components","version":"0.1.200-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"e6171d8b244408fdc17f94f6ebe16013deef946b","_id":"meetup-web-components@0.1.200-beta","_shasum":"9ec71c37ae276524357fdfc04bea34c35b408e34","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9ec71c37ae276524357fdfc04bea34c35b408e34","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.200-beta.tgz","integrity":"sha512-4j2nInI+Rq7ZqTuR1y1pt5V/6TsDZnSXhrjjw6L98Tumyiso4y2IsRbMgBwCXjqCX/WvoJ9fjC9IypglR7Fkcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFL98wu48txwDaePBwPREuKT4ixpsCVqghXWYVwN/eSTAiA7sJ0Aeg/koCzUz6ZZA6dL7qtRbkbVKQfAxtrsgnSGVg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.200-beta.tgz_1485299716687_0.43090276420116425"},"directories":{}},"0.1.201":{"name":"meetup-web-components","version":"0.1.201","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"64bf6906bdd4ff82e0e7a37e062550bf171a26da","_id":"meetup-web-components@0.1.201","_shasum":"6af6077f00a4f02fda812016154f6781c508a0ce","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6af6077f00a4f02fda812016154f6781c508a0ce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.201.tgz","integrity":"sha512-VOdSHccr+h4oZQmmydjLheKUGWctbZgAkqBqdzj0wbr/m/ZN82mNtwDOUdT4u4c1w1T0BDic064CvTH9pSN1Nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVKtl1+2/V4LCJBvs1JbC4sNzvRYIdUJMwpX2ibM4F6AiEAxUveDAXQQrn1eiy9fCrIrfyyW6qfrL5j4lRwYIQJP/s="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.201.tgz_1485302423739_0.7418139209039509"},"directories":{}},"0.1.202-beta":{"name":"meetup-web-components","version":"0.1.202-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"666cabba0a32d1a572c45d00a14776a09703e99f","_id":"meetup-web-components@0.1.202-beta","_shasum":"b9f6b48a32cfd2d29dffbdbc30109e973bf28b6e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b9f6b48a32cfd2d29dffbdbc30109e973bf28b6e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.202-beta.tgz","integrity":"sha512-wzZvB4Vi9OLINdN3vFTEqV0g29CBYJRuLkoGOr/chvKftIO684UHYkPTRDp2v4B/WhiuEaikt2fDICvv3Pg21Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAg0hFeqQ2HQ6Uzb9/0Rj3ld2J+zUIae/MMEAKKyrJBAAiEAn4n9kDma39ytTptthNDTIfay6g55eHKfuDK5lss8ryQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.202-beta.tgz_1485371389136_0.012645031791180372"},"directories":{}},"0.1.203-beta":{"name":"meetup-web-components","version":"0.1.203-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.13.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"3c7acddf3a4cd968273f5bfb60ee52b57bdf738f","_id":"meetup-web-components@0.1.203-beta","_shasum":"b78dde5ee2e071e7e5372e66fde63ce6e1cbb573","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b78dde5ee2e071e7e5372e66fde63ce6e1cbb573","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.203-beta.tgz","integrity":"sha512-XHwMFuUPKrPiQ6U93g7WzVUJZnXoDovyRJG9g0WgsWFf2AR6nSTCEKw6tCi/t4eCGVXJ2F7SUXjJa2og3tbIEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENwelm3NQzrCcoEP6QM+P+M57jjZl6OJQ4X2MVFaudoAiA1rBCKNiVxvwbGlwraNGgBh/2YddO3qmdebqhzK+a+/g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.203-beta.tgz_1485383682851_0.2166765290312469"},"directories":{}},"0.1.205":{"name":"meetup-web-components","version":"0.1.205","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"61106aa2b5bb76b6638179efdfade2ad614e967c","_id":"meetup-web-components@0.1.205","_shasum":"3b5abe717e11f1adf8f70a31925ee756917055cf","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3b5abe717e11f1adf8f70a31925ee756917055cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.205.tgz","integrity":"sha512-RlTKBLoSenYLN+V/xIpq9B0RYBX2kH5W61X/iL6/RkaiO2UtLpdb12pEK5He9vWSg88ucwqTa6iGepxHHzqJGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGErj4it4wi6Bf0/Wz61r0jcPoJBi8YeQ8tnhAEhVC5bAiEA0CPs7EIOd4V9/HSz8IoX7bc+u5CYuHPYGsLS6IB0VWA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.205.tgz_1485446245168_0.5962476981803775"},"directories":{}},"0.1.204":{"name":"meetup-web-components","version":"0.1.204","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.0","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"39b8e904c237d7974f005466c8a9362be6ed7d35","_id":"meetup-web-components@0.1.204","_shasum":"4f9666a453937fc4dd8b704e0d797955713ad919","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4f9666a453937fc4dd8b704e0d797955713ad919","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.204.tgz","integrity":"sha512-Kt1UN7hVTS/SuPCp5SnLltefBGvvunBGbFyFYZJTpfOuxm+EUnGlg8JWj0+n+VB/Uf9Pkfr+TzZOq0ak/DxeLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtZBRgk5EbnzOo2PzzG6eN6dkXLb+eILetYx1DoFO12AIgWTvXy49Qo6TUAvQSZ3ug+owjfmxq+Vim5d3Bgs2JIpI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.204.tgz_1485446247382_0.15450396831147373"},"directories":{}},"0.1.206-beta":{"name":"meetup-web-components","version":"0.1.206-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"5f61181cb65b40fa80234b50894af97626577809","_id":"meetup-web-components@0.1.206-beta","_shasum":"6bdc0b9f4bfceaa10acf784ba5da11c6a3650323","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6bdc0b9f4bfceaa10acf784ba5da11c6a3650323","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.206-beta.tgz","integrity":"sha512-idg17Q0P4pv8uSisWSSGzLEQBo94Bt0AaQZCEJMnl8ZNiVAaKEh+hkFdtzO70h+3UTLUKERxz73+DcEMoMdDiQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHvAkx0decodW0srpzoaXNMDK1b26DEJRCchJCZtCYk4AiBZxlKeo6YCS0xtwMoG9x24p4+Cy/N/4hG4ATNMOE5VVg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.206-beta.tgz_1485448514317_0.5999593625310808"},"directories":{}},"0.1.208-beta":{"name":"meetup-web-components","version":"0.1.208-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"89f0a4289ac157cdb1dffd6aba7e2be17de5511d","_id":"meetup-web-components@0.1.208-beta","_shasum":"b286b1e3c0ad65ba3dcdfc04b71509cce8f5a7f8","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b286b1e3c0ad65ba3dcdfc04b71509cce8f5a7f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.208-beta.tgz","integrity":"sha512-vYEq0oYZx4aTP8JCvS1KpogQth5VvosoS5fethFsY+F2EJZ9ffRVCu4zed4Bkkvirt6c30EDHrbI1gbOmxpV5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/n4hXfM8+euxkq9LJG9DGjBdO5bndm8blQq6TWiWUIgIgYX/kzdI42SwRx/FlFQ5j59fPnGHJVF9SKewy0CmDZWs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.208-beta.tgz_1485453944320_0.2560801294166595"},"directories":{}},"0.1.209-beta":{"name":"meetup-web-components","version":"0.1.209-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"600dd7c261c45589a1c8e500c73b4b440d67d446","_id":"meetup-web-components@0.1.209-beta","_shasum":"e1e1a4fbd8c89d604d08601bfa2cc3969889ef67","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e1e1a4fbd8c89d604d08601bfa2cc3969889ef67","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.209-beta.tgz","integrity":"sha512-Gm/APDSWNRkDxQKt6vs4pgFUN5n3nKoxp+sfRv49cSJb7XP+E7UexXoaNpGgJieKjuv5GIn7mS1OwE4WgMz3lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDA7tMaovYhozq8E/Tka4F02InCbOJhCXdAB0BZlCLMPwIgATJekZZqCay2BskfW2R94A17sr33rimYZsuJM5zXVKc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.209-beta.tgz_1485463323636_0.11447496456094086"},"directories":{}},"0.1.211-beta":{"name":"meetup-web-components","version":"0.1.211-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"94acda7f906b387bb46d49d8097977ebda6f4fa5","_id":"meetup-web-components@0.1.211-beta","_shasum":"965a33333d03b0d397ba69dbf01591a32a414745","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"965a33333d03b0d397ba69dbf01591a32a414745","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.211-beta.tgz","integrity":"sha512-SnD3qD8Q+1ukE4Eq2r8cG2uCDhb9ZmeAKFsnw27MPUVpybbdJci9Y1CaQotW/yT3PUsnR5eVWVV8L1VCpyhz2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqmPlQmkm+q4rG1YTe4P+rhcS9kGVX3UYxNYvgU2jT4AiEAh1z5BnPA6U740hTe5v/stUug55+bnsijGt08h0MSWCQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.211-beta.tgz_1485476313266_0.09769317600876093"},"directories":{}},"0.1.212-beta":{"name":"meetup-web-components","version":"0.1.212-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"134c23287708b8796f34841edf8c0c6ef37241ff","_id":"meetup-web-components@0.1.212-beta","_shasum":"4078bb08b7d01522adc3382ddc64d59a38f9f0bc","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4078bb08b7d01522adc3382ddc64d59a38f9f0bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.212-beta.tgz","integrity":"sha512-98lXKZ30tDGo2TnZkcUno8OXW/f5hvMi9Y470M8iSRb+vAqjsPe11UOcewoWKOXrAlHWsvKEjVa1U77lWRtgYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4U3oAO3ki2AZVh/Ff3EUpqK9gWV+l2zj//XWfr/XsrwIhAL4NUkdJmrV9aszjpARL8L2pvvxB+eG5Kq7B9IM0MEcF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.212-beta.tgz_1485561811064_0.3589602743741125"},"directories":{}},"0.1.214-beta":{"name":"meetup-web-components","version":"0.1.214-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.3.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"8efe511af541726c0dcdcbc4ff747addf81ebbd5","_id":"meetup-web-components@0.1.214-beta","_shasum":"566a35d8b766fb34887996d0ba29468411d4e93a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"566a35d8b766fb34887996d0ba29468411d4e93a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.214-beta.tgz","integrity":"sha512-VbNvU2uyFX9N/K6zwQxFrk7dDIAxfPv7TGyyzAG3e2iOw2Xs7fyOVqbTE7OAFKq6dj/ivEaL9MIs1De1SxHguw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFnKsh59WnrRGcBeOus1t6UGTSCmzU2rh5BLDek+QPGAiB1du2CMQFCZwrIsSgVKJJ8UuRY2RgMLOf24RYimHtzDA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.214-beta.tgz_1485814416843_0.7133200191892684"},"directories":{}},"0.1.215":{"name":"meetup-web-components","version":"0.1.215","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"1d815021f77fccbf34400140358ef60d8dda383d","_id":"meetup-web-components@0.1.215","_shasum":"d81348f793c7f69e6201ff78e0135d094f863651","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d81348f793c7f69e6201ff78e0135d094f863651","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.215.tgz","integrity":"sha512-dnFBxLCuFFM6NLXSbJOKSSllIowzHwFTyepV9erHxHzldnPPqZTO7fPC4/27MimNPTW9v674bSgMjaM3Bt54VA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGiR6zTBeHNOo6I0L7WMPj7t+hqzgeDIKl2mOosbhM4XAiEAoWnOmrK7Kk96EoPxeJ0f0u04XU4wvIDqfWLhdzAkRs0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.215.tgz_1485833586752_0.5206458994653076"},"directories":{}},"0.1.217-beta":{"name":"meetup-web-components","version":"0.1.217-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"78bea0338baf3899e2e54a3eb565dbe9041f9d86","_id":"meetup-web-components@0.1.217-beta","_shasum":"697c90aba91412089c51c04e8cfcc724220eefdc","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"697c90aba91412089c51c04e8cfcc724220eefdc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.217-beta.tgz","integrity":"sha512-5dK/Sb9s0oc8H9gIFoucMBmpQfXU1VPuMM2S5grfRPKCOPCrZKbbTJemY5y93eYB/MvtC5BL3GzhO6iJSt92Kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCGFCoGlQsMdWy4BCyl1eH+XujUKmc7EYOGG0GpQs0ggIgSUnRdtC6RZeGKiGawYNJjtLaO6HUXkXqZBtXO3Ufdu0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.217-beta.tgz_1485921630502_0.6141774575226009"},"directories":{}},"0.1.218-beta":{"name":"meetup-web-components","version":"0.1.218-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"2466e6fc099796734acf9deeb372d3d20fb2d58e","_id":"meetup-web-components@0.1.218-beta","_shasum":"01d667e6622dc084efc755009d9d59d4b888119a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"01d667e6622dc084efc755009d9d59d4b888119a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.218-beta.tgz","integrity":"sha512-D0Chw8dZp3H4WO/gp9mCOq4ic7UsKnu1Y50E2Dk2j9nuovE7BgA+BuBQFtik1fhW128l6rXYe0OfsIylOksIkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBIxW/GAahcF8KFSnC9qol+wfZer2aziuxjShBYKO7HLAiEA6Wh/yMV8/3QkfsQEiWxLs/swVjW7AvpObeOUA8DwlPk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.218-beta.tgz_1485980065193_0.7207512403838336"},"directories":{}},"0.1.219":{"name":"meetup-web-components","version":"0.1.219","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"64c9926b7ecee1e4d9d757429735247423d98bdf","_id":"meetup-web-components@0.1.219","_shasum":"b5d32b522be0297f12ee8932b7f0e7ebadabe441","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b5d32b522be0297f12ee8932b7f0e7ebadabe441","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.219.tgz","integrity":"sha512-BhZ5+a5tPlvlvmzTTNuMVx5leQ9af1+nGU7ot/WwZX3EdwztW128oIBzfwTQ30QXvQBpyRFDs8liLcri38bFFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEpBLP+m7oTKJ10kGRSxS8Mie8JDxNcsz2tTcB8W7nU9AiAsoQccd8H+gCGZNMxNqL1ur3Dx7IRn8D0yOK/xnad43g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.219.tgz_1486079691597_0.9512866160366684"},"directories":{}},"0.1.220-beta":{"name":"meetup-web-components","version":"0.1.220-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"ed411318ba771ec841aebcfabfe2fa1786342c25","_id":"meetup-web-components@0.1.220-beta","_shasum":"b58a2c6f8f467081f1f6c40132b3f32f9cc27dec","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b58a2c6f8f467081f1f6c40132b3f32f9cc27dec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.220-beta.tgz","integrity":"sha512-n9sJ3+c1zgWdZnJoZ7QJGN0CgPfSTlV3glnhOnxUFwkRNLzsQVG+JT1SxhuESbA/asQPwrgXvqu3jl1VrHkX5Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEy6Iqa9tfYTZ+WfOEjw+mfXhqTX6kYALYhQN27ffl1LAiEA0gpqnryI/WRtlbJ/S2E9La4HskmqDV9BtiMdFAfVvow="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.220-beta.tgz_1486160286287_0.6056556960102171"},"directories":{}},"0.1.221-beta":{"name":"meetup-web-components","version":"0.1.221-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"9f99da945f55552c6ccd40eb743028e109647536","_id":"meetup-web-components@0.1.221-beta","_shasum":"eda0911e789c91a6275598bd73de2a55f872221f","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eda0911e789c91a6275598bd73de2a55f872221f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.221-beta.tgz","integrity":"sha512-0BcdmDbMWZvcK4MqOCLNtu6yA61axqAkRCbxfWikxU5vT3C2ok3gQOo+QguDxYCtkxvjzHeTM1u9sqB0BBzHMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyludutbXZcZI+WTpZf18u0RtUYFXsTuVRBcYLyQ3vygIhAOi2QF3oOTGqzmUXx3Tkt7cWi9FcMGvTrGrs97CFt0XR"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.221-beta.tgz_1486327954154_0.3409964498132467"},"directories":{}},"0.1.223-beta":{"name":"meetup-web-components","version":"0.1.223-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"0f6b47c73e74b494bde461f222a4d34c262cb7c0","_id":"meetup-web-components@0.1.223-beta","_shasum":"67f6ca49049b65fcd948b29569b2c33d0291d565","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"67f6ca49049b65fcd948b29569b2c33d0291d565","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.223-beta.tgz","integrity":"sha512-3DCw9Z6Yj99+B9CVZ1Lzo0bYGpNfb2X1iRpXzt++fDS+goi5yQaqZN4d0Nx/mBFVkcYMuSw5dvUypIUfzgkZBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKen2/wFiexOIN9Ob+RTVHxSpFlhDzq9jeDo9bDyvfggIgMXCF+dhBa84yw9bcbiWryAqb41peZEL5+XQQokDbhyI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.223-beta.tgz_1486406788695_0.15217395639047027"},"directories":{}},"0.1.224-beta":{"name":"meetup-web-components","version":"0.1.224-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.4.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"c3fea999cc6bc696ad4a7462fae9e8f0213a5fd9","_id":"meetup-web-components@0.1.224-beta","_shasum":"0511c2999047be88ec2222ad0cc6c987a3b81745","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0511c2999047be88ec2222ad0cc6c987a3b81745","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.224-beta.tgz","integrity":"sha512-ui0Q5fGeF6jXNwBrzXRcazJDJxJKbBfSNeSVWOlire7Il85ZVw7QBODYIx0+DPY7mpe49I2YNer3Ql9YDBzZJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrYiFFZipRiaWSY5qXPA/kbzwXVI8xF51o6Mo1MwRPTQIhANRy95rbiq8d0zr1gsV0b6DHJbeDaPEb/qnV2FRC3419"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.224-beta.tgz_1486407150808_0.4240390402264893"},"directories":{}},"0.1.226":{"name":"meetup-web-components","version":"0.1.226","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.14.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"aaa9e323024dc8398d2b7bc8a807bb304bb348cd","_id":"meetup-web-components@0.1.226","_shasum":"3cc6225bed63d6024a27727ebb0a36de73c4d690","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3cc6225bed63d6024a27727ebb0a36de73c4d690","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.226.tgz","integrity":"sha512-7c1E+jPqhTvE5GOMQ0rk6fymBZwuZw7swCKCIEZJPKi6RgnbtROSbpVyj/IcokGIhkX0IHh+oGPiYMAqnjQBtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5yWoFVhS5ldZbd4cVrHkGZ9yssZ/yO509q80OaSRLzAiBB24qDNf432WVXAmUnidEMmaDoO9PMKw1+6wBwnzhYDQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.226.tgz_1486413416047_0.9839733531698585"},"directories":{}},"0.1.230":{"name":"meetup-web-components","version":"0.1.230","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"f8d63cb6fe0149e6bf4c35198da8fe7efb821f2b","_id":"meetup-web-components@0.1.230","_shasum":"0d395d3150e43f23a12b85e861ea136b0da37925","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0d395d3150e43f23a12b85e861ea136b0da37925","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.230.tgz","integrity":"sha512-vaHRe5UWQudRCFAn0jwfv8DTgTgvh0eTfR3Ax/ORaZ4GjS56rxQ/qJlpYetJvuP1NMZFuiujBrhgtAoLVrBFSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWiuEvANYHtCvuZOdHOaQL0rEJ7OdtLohm1LyoHGnyCwIhAJhpfKDZeMLNYSo8EaVnr3pnRZVY2rwBmgqtwNSq/Z+6"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.230.tgz_1486413611617_0.18656021379865706"},"directories":{}},"0.1.228":{"name":"meetup-web-components","version":"0.1.228","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.15","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"1dbea1df0657ce1c720d29f43ad2226c7a430fca","_id":"meetup-web-components@0.1.228","_shasum":"2f69466a0a20dcbd2fa2ef7c242738e0fe25fd5f","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2f69466a0a20dcbd2fa2ef7c242738e0fe25fd5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.228.tgz","integrity":"sha512-18DIk9iGcwSrA1Jlm0GQlupqmUZWTWUCWpGvoNyrck7/J+1B0e4SeyRctF1V6GiStOdMJavlgeTkI5qX8k+CDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICsqFkI4/bRdEPL5iqe7GE2ftEn7CzBFlbYShKq66vYfAiAS4ZKBF/FoLkaRoit6f/CMIF9vn02GcorZmlWaNKI7MQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.228.tgz_1486413853475_0.3411509986035526"},"directories":{}},"0.1.231-beta":{"name":"meetup-web-components","version":"0.1.231-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"8097508b0ddfaec366e01233be2b6fb8e23ca940","_id":"meetup-web-components@0.1.231-beta","_shasum":"9462d51cb7722bf71babf22cfd5a52ecf5dd8f2f","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9462d51cb7722bf71babf22cfd5a52ecf5dd8f2f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.231-beta.tgz","integrity":"sha512-qDxvQroI2PzZ4ZbD2RBrVQoVzE/HxHBbczIx2LAbhuIzAHIYLgVjZpcLLDWxGiStn2o3Bjd2Li2SLd5xBus6+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbn5hL+xuomxga8F3R0H3PXV1BMGMLiDzbYvtLT25xowIgIk3XbSpkZ3hhZm2lCzo7kvo9J1R1UKgC7cfL0zrlVPk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.231-beta.tgz_1486431561276_0.08646829077042639"},"directories":{}},"0.1.232-beta":{"name":"meetup-web-components","version":"0.1.232-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"9cdacc57b35cd7080c4a5d45287da383ce187305","_id":"meetup-web-components@0.1.232-beta","_shasum":"b93d8bb0802ab4ffcf3edf5acca2a180f18c41b0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b93d8bb0802ab4ffcf3edf5acca2a180f18c41b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.232-beta.tgz","integrity":"sha512-dK6TzdP8rHiLSw1HkXP2iNz4Qtf7EELj0kIZRURb/YXzhw5WPj7hZojJF7D2iAf9Ty5/PbN4+jer1M6mHerhmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFgh77IDq9avOV/IuXADLcwZSsPW7AtLvL16e1+wUFMAIhAJZ8CuxWe/wLCzGx5jzY/0iYMpsTyJtjk2vSE6DAqtFv"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.232-beta.tgz_1486568546895_0.227839644998312"},"directories":{}},"0.1.233-beta":{"name":"meetup-web-components","version":"0.1.233-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"975eb923c13c392503a3a4344c75c11adb1d7c58","_id":"meetup-web-components@0.1.233-beta","_shasum":"2df418f5e64ffe84eda5236c7ca43d9fc0f3b7a1","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2df418f5e64ffe84eda5236c7ca43d9fc0f3b7a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.233-beta.tgz","integrity":"sha512-h6VW8PhQY7IYk/8nPqQOLcLX66qKCKfsfweHB6kWMR8OiEk4UFsSMJ/oeCQ+fyn4x+D87VifMIqJ80S2ZI0aHA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEXzEwmvYCfpTJgFgyPbCxirkAFEawbOQSWB48i8jw14AiB4EoI7ndc9eMwZ5eYYkP50NfyHrnHtLWjUbVQnv9fWqg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.233-beta.tgz_1486594500637_0.8050966106820852"},"directories":{}},"0.1.234-beta":{"name":"meetup-web-components","version":"0.1.234-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"787d4e407b1de2e4b0cc910dc0f4bdfd35269277","_id":"meetup-web-components@0.1.234-beta","_shasum":"83a9605c1faa11cd41dcd7b6549de2c17af64c3c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"83a9605c1faa11cd41dcd7b6549de2c17af64c3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.234-beta.tgz","integrity":"sha512-o0g2P5FGAQJ5uA6OO6/7ET3OIFY89awLkeB8oYpGPNBoP4bfm8X2PCwrSnLIXxfXFBgXS9yZMTyeMtJ3nLb5tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTl3wWc8DxgkiZYnK4BQJ81gNcgwebLcftvK/71U1FHwIhAJDZP40z5OnoKWy0joO/bSv9e1ddmELVhPTz8f7x2ZXC"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.234-beta.tgz_1486594627073_0.5031458446756005"},"directories":{}},"0.1.235-beta":{"name":"meetup-web-components","version":"0.1.235-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"bb7bddce6568d778d2d83c191c43c3f7caa79ff0","_id":"meetup-web-components@0.1.235-beta","_shasum":"20787c529c175777129b1cdf10fa45463bc62456","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"20787c529c175777129b1cdf10fa45463bc62456","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.235-beta.tgz","integrity":"sha512-FokLqwJylgJY5kXuWyV17fRNIracdX5rMw4EMWXEQarTfsgIton7mxAhlQ60dWs6MMGm83K3AhDKUgwya9SYrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIECKhqg5HQswb52gVBJsczc/U/gZhQV+7LAV1r/QPD8/AiALoECls9DjixtF7jnwkeXyawZI+HE87dbfdF0n2fUpeQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.235-beta.tgz_1486660195850_0.9537454429082572"},"directories":{}},"0.1.237-beta":{"name":"meetup-web-components","version":"0.1.237-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"87e7bbd1043dc663aa6fff486db9be2cd3f3bcd7","_id":"meetup-web-components@0.1.237-beta","_shasum":"a2c0a5c8b642554f8e1353980303ff9662ee1a0d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a2c0a5c8b642554f8e1353980303ff9662ee1a0d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.237-beta.tgz","integrity":"sha512-70GoVhZW1uSRNCJbrqSUcFo8RhpLuFuCM5Z0fT2zTKcAxd5WBuO+Xp6gW0ggdU22WHTgkb3eWmzPMDAm8Vp3TQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp82o+xImJxR4ho2w1GQTEb7Sz1JkDBSWOWHLFvo8aTQIhAJ70Na2J1TifGYxgSR91ahgYVBHufSXrMST9V+QeBq58"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.237-beta.tgz_1486662798118_0.8938409208785743"},"directories":{}},"0.1.238-beta":{"name":"meetup-web-components","version":"0.1.238-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"cb2b7f23f986348efb99f9fd208c6a9b597d0d52","_id":"meetup-web-components@0.1.238-beta","_shasum":"d4edaf0360e26beaf54078fc1dc8753fcfc4ed09","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d4edaf0360e26beaf54078fc1dc8753fcfc4ed09","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.238-beta.tgz","integrity":"sha512-DZNmI1P+tdJ8apf9FrKvJrsupncPuVYVl+WzS8ysfMqxWxwWGV1WBhfZkaKJBpH895saBP6aC4CBf/8C0PD8aQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBVBw/XB/BiI/9ZkwEq+VyLiL+hWwB2ORJI6EhJUn7OUAiA/Kqyyymu9DS8Bnbnf2CW+5LRI7D96UBXFhCpjpn4z/g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.238-beta.tgz_1486666240195_0.23622783203609288"},"directories":{}},"0.1.239-beta":{"name":"meetup-web-components","version":"0.1.239-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"0ab93f75f05cc3de9264c4894b8e9c1a20fad8d3","_id":"meetup-web-components@0.1.239-beta","_shasum":"d400d90058ec4a32b1bafb032e38ed19237b4784","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d400d90058ec4a32b1bafb032e38ed19237b4784","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.239-beta.tgz","integrity":"sha512-qpcBWVSKXMDqvkhi/V8ZrnPGRVDhOB8vv1xloQ6RaG9UdmIQRbxkiP4O9I3lC8vyvbcFLhsiJ4gOmeearGX0uQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBqOa02gLu+RoVLkonULPC4IaekiXtg2V7PJBqGF7tfyAiAcSQh40Q0Q2aK0AmUhgmnMuI8HYkgKkca5q+CCoLdxAA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.239-beta.tgz_1486670154903_0.17455580504611135"},"directories":{}},"0.1.241-beta":{"name":"meetup-web-components","version":"0.1.241-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"55b5d933dabdce1d7b3df5625d694469034b9d42","_id":"meetup-web-components@0.1.241-beta","_shasum":"02a4a3e744254ee775212b4419b0fa457da4e147","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"02a4a3e744254ee775212b4419b0fa457da4e147","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.241-beta.tgz","integrity":"sha512-l3N3Avgg65MZwIRLPdg57SjlQqpkiZ1s7noiZEGlVNsMzv7NPuczh+HDq5qLrkUVwW6xlzRtdrx7ALTH5bzuLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuuHj0mMsCPgRQll8hAz0TH4z60Tl94VUWSwO5RY6GIQIgBb5EX6uU4NYvrgTJu6LKLfQnZJAQnD4+MoE0HBO4Gks="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.241-beta.tgz_1486674339497_0.15371536486782134"},"directories":{}},"0.1.242-beta":{"name":"meetup-web-components","version":"0.1.242-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"5598b7ceb6b2610c1075adf71d10abfb9553405f","_id":"meetup-web-components@0.1.242-beta","_shasum":"74c436093924333ee01b8795291178673c2df950","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"74c436093924333ee01b8795291178673c2df950","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.242-beta.tgz","integrity":"sha512-TRdoQEA34ovEionRVEytVYNsNOFvtEfSRgzPMsIPmlSfDycthnu6FP/nxLjVfFNfg0ZOOklm6SJud/7man81Dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+qIBC1yBkQSbLxIvVcvl0jQH882W7O+VN2Pk3qWF0QAiB1rhmUV0+rHsN79PcqNLDRahx65aQC48SY6nrgajiyKA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.242-beta.tgz_1486679555569_0.59048508759588"},"directories":{}},"0.1.243-beta":{"name":"meetup-web-components","version":"0.1.243-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"627ee704129b12b6d69d815099bb6fd5bb7abc8c","_id":"meetup-web-components@0.1.243-beta","_shasum":"3168b45e4ce26009e28f7fa9c6c6dea46154bf68","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3168b45e4ce26009e28f7fa9c6c6dea46154bf68","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.243-beta.tgz","integrity":"sha512-kJh4ftS7lhfkDg/4zqcObwBWCcX/kiyu92l0ElLR6XvNft4E0Ipfwk4ZCvURkdEYJh2q73/1viKOE+Yolqr/OA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2dKlrvlphdTUxwDAFOFLt86dRkgxC6P3LYOdynaDvugIhAO1gbxlQhjLSpwKz/8t5BQNue7g/xxgIiAZBNSambr+F"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.243-beta.tgz_1486748785215_0.8751071570441127"},"directories":{}},"0.1.244-beta":{"name":"meetup-web-components","version":"0.1.244-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0"},"gitHead":"ba543ea7e0cecade217a07c7025be6d095fb83e7","_id":"meetup-web-components@0.1.244-beta","_shasum":"83d3e5d204151a4df0f111283ff9f92d2bf1b0da","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"83d3e5d204151a4df0f111283ff9f92d2bf1b0da","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.244-beta.tgz","integrity":"sha512-dilyO8HMaFyDEkHvY0L3/tAvodXwpenq/FfHtfcIGjWhzTu4iHAOa/DHG20ez2jm2A/mhWQrzj7fRFBUI7xBGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHILRXo9SAQEGsekDrp3EaBMEmMgyuhy2YIfjrg1G0BSAiEA5MrE40z4S15nBu19hJF2MP07n+wEy77h9je9YmIKKB8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.244-beta.tgz_1486761709797_0.5129067648667842"},"directories":{}},"0.1.245":{"name":"meetup-web-components","version":"0.1.245","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"a5d0999929c24952b64e10ead57246d5dde850a8","_id":"meetup-web-components@0.1.245","_shasum":"acd00e7bad1f54dc02fe40c294b1b345a86bc23a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"acd00e7bad1f54dc02fe40c294b1b345a86bc23a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.245.tgz","integrity":"sha512-nnkQdAzNyzFv4wTyuMolEU9WwyncXaTITzRMMdvAAQl/DKdF4ZqZ/nAA9sa681XiS5AQPMzmFAWuuqL+l9vpgw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwoHDq+FcnPHeb6mCmy/1JX06EHcBlOEd1NyxBVHbl+gIgftzpUh+9HKrNM169AE6rzTO7zmyQHtExpNCAmTBAElc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.245.tgz_1486770564960_0.6365700992755592"},"directories":{}},"0.1.246-beta":{"name":"meetup-web-components","version":"0.1.246-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"77ab96e1a02814e86ef7f7cb2cae8aebe9de789d","_id":"meetup-web-components@0.1.246-beta","_shasum":"b6a6f6843b3fdd2a419443cad0a04ff860674f6a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b6a6f6843b3fdd2a419443cad0a04ff860674f6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.246-beta.tgz","integrity":"sha512-5aoNBi1Dx6F6IpbtjwmfF2E+erJIVS3UciAtJXoMCm3SFAPw7ITCNcpp6FpDB/ZiCAK18i30vbJV2ZuGPdA+Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0AL3ejf7TvrSURAO7N9qNqWg8S6R2MqEpvufu5djvzAiAbeS93A6/jydbbCgAdXTPGBYKMfngpnVU04qQ3qFB4Lg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.246-beta.tgz_1486771145258_0.23030391917563975"},"directories":{}},"0.1.247":{"name":"meetup-web-components","version":"0.1.247","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"486c9e8a9fb8afe0e13b992d1d9964a8cb70260b","_id":"meetup-web-components@0.1.247","_shasum":"e1777e4830a4fdd86f57ac3df0f70f70eaea65dd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e1777e4830a4fdd86f57ac3df0f70f70eaea65dd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.247.tgz","integrity":"sha512-hdcbo2ya7uODAv5lB3OkPp2h9ZYnHkqNFZ67l5W3ccHUWZvoE5SPNOiVVvwUuQIvgopKLvMvHkGIJrVmip3/RA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNqbj5vAM/nQTFb/m22aDh5H0d49v+phk95CXPE+p6xQIhAPo0nAz2QAYM7vCpcsDIJvkHhRMQJm64wKVLczguUCU/"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.247.tgz_1486910352174_0.8788811983540654"},"directories":{}},"0.1.248-beta":{"name":"meetup-web-components","version":"0.1.248-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f29817872bbb6d6016af764afeabafb0e1128a5c","_id":"meetup-web-components@0.1.248-beta","_shasum":"94c8f20375e4bf77c96454566d837266875b48a2","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"94c8f20375e4bf77c96454566d837266875b48a2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.248-beta.tgz","integrity":"sha512-ZXAlMlusc+ygrppxr5l7a84crgZw2ebwrTTB/lBAgOQfC/fqOwQAqUhRwh15N24CKIB9opd1xCJXcLonQefphQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaeCWb3381gkjplaWXoLPZqDOz9SXXQRGJySeITBTVngIgUGWbJY+ov8rIgW8G29RWCLNkic65ax/LBCPc8sY4W3A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.248-beta.tgz_1486999283931_0.700962251285091"},"directories":{}},"0.1.249-beta":{"name":"meetup-web-components","version":"0.1.249-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.51","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"4.1.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"5d1a261d7543ae2af32aec0bb20a96e1800d9dac","_id":"meetup-web-components@0.1.249-beta","_shasum":"7d614d2a8880c98ec7c64de150bf4468ddb63e68","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7d614d2a8880c98ec7c64de150bf4468ddb63e68","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.249-beta.tgz","integrity":"sha512-f/iCDd5WsdVh4nCfTso7ktwu3uwuTnr7iIZlcW4SbAmoVCxOP8Hq9tlxkuwC8LKS2/IhspxN6AwlH1B1PZpk7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZaKbzAbuF6iOb4M+5HHVKuSJqJZ6zYNrBNft3hXX6KAiBiYflSANi0MriF2kXfTPhNMTj3D4DCbXwwvQhXv7nEcw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.249-beta.tgz_1486999544298_0.09125360241159797"},"directories":{}},"0.1.251":{"name":"meetup-web-components","version":"0.1.251","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f51250e93e99873cf253125ffe4190e91a584fbf","_id":"meetup-web-components@0.1.251","_shasum":"0d28d4336a2e5c8ba32b44d66db178b3246b395e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0d28d4336a2e5c8ba32b44d66db178b3246b395e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.251.tgz","integrity":"sha512-oLlNlrfTIOsOKgzQVtE/w1+bpl8XuR+kWfvcgIHWS0V9s9jnz0vUifBduLlCpiXOXcisPsfW5yG7HiaMjdIS9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKRxSz8QAqWX2sN0zizG1fy5afRCBcRtJmOmflFDNSrwIgSO+CKViaPObFm0ky4cyc+x9myRNRncstX3fE1Xp6LMI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.251.tgz_1487008877446_0.4462970437016338"},"directories":{}},"0.1.252-beta":{"name":"meetup-web-components","version":"0.1.252-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f34474d6f10bdcfcd38ff0e2a4122ac47dcb3db4","_id":"meetup-web-components@0.1.252-beta","_shasum":"1550cd22a5b3ad8ce3a2ffd8d96a647518cd0f59","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1550cd22a5b3ad8ce3a2ffd8d96a647518cd0f59","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.252-beta.tgz","integrity":"sha512-wVU7SOmqYDh6yToDHf/JXtX7VL91lHzGKwRsQDh6yO5fJRWOoR12THmtkTB3RDN8bmvlpad6Zud2vwhB7EajNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5r5xeJG07LMrcQnHylytjJgDC5+kNcroYJxpjpXny9QIhAJefCWHOcu/Se84y+7FjGOblKSTsWkq2Ld/uR9Bt32vu"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.252-beta.tgz_1487015135717_0.405907028587535"},"directories":{}},"0.1.254-beta":{"name":"meetup-web-components","version":"0.1.254-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"2847236981d79a4c109b60ff894ad7588bce9f3a","_id":"meetup-web-components@0.1.254-beta","_shasum":"354deac7bf093a42a0a9d98eb40b70ad96577912","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"354deac7bf093a42a0a9d98eb40b70ad96577912","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.254-beta.tgz","integrity":"sha512-GGfi/iW42s8ERr7Nhc0hoxAnNkKMJTc5eWb1Jgj5p7X+5SWyug9KqShrIzcqt4hgsxL30FZvwx+gGcz82ghYaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHXh1PrbnE4eLd6ED/pJEFTpIoZJSZyF+LHId9FupOdAiEAv/80BairRaQKs7FejneXJcqpBhl6KEJYehBuwrrnjcE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.254-beta.tgz_1487033777158_0.3300920492038131"},"directories":{}},"0.1.255-beta":{"name":"meetup-web-components","version":"0.1.255-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"0866ed0a3d35086949aa836c7c126b6d20a2c39e","_id":"meetup-web-components@0.1.255-beta","_shasum":"150cf3040f79140945cad9622ff44aed96de5578","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"150cf3040f79140945cad9622ff44aed96de5578","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.255-beta.tgz","integrity":"sha512-s1nYevNJaVK5iqoiMcK++qKMcOlVvFxutPBOxoIe3u3qyfEFC94GCmdL0p/fIPdh3LH5JTk/avpOxTBn8W2oYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDuw5Yf7ve5C6GiWcjeMKle1CMo8YLyR6Ls0PfD3V6vuAiAHNzt6BY5bWf2/hdrH5AUGv8kUZhMMc42/Wsj9wbTfWg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.255-beta.tgz_1487036361468_0.7539339060895145"},"directories":{}},"0.1.256-beta":{"name":"meetup-web-components","version":"0.1.256-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8ae495dc748fbced5b2c1cd34f05f2b068d98790","_id":"meetup-web-components@0.1.256-beta","_shasum":"a1efe4d0f69b8ec22e1282ba4228a6ac28562412","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a1efe4d0f69b8ec22e1282ba4228a6ac28562412","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.256-beta.tgz","integrity":"sha512-/rCRo0zXGmLEduKUMhpKT1YEB22Gm90lTb903DHx+FkazeBhMVOIbpXST84tE2HWJAwYnLUT4Unc56ddIhUQLw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZqvWOdGadgMWyWIe/11e7L40Ed784vjr20NnYVt0+2AiAD3LvBPG9G2vlV0ZXy8JNHSMnyj+PI/feHgspJSfuFWg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.256-beta.tgz_1487039461936_0.0598440405447036"},"directories":{}},"0.1.258-beta":{"name":"meetup-web-components","version":"0.1.258-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"c5647d145e0a1c4fc724b84e61633b6687df7579","_id":"meetup-web-components@0.1.258-beta","_shasum":"df95f2909932971c673614cec04e6aa93b9ed5f0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"df95f2909932971c673614cec04e6aa93b9ed5f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.258-beta.tgz","integrity":"sha512-l4NLYOYg8MJd4JCB7aUbilqNzQV/v5GGcJyNRccjPTfHrWdhyqM5elCkn5iupAkEuBmzmxit/2cKdSSjXm0d5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRqGn2rUngE4dfP0z7sBSLKLrmZVMaobXIlsw+jmjrxwIgcdpjTMx/ga6ZEgD4Lj8Q7ex0cz1NlJ4NQ/3TmyTZwOg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.258-beta.tgz_1487064405182_0.4720490979962051"},"directories":{}},"0.1.259-beta":{"name":"meetup-web-components","version":"0.1.259-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"4def859ff6040f1d2410e8e27e3f4651918f093c","_id":"meetup-web-components@0.1.259-beta","_shasum":"67929944b6eddf8704a26341d0a89155282c4e2c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"67929944b6eddf8704a26341d0a89155282c4e2c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.259-beta.tgz","integrity":"sha512-iIOdsT3B/Z9jU6rFINovj8aD4GX57dZ+2ld4nQvHZAXFsaHYUoJuL/a3xFQ/AEuTMRzZM5+qzCjbf9nccJgYrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiFj2V6MW2ZQt4P1HHy4zlUKy8mNYzLVSfNwdD6NvSNAIga2E4Kygo8A8GBklmgKwrNbLNK0Nh2b2vnB8HF/ZdLSg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.259-beta.tgz_1487094214803_0.36273406399413943"},"directories":{}},"0.1.261-beta":{"name":"meetup-web-components","version":"0.1.261-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f3f9b79d393bcc6e39e63af828732ac7a7f62442","_id":"meetup-web-components@0.1.261-beta","_shasum":"111ab6e5c661d9a91e96d6fdc5e8675e89ab3027","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"111ab6e5c661d9a91e96d6fdc5e8675e89ab3027","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.261-beta.tgz","integrity":"sha512-c/j4e/Al5e65QL/w8DarziMf1rn11vCUfnO0EKoTIyqNvHwSybccBnUBgFzoA599rjlWRMGNn1DF8OTp90oB7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDV2DDmB2i6Do9SLSt9BLiaciKBTYXoMFFqHKsMXVJ6AiAYMfZLO9HZURjr/BQCWmpq159ntIM/f4B4G5voTeH3xQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.261-beta.tgz_1487095561256_0.9773088255897164"},"directories":{}},"0.1.262-beta":{"name":"meetup-web-components","version":"0.1.262-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"5042dd61d961c0aa032cb13ae4da4cfe6afde0d3","_id":"meetup-web-components@0.1.262-beta","_shasum":"582e1ea5a4a491fb2541bc6cb3b38892d3bcfe49","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"582e1ea5a4a491fb2541bc6cb3b38892d3bcfe49","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.262-beta.tgz","integrity":"sha512-irc64ccdYssceXQEsJm5M4Zq3RmQKdIF16l3R9JHB7m6hYKBcZH9wbwxn7EHsWHsc4msVmcbB+vsJxAOU8Kbag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH8fp7gfkZcdxKCsRIG0S7qw1dVnRAZmGFj1WYTfOVtAIhAIOZW1DIIUZuTiNi6dcB+zMKL+KKh5/LsEjW0gY60qO4"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.262-beta.tgz_1487097204802_0.1420814914163202"},"directories":{}},"0.1.263-beta":{"name":"meetup-web-components","version":"0.1.263-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"6d51f65ee8237721af95d57605f7d5df5b4cadc3","_id":"meetup-web-components@0.1.263-beta","_shasum":"1a7031985a67eac898bbf3dddd6008e2752f5543","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1a7031985a67eac898bbf3dddd6008e2752f5543","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.263-beta.tgz","integrity":"sha512-6wtNeTSkWYF/ypsTtzo+5NI+haHkPgJKUNCJxCmRlDfspR48ftTmORIyeQw2HnuU7GPO9pPsqNujApNVR5phbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHnlyAwo18BLB/zNaqSAmkFM0UWf7BE5WkDEKnZs8xXAiEAjumG8pKibg1aUYN+N8vkgF+MmCeqXLUnd4GLxol69Rs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.263-beta.tgz_1487097425621_0.5169788994826376"},"directories":{}},"0.1.264-beta":{"name":"meetup-web-components","version":"0.1.264-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"95ee2d2e6127db8d2304277156f60d0d5178ed28","_id":"meetup-web-components@0.1.264-beta","_shasum":"51129191619d5e40e01d506656e3a493d1e95bd1","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"51129191619d5e40e01d506656e3a493d1e95bd1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.264-beta.tgz","integrity":"sha512-c2wtNHeYxPdzrBkNnzuwrGmHceXXwKtWuep3pJRO3fY3z50hEV1Xi/yuEJmzCzeo7m1b8WwnfHyr76c/enBLBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd7ltzpnOC0Pd5V1n1k6jg1aQ0WJMNHf1seBiPzRHiAQIgOdGHS/6KnxlN2tEXiBRbF2YQK/wrPW6CVKn9PFEV4/Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.264-beta.tgz_1487099657981_0.6565846565645188"},"directories":{}},"0.1.265-beta":{"name":"meetup-web-components","version":"0.1.265-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f1052629d9dd0f30dc139848ca7656a8d4e21e12","_id":"meetup-web-components@0.1.265-beta","_shasum":"fd061c826338679897293c05c921919b0ecd9f26","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fd061c826338679897293c05c921919b0ecd9f26","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.265-beta.tgz","integrity":"sha512-79ZIqztoFhiVcMRgyAmqGccx+77cYqBOqPKDSJ1/rSk6jG3lOMlwluFMlvnqbJSQ1cOY5epAiQVgvi3BAc/Tuw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKUl9RIv+vQ7p8hNNNXiLYjgYwGv/uj2paCNCO6BqILAiEAtOuI3qcPMK0F5rHpDY/guQeVtbX3BCc4Pas77F2udz8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.265-beta.tgz_1487099769425_0.8081072254572064"},"directories":{}},"0.1.266-beta":{"name":"meetup-web-components","version":"0.1.266-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"3866ce19d494c6041216ee37332835b14769a65a","_id":"meetup-web-components@0.1.266-beta","_shasum":"0eb5c51e254511fc256637e6088e869c1bcb76fd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0eb5c51e254511fc256637e6088e869c1bcb76fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.266-beta.tgz","integrity":"sha512-GySde+0tMoOyM5mUiylPiyGRf31uatSnLEXsreTQK6RkdzjXfFZdHc3zCW597vV8iCUD4NOwlJTbL/Pd2bKlSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzYbJPXCAVhnofTtrwKc7mjPluE+NpBN87Rbq5qzTymAIgOCsHL1vC8G252i4E5J2l7bFDSZ+KUSQgJulMqEnIgws="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.266-beta.tgz_1487105817120_0.881354384822771"},"directories":{}},"0.1.267-beta":{"name":"meetup-web-components","version":"0.1.267-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"b2a08a95ac9b7645a4e725f6bae723391e4bd063","_id":"meetup-web-components@0.1.267-beta","_shasum":"cd1fc32bf1b7df36d3f482cecf54b25d74bc9eb7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cd1fc32bf1b7df36d3f482cecf54b25d74bc9eb7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.267-beta.tgz","integrity":"sha512-uyVxR/0C/cKZf84hyH61o7McrXbsQ2TAtOlRReEixhERAC7VcCmLcomGHBBbljyxpW33spAhHXzr50iyYgpnow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAeCVZHogCwlX0kyrHSmmcqGKAGFgsZxXo3ad6yd0ZCHAiEA7P3Zxk+e5dewFJ+lkxUNHKQpeqjpjjRRIGaomSGKNeQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.267-beta.tgz_1487106332902_0.0281362512614578"},"directories":{}},"0.1.268-beta":{"name":"meetup-web-components","version":"0.1.268-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"npm run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"npm run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","prepublish":"npm run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"91d78419b572af080a2f502cd60cc8c249f3a8c4","_id":"meetup-web-components@0.1.268-beta","_shasum":"bbe98bbc8b47f40715349e75010eac4033588431","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bbe98bbc8b47f40715349e75010eac4033588431","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.268-beta.tgz","integrity":"sha512-seatJYk2vu9DxmBw6/YBYRfk7Qvft4nnZ9hjbYmpJ5xhQoiKumjrJ1B4bPcONxchJOX0kjFOzkg0Mea1nNb+Uw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXnJZS7g6LoSBU5V4E8BhP92VzpyOj/GQsjgzakK99GwIhANqN5lnMkmptAJ4MBUWTejANmglMT4fHr+G25OIUDb/W"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.268-beta.tgz_1487107860480_0.08656953368335962"},"directories":{}},"0.1.269":{"name":"meetup-web-components","version":"0.1.269","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"19754eb3e818244203ebd3faec27e0fdba8268c9","_id":"meetup-web-components@0.1.269","_shasum":"d6ab0f88efede9e4e502254d44d97536479b4638","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d6ab0f88efede9e4e502254d44d97536479b4638","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.269.tgz","integrity":"sha512-wxPM4mfa8Z2wuh9kQ3PNgmgRj4bJ2wyvWVtIDfy/ettOAR1v8IqaTc9DGYHKpa2JX9tk3pqGmeTtTtPTRw5Rqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmaNBM8W8YtyF13C2QUT4MA6r0rD4aEFv3+XB6rHQTlgIgIpgxaoNdzrwEafra9bDnLSZw2hTjp830mkeQTVlxetk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.269.tgz_1487171973661_0.8639700347557664"},"directories":{}},"0.1.270-beta":{"name":"meetup-web-components","version":"0.1.270-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"a141f6625e20588b9fa824321c182e331c7245ee","_id":"meetup-web-components@0.1.270-beta","_shasum":"7e6a8502ef326c4f070aa05b9b75cc7decc2af4d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7e6a8502ef326c4f070aa05b9b75cc7decc2af4d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.270-beta.tgz","integrity":"sha512-mZZaXLc4eljKesa8AEdbnRwe1NJFzpQmB+r60J84a3hbtJnWvxuvF/wVGgQzLjPRgP0+vr+CSfKyvx7GV5cVwQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIET7uxEQtlxf7Hz4GVXKbtUNM2ACS8Sb/qlcRirUCdm+AiEA7huOc/Zf3VtNoaAPtS4Z9rPBIvnUh//sNs+GC0bO6jw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.270-beta.tgz_1487188993324_0.95527776889503"},"directories":{}},"0.1.271":{"name":"meetup-web-components","version":"0.1.271","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"7c1b457093ed4d860fd175e992cd1627924ea3ed","_id":"meetup-web-components@0.1.271","_shasum":"6faff1cd415ca50a67e8fbaad67f6d7fef9ca7e6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6faff1cd415ca50a67e8fbaad67f6d7fef9ca7e6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.271.tgz","integrity":"sha512-uvmcE00UhRu3TRKHY+B5Z2TqULkzGQvQP4huO/WaH6vvhzFM4a1J9GdNs2LzdWvfOVKmtYOMsVNcBY4xi3w3ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGfh0fNiDgN1PvTeBBOXT34JCodtsqE5Xi58aFWxrP1gIgOWtZEUht61qvdfIpQqsRiOa4l1v0MwwDyaKSI8vDbY8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.271.tgz_1487189428550_0.5693514351733029"},"directories":{}},"0.1.272-beta":{"name":"meetup-web-components","version":"0.1.272-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"c15627f12b10ac06ea7b443661eb2ebbb066133f","_id":"meetup-web-components@0.1.272-beta","_shasum":"9421c83f3bf3acd7d844b92c4fcb051bcfbc95b0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9421c83f3bf3acd7d844b92c4fcb051bcfbc95b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.272-beta.tgz","integrity":"sha512-IbyAYqxfvL1QMCM2rQEGVRAL0Cs2Z608Y/qevuLIZdMr0CWEaylo/VXgX92+4G4DIXV3b2khD7XlCAruuNkOfA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtbRvn1YIRT0tfow9kmIB8Bf7p9Yu1DOUar9pEEwUCJQIhAIn+asNYoIZst3npmBnnWj9tOrIvE/X9nlh8w1ZqxmkL"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.272-beta.tgz_1487199883557_0.48377203033305705"},"directories":{}},"0.1.273":{"name":"meetup-web-components","version":"0.1.273","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"6e58f240445c8caefc5f67b41abb66ace8ecd9fb","_id":"meetup-web-components@0.1.273","_shasum":"7ede6296dbe49e7538060fb457739a9b9eeeb6c3","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7ede6296dbe49e7538060fb457739a9b9eeeb6c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.273.tgz","integrity":"sha512-F6T/uHsijY5PwYVJtxUhXI+42z3N+a2eNTL01SEKFliXAKmaiPjG+ztZ6ugRi3psd0Fy3KkKI2CC7Ji9I+tF9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHoIOEudgH1pTC9iM1dMiZcchYlggv/LlN7EI+g8qB2VAiBtLFj0ZG5Y7T6Ym2V/9ENEETpks8QDgdGj8pwAd3piNg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.273.tgz_1487200228011_0.29769394057802856"},"directories":{}},"0.1.274-beta":{"name":"meetup-web-components","version":"0.1.274-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"66d238709ffb75541d504535caf3931159a1ca4a","_id":"meetup-web-components@0.1.274-beta","_shasum":"b246ad65f49d5a7170806f3fc675627a4f2b4192","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b246ad65f49d5a7170806f3fc675627a4f2b4192","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.274-beta.tgz","integrity":"sha512-cQ9omU2a9DA8laOgBxFzodiOg4TPA0XpHWq4k+hLQVdVn5JQXr05PoLcfwAqUgZu+zHeKTf51FaGNdaPKdinCw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFuknLO1m2R7vUdeu6/+N8WEbnJadVYo+JX7k7eV2bVwIhAPAVro3/kZpx/Xbap6jpJA6sqrKcYeMqegpW32mVf7x0"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.274-beta.tgz_1487200503366_0.15124233695678413"},"directories":{}},"0.1.276-beta":{"name":"meetup-web-components","version":"0.1.276-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8b76c2d5d99107a552799bfda95229374a6ee1b4","_id":"meetup-web-components@0.1.276-beta","_shasum":"b79c44fcb4df0993a47d8649c4d711c66e06362a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b79c44fcb4df0993a47d8649c4d711c66e06362a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.276-beta.tgz","integrity":"sha512-7Kpi60f/us0ZoVVfXB6Av0ndbAQlelASEoaL7trpCCxkdaS2MZduSphAOSv40t4a2Bm9KBCiFz96XcVF9HRvTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfEq8qhUv8sSz4RI3DCeZtQ8c2YqfAO0tVqVxG7HGvUwIgC8kRPEgXuii38u0dprmViowbeUSEsqSuEXb6AwL6nmQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.276-beta.tgz_1487200925748_0.025662811240181327"},"directories":{}},"0.1.275-beta":{"name":"meetup-web-components","version":"0.1.275-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8ca345e3d64ec049306be179998dbb52c20c19ba","_id":"meetup-web-components@0.1.275-beta","_shasum":"9afb0ce7989cd6365327cc58f8d84df18ceb28f4","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9afb0ce7989cd6365327cc58f8d84df18ceb28f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.275-beta.tgz","integrity":"sha512-2ziYjAAkyFJVU/PWh3e0ECJazredKBttJQNRU33YhQ8mSfx82OPs47uCvHvIqqQhkp3+XFjsjMFCweDj5WcaKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/6owpgGnInuWvC47VQSWFifbk9EN5xfhP3y1Or/GQtwIgQ8+bsaWN1qAcw8tev7P0eDpRXgHYDCitC8p5AlSzDkg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.275-beta.tgz_1487201135222_0.412838532589376"},"directories":{}},"0.1.278-beta":{"name":"meetup-web-components","version":"0.1.278-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"e1577b37e0b3a7093a8f41f93285321d3f32920d","_id":"meetup-web-components@0.1.278-beta","_shasum":"098f4eb5c45a32e759a52c33d8f7ecfc3811f765","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"098f4eb5c45a32e759a52c33d8f7ecfc3811f765","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.278-beta.tgz","integrity":"sha512-dPfJqc3dWoPeJnnZxfo5aOlmO83e+mKdEaFBS+8SRIrPSNGdy7iHfGydX8vQV66Zys96IG5t5i7gW/1o8CnuEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFite23+PYiuHluNTVxbdAUOyuqXEjlAIyekQP5+6p87AiAGVEKnjlV37aNRxiHTO8CkVISQOAGLbKOtEpatWcXA9A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.278-beta.tgz_1487207304486_0.7757924553006887"},"directories":{}},"0.1.279":{"name":"meetup-web-components","version":"0.1.279","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"c2223a0f70abc5ea36e73fd62747355a60946482","_id":"meetup-web-components@0.1.279","_shasum":"eda981f46f887a00f14e58cadb1231bb2b1bebe7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eda981f46f887a00f14e58cadb1231bb2b1bebe7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.279.tgz","integrity":"sha512-f+LhKvWmx81tbHPZIF+I8yt3/EUYS+mzdhSWH3q4oNQf7rEZ5C4HbEQ704sSx0cP7O6Ie2cRWYMA9d2lKwasEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2RcgPzUkVizNFkL30+ybqTpO3SC+RoMSPFlctJY/yaAiBaGP3E6Chv9gZBraAc/TuXNR1OHt8DZoKq7oF1KF0L0w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.279.tgz_1487266263388_0.7354210107587278"},"directories":{}},"0.1.281-beta":{"name":"meetup-web-components","version":"0.1.281-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-router":"^3.0.2","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"30572bf8add7585004edb4f388f36cdb03f892c2","_id":"meetup-web-components@0.1.281-beta","_shasum":"e196f786685b0d2503146c0b8d019d33c1640235","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e196f786685b0d2503146c0b8d019d33c1640235","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.281-beta.tgz","integrity":"sha512-n/UCqWZNgfNTDgoY9ftF52jgObZJ5PlctdKLHvYPRw6kjn3o9yhRje7Kcax0+16WtKQouyIQ7Jn6ChuAyAHOBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXZAmKxHXvd7iW4DALub8fLF0KEsHMQrxvWEXg9tn9OwIhAJAeB6MSZtwo+9Wx84lch0hRKqa/n9g5OouxgGdV7bdi"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.281-beta.tgz_1487458697654_0.07436580862849951"},"directories":{}},"0.1.283":{"name":"meetup-web-components","version":"0.1.283","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.22.2","babel-core":"6.22.0","babel-jest":"18.0.0","babel-loader":"6.2.10","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.53","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"5.0.1","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"6cc11457ba4437d51d510afb6c11d26b5c9f70b2","_id":"meetup-web-components@0.1.283","_shasum":"d3393218b6daa028539433705a42ab34789755fd","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d3393218b6daa028539433705a42ab34789755fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.283.tgz","integrity":"sha512-h6TvEK2KEsS/BYLCuhAGXbkFHKUIM0olSsamdUP9HioRdb61OsOKPzeutMZuzJOiIAsJ/PtKguRQfZxQn99ysQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6HxAEa93c+TLEsnpkxJMGd/xZyYEg87/ZBGa97PfbowIhAPibcTRLuyaYU0j5mAr52W9CJrQRou+ZEVDPyqol9bMF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.283.tgz_1487701282114_0.8476523593999445"},"directories":{}},"0.1.284-beta":{"name":"meetup-web-components","version":"0.1.284-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"29e4b5b004ae6f8a29ad367cbd782555c3f91e7c","_id":"meetup-web-components@0.1.284-beta","_shasum":"f17a91fc3b270946f76f9333465d08e19e1cd3a9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f17a91fc3b270946f76f9333465d08e19e1cd3a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.284-beta.tgz","integrity":"sha512-4XA7SNIFnxZOWktECn3k2YXBdrST+9KCDvhrkYvMQ6y8iE8oQD/Ih+r7DCT14B4HXqqY7oD6Eh74Pv8Se5VbrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8is87LFAhtR/5NS9cOl1rqotsq57fh+EwGY39PPs8twIgCiImXFHdLjt/eoCv54RyLmKsCC+YRApsRrHMYDWVPVQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.284-beta.tgz_1487705085400_0.37183172279037535"},"directories":{}},"0.1.285":{"name":"meetup-web-components","version":"0.1.285","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"cc297d4dd04209e5975fd20a3f47c631cc350441","_id":"meetup-web-components@0.1.285","_shasum":"226b00da04396c9e79d853f22dd57ef4699dd466","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"226b00da04396c9e79d853f22dd57ef4699dd466","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.285.tgz","integrity":"sha512-19IyHhpFb5/kIBmpFIzopzKSIplEANwwKJvRnzMQDzymosiOOkNNGgKJI/neVaLW/kGMbZZgPX1FekCJWHGQnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDavJePNX0FAvsillwzbEtASsJMg74mM1RfJysW529pWAIgNX0jQdV8ama4zD+8eJ494YPRkGp8O3Gr5poiOXBfnVE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.285.tgz_1487705474215_0.17879298725165427"},"directories":{}},"0.1.287-beta":{"name":"meetup-web-components","version":"0.1.287-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.2","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"452acc1646b9910798efbdc0359010889643bc67","_id":"meetup-web-components@0.1.287-beta","_shasum":"ce25dbeafa1e3f01d32e548c5b356f4cf084f2f2","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ce25dbeafa1e3f01d32e548c5b356f4cf084f2f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.287-beta.tgz","integrity":"sha512-z3KLuccIaYaTugybqhJ36HV2J9BfYjhKsfFJEqBdP3jXIb/BS3Sa9L2fjOKeXULofwRO0s8xjr8L/pIxJjaHHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/sN1rsIjT5pYURfijRU0fO/OnnkjNa2XE9Gfe44sjPAiEAgQqYLqz3krd+nflxXkGXLJ8HRAGH4BEPp7JwTUHJtiY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.287-beta.tgz_1487752522691_0.8155399770475924"},"directories":{}},"0.1.288-beta":{"name":"meetup-web-components","version":"0.1.288-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"19.0.1","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"b283747b75bd13996d6c7e5ea058c565e8089e6b","_id":"meetup-web-components@0.1.288-beta","_shasum":"27ec5fbcdb3389be2ea5112dfa71e306d95cab16","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"27ec5fbcdb3389be2ea5112dfa71e306d95cab16","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.288-beta.tgz","integrity":"sha512-/Xn8yqVv0arkrbZnsecarcybnWmdbXUZDGOoQyeBroNzFnEzE+j4+l2tIDqihtmDvuW0zhuhDfGyE1kQ3EvuLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFutSjj7ohvP5Hh6oRfHxGd/ToI/Hd0ff4CQ1p4CFY1NAiEA2yb6MdHrcBZY5DzesrITzfx5z3KiU440/SqOyeNqnxY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.288-beta.tgz_1487761589976_0.7494068949017674"},"directories":{}},"0.1.289-beta":{"name":"meetup-web-components","version":"0.1.289-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.2","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"c667283cd62dafffba201d59623ad4fb39c7fd76","_id":"meetup-web-components@0.1.289-beta","_shasum":"c4b13a6cbb66b2676ccece9c02565fbd10e2dd28","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c4b13a6cbb66b2676ccece9c02565fbd10e2dd28","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.289-beta.tgz","integrity":"sha512-8StR7g8pfyiZ2/GLDZeL/SJcdOlbNL17hXpnkVC6JNNoAn0IFtQfnqsCQA4zO2XPDnyWoI/16bbCA4P+pTos/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgd7S55oqDxL3KLunzUtak4EnC7R+MZpVdSgfQX5HBLAiBSjH/qy1yNkKuy/AtmbqWaBU7+kBbiw46+CE3Ld8aRAA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.289-beta.tgz_1487775372085_0.47264960408210754"},"directories":{}},"0.1.290-beta":{"name":"meetup-web-components","version":"0.1.290-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.16.1","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"7962f0f8e2ce82984329af314565261b5b88d1e8","_id":"meetup-web-components@0.1.290-beta","_shasum":"4af87241d448a11b8e2f4a944eb24b0c27497a8d","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4af87241d448a11b8e2f4a944eb24b0c27497a8d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.290-beta.tgz","integrity":"sha512-0ZAAdO2ypkZUCMc/bBPXp1hC9K0ai7unwZrPPpXNrSA4MV0YvDWnbGxkrLXLFCoeS1W+ysOE4ULV1hvR1V5bHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGozbJj+88Yv/20jGCyGDYFoU9dzTMJRowIq8uPAJg3VAiEAsw62gSEQlqvwschoWQTq+Z1SqXT9XVSuf1pqxH47Zww="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.290-beta.tgz_1487803123856_0.8828046405687928"},"directories":{}},"0.1.291-beta":{"name":"meetup-web-components","version":"0.1.291-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"a17374fca387043f75d9be874b7f97a391352fac","_id":"meetup-web-components@0.1.291-beta","_shasum":"3e67825ad801907465cc70f43feec352307bf4e5","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3e67825ad801907465cc70f43feec352307bf4e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.291-beta.tgz","integrity":"sha512-iA72cEHEMwjHT5Z7Wxr+iOY3IkP/OjVeZSQ468RK81WRRpSwtNcforgoVDh7SYU+jf8LKiRXDm/NisSpIBFN/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC3OxfP3c+fm4CaJHliFxKtpSHXNGOoUCkFxPSsJmkqnAiBBbN0XftBMLlKXcUVWQBieKkLGc7JnAE2Nhtg+xMsU2A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.291-beta.tgz_1487803997488_0.797980934381485"},"directories":{}},"0.1.295-beta":{"name":"meetup-web-components","version":"0.1.295-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"3a02a0f5bc90195f27fc36f3d0c90bf001bb4c65","_id":"meetup-web-components@0.1.295-beta","_shasum":"8912597c7e608c3b72e67bd5cb455aeeaee68db9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8912597c7e608c3b72e67bd5cb455aeeaee68db9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.295-beta.tgz","integrity":"sha512-OX+Gqu+PbZYR+QpM6BG4LEOQwqK2BUgJHlAGu70uYg8UCh48s8+2jAmj94+YZpYkFJKJvDnNVjWauHl8ee8www==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7djpN75l+CsA191Wi/KAOEKQTF29rd6vk5mNhe1/DPAiApnLlycgbXjKPGh0x5nwBj9JEOmhqdT3Zm4eyGHfxahA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.295-beta.tgz_1487894973739_0.5050281290896237"},"directories":{}},"0.1.296":{"name":"meetup-web-components","version":"0.1.296","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"c2ab53ca2d164ddcca411197d7109bd7560ebd7c","_id":"meetup-web-components@0.1.296","_shasum":"5aefbd210602476e4290f19887d751f0aa92f3df","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5aefbd210602476e4290f19887d751f0aa92f3df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.296.tgz","integrity":"sha512-9Q9X1uhzd6wgemufKZwvQELOQQsX8tJzCX2yZA78zoFilQODhZECycgA9nVij88VdwjKpTXXR4cwG8UGX33dKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8aRUfGpoXwSTkihA8BfU0yIGxaqfrBf2ykwBZTDQGlAIhAO9TUnt7kV6OH/glVpwHtIVHLuWktJv4+MGxwmt6a1rT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.296.tgz_1487896235604_0.20077004772610962"},"directories":{}},"0.1.297-beta":{"name":"meetup-web-components","version":"0.1.297-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"68bd961ce5b7578d6344fd7530d1dcb8067ed98d","_id":"meetup-web-components@0.1.297-beta","_shasum":"9b087957fbe9ac3e3b5de780c03d3a49f9b822f2","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9b087957fbe9ac3e3b5de780c03d3a49f9b822f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.297-beta.tgz","integrity":"sha512-4Lu1dn8rvWUaJqfDmO9YZ54KDNB7QykTU/PbUUN1hL04TErFnAuPGtZpKSBlpcAXLD4wrdqIqz2xM00NvGuUOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE45nazrATreyLZvvioPNR0g10IQIjHc+rgFq3ZNgpGwAiEA9u0yFJxA6F/u/CVlC8RC7uWFPEdaK6W9Vm3C6Y4m7S4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.297-beta.tgz_1487897670877_0.3054566092323512"},"directories":{}},"0.1.298-beta":{"name":"meetup-web-components","version":"0.1.298-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"0d8e03ccf454a73a6ed1051a3be400a09df38e5d","_id":"meetup-web-components@0.1.298-beta","_shasum":"c83adb828ef033d525f160b276fef75bd94bd5ca","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c83adb828ef033d525f160b276fef75bd94bd5ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.298-beta.tgz","integrity":"sha512-lhs+HP9yZOLvowwb5eHunCPGeJlOD3fUv/G9SCGxlng/S5glhEkbGujsIivONagJ8SGEJyFPD/axo/OcGP/5mA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbxIX2EOE2caxiI/ClxqEDg/ahVbYFt9vgEvi1F3mpkAiBHTjDrJ7jjkLUKdsom4TI/6Yd0Kr7H3L5Dcm3dYensWA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.298-beta.tgz_1487897821346_0.13650729274377227"},"directories":{}},"0.1.299-beta":{"name":"meetup-web-components","version":"0.1.299-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"925f72c7f4bd1e985e525a172e45e0a441f9dbdb","_id":"meetup-web-components@0.1.299-beta","_shasum":"6c2e8ea2fade09eef4ca750a5c9de8d8f03969ca","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6c2e8ea2fade09eef4ca750a5c9de8d8f03969ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.299-beta.tgz","integrity":"sha512-nbsNgHFNeqCbxLUFf4SM3fKFmfKm5BiQP5YRif16YJ6SoPi3P4yiSSxBXUSz5ky4QX9L/DHZKt+6doISMNNGlw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRG5cR4+UOvJw2vQQM86c4fHRn23SPUgQEk9ERhCjibgIgaG1MUqLp9B9DjnTkuxVkFOhbfeVFmfBHxhKPNOkj7sg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.299-beta.tgz_1487897880537_0.07227532588876784"},"directories":{}},"0.1.300-beta":{"name":"meetup-web-components","version":"0.1.300-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"85ba2d4157e49e620e5f1f90093d35f4b53dea42","_id":"meetup-web-components@0.1.300-beta","_shasum":"3cb397a0218b1cdcbac99fbe3189534a3daaf3bc","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3cb397a0218b1cdcbac99fbe3189534a3daaf3bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.300-beta.tgz","integrity":"sha512-aBhZRVBVYdU0YA5bIefNPsASUX4bLzqCmcwL0Pc1rG04DxCI46RS2tC9Jah9DTYVveBh+DG40Jyc9LrTfMJ6wA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqXUL2c6+aKYqzONrtihtBNADZ7inM0ipklt4pyiEVRAiBsgxScDJKiYbEQL45qKnr74nloOsqZN1q8epKO1k1ohg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.300-beta.tgz_1487898178708_0.6648929314687848"},"directories":{}},"0.1.301-beta":{"name":"meetup-web-components","version":"0.1.301-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"4cfeb3f82de916d28a3147f5197cbbc96d9f493f","_id":"meetup-web-components@0.1.301-beta","_shasum":"3fb42d4aa9b02137dc6a3e7b4617c75f83fe9231","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3fb42d4aa9b02137dc6a3e7b4617c75f83fe9231","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.301-beta.tgz","integrity":"sha512-yI4Eqkc4+hPQTnjzUWoXEW6qfXtkPanh4iZsoY81GmlxWolHlFr0Pu9GkPkcO+4pf9rZrGZi+AIdRri8xWVuhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDghDWi0RIUK5g7M2/1PYs8hyCzgVdncFTwCLxxEOiv5wIhAKLv7l7zCEjKQOau2gseaeSc4rY5Zi8NlWwvafTrk+E2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.301-beta.tgz_1487955413894_0.8322162129916251"},"directories":{}},"0.1.302-beta":{"name":"meetup-web-components","version":"0.1.302-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"5c285ea5b1399e1daa7a578edebd3ca8eea126ce","_id":"meetup-web-components@0.1.302-beta","_shasum":"ad60186a30ed147d7359b666503da540e66aa4a9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ad60186a30ed147d7359b666503da540e66aa4a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.302-beta.tgz","integrity":"sha512-3A/rimDmm47kkCtYD2gKdwSOdP3/SSsJy/uawb5Xr3kIqAtk0q/ZBburdsxqxiKhjACGOSQjTAcR/ljlvHUH2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFKuc/5gayTTTqyHZOzbYCrQuA1hajvRkb/uTQUPgG2cAiEAgt22kzdWstZOE70B1EFQHpHhie+2O4OcsO7Vo0HGPRc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.302-beta.tgz_1487956798894_0.6065789870917797"},"directories":{}},"0.1.305-beta":{"name":"meetup-web-components","version":"0.1.305-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"69c10f8092d3143c46a530982db6cf5a246c2fac","_id":"meetup-web-components@0.1.305-beta","_shasum":"61fea8e6207991d9648c20051d8bf34328fc24b7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"61fea8e6207991d9648c20051d8bf34328fc24b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.305-beta.tgz","integrity":"sha512-iEID8D4XScsXaVspLNrBquo5mA0eKdcWPjxnnhboKMw81fNuatUfY3kqPyCmfRtln5Teb5Qn7UgQaDs6lRAXZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCToqlQK4JY7QXXmFjmziow+izpGMuWBST2Kw0f+6Q5aAIgciBxBw/FWEFIsykEGbdD7NInqZTS7y1x4H+ChHQSqcg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.305-beta.tgz_1487972716350_0.909242169931531"},"directories":{}},"0.1.306-beta":{"name":"meetup-web-components","version":"0.1.306-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"dac865c48ed5dfdc5210ae7cab05d44f80306483","_id":"meetup-web-components@0.1.306-beta","_shasum":"975c97e3b3e0c98776ccaf4846fa0cf24965ae0b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"975c97e3b3e0c98776ccaf4846fa0cf24965ae0b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.306-beta.tgz","integrity":"sha512-HNYlKKGsOCT2MLtLSU/qoWqVYi/oi2HehQvWEhoXhuG6hbum52WZPtFoyGHUwIlhnAfiJFncqnIosZ2cQIK8xA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7ZhekySrmpBSoq8HZTldHjDCjIKnx6Bg4PA5qnqKFNQIhAKt4uIf2qMSk2aRdhGaQMrWM7/S1/pjK8FYjVHwis+P3"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.306-beta.tgz_1487972926236_0.8194343301001936"},"directories":{}},"0.1.307-beta":{"name":"meetup-web-components","version":"0.1.307-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"1987ec2637d0a127421f1837c67e51384a98e661","_id":"meetup-web-components@0.1.307-beta","_shasum":"674e7861579819d03d8b61a60392405cb1f98f5e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"674e7861579819d03d8b61a60392405cb1f98f5e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.307-beta.tgz","integrity":"sha512-CUs7sIg2YlYESuOol4/9LsYg8vAUsJAHdRJMqmJd6Qu1c6hBkOrAEe6pkB78gGWSozhWPuKz63Np/Ff4DgXrBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUv7UM0AS4ShcN5bVRUNWDxQWMwgRN3d0/ovq17R79xwIgJutNIRyWPLrJKnUmLtifihN2aZoHq/mOtcqvTHxsZ5k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.307-beta.tgz_1487973420704_0.13361140829510987"},"directories":{}},"0.1.308":{"name":"meetup-web-components","version":"0.1.308","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"aa43e7866a1e42764e8054237e7ffc40f20b79aa","_id":"meetup-web-components@0.1.308","_shasum":"a3cf5da03fb07fe79656f28dfe92afb021c1d0e6","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a3cf5da03fb07fe79656f28dfe92afb021c1d0e6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.308.tgz","integrity":"sha512-GRelJ+9vIb3/yQa1EInGTYSOS/qSPdo99SwVaBzvi+VGDitgHDVENmiZ5NSgPvbe2RXORetSFeuKRFU8d5fLMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+Rp2fwbkz01q4ZJB+IMXeJXb4CwYLr5Af1BJA70PllAIhALbaDfdQKGRj96BHorCKFyEK+sxNqLaPHQjvq7WvhwK0"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.308.tgz_1487973825536_0.7479604126419872"},"directories":{}},"0.1.310-beta":{"name":"meetup-web-components","version":"0.1.310-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f4b5bfcf51c0bc3825091559f85634de2a329dbb","_id":"meetup-web-components@0.1.310-beta","_shasum":"6407ded1e7dd9bc11e8bdeacb9d63f8226d8f916","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6407ded1e7dd9bc11e8bdeacb9d63f8226d8f916","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.310-beta.tgz","integrity":"sha512-0vAH0TZDuh6RjhTFyY9XtxgvRUdNQMyQsR4UpIncZnQ3bLUufp4vcktcH1eiYFKa86X/w4MaiEb2Cci0VORwQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA2cpz2Zm/R7y4I5J1W5XNP/1F6N0SpycUFP8ngkVKo+AiEAqDkav1ytdD6E4EjS9vjJNO+8nBSWFhgZBEW0xnKvnuY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.310-beta.tgz_1487977348940_0.29947316483594477"},"directories":{}},"0.1.311-beta":{"name":"meetup-web-components","version":"0.1.311-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.1","eslint":"3.15.0","eslint-loader":"1.6.1","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"2.0.0","jest-cli":"18.1.0","meetup-web-mocks":"0.1.55","node-sass":"4.5.0","npm-run-all":"4.0.1","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.1","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"1b17c9144c0e52792d7e71ebd7a59f22f797e411","_id":"meetup-web-components@0.1.311-beta","_shasum":"11a535520c25d614e8f5c76562b504ab25112395","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"11a535520c25d614e8f5c76562b504ab25112395","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.311-beta.tgz","integrity":"sha512-BWVkvCDeTE3Pdkpab7ZRYK7Fu4F7w68VN3rzwnV8f2146xb0UBuFEehDrh11w5WN75/CLiPiYH085riuihSCog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLriBmTM32d8HMb1k3Zjv8meFVIwfR3MrbgiWPNHMFEQIgVKzrX9HqQ+pZyejN+tqJsXBn8MMxheMgnFYgZVxvAnc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.311-beta.tgz_1487978499862_0.8037105004768819"},"directories":{}},"0.1.315-beta":{"name":"meetup-web-components","version":"0.1.315-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.2","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"3fc5a4cac39914a1d4d3eda529b3d4cfd7526d1a","_id":"meetup-web-components@0.1.315-beta","_shasum":"fc308f7fe95f405c47bc178b8df6f8121a161200","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fc308f7fe95f405c47bc178b8df6f8121a161200","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.315-beta.tgz","integrity":"sha512-McfFt76+MWHpsw2ycUsdqxiOYN0HllzUYy4NEgpoXrV+i3p6yoHVLgBZoRM9M7eapJiF/LewXutXA6DLnZA55g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfr1TWBhmqKcixKs02yzM13+GeEr58CbP7hhvgVTV8MwIhAINbXBOIdREUxSqniV0jqkGC4ZA5B6t9eWwWYLvqNNNo"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.315-beta.tgz_1488270750621_0.29032102320343256"},"directories":{}},"0.1.316":{"name":"meetup-web-components","version":"0.1.316","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.2","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8e6c9ce8e75dbf169dd893966c4011a16bfed4ec","_id":"meetup-web-components@0.1.316","_shasum":"986b45926a4be4d195c1fe3453486b76368fc312","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"986b45926a4be4d195c1fe3453486b76368fc312","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.316.tgz","integrity":"sha512-qegVgs3os0q+JDGt7vdO36z3lnuz039ScMCrwGOobZF69IWLm5+AHIbBJtb5TfnKLEaMvwx24Sq0guKYCPEgmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe/5/IwxEEKzqqub1vMV7WwAYNI5Y+QVxG5SkTkx617gIhAKH0dV2HzpojBWkn+ikXmaEQIjJ0lHIynRj9v20bO4/D"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.316.tgz_1488271220935_0.2994247702881694"},"directories":{}},"0.1.317":{"name":"meetup-web-components","version":"0.1.317","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"e98ab0d85f530e745ce5571c92611f2a10cb31cb","_id":"meetup-web-components@0.1.317","_shasum":"094569a528ad46a874fd0889e594f97a4ebf98fa","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"094569a528ad46a874fd0889e594f97a4ebf98fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.317.tgz","integrity":"sha512-BJm8L5O+WW4V3BNBN6exff32j8/gybQ0L5Gz15HNCbYeJPiutXaGJpXZwx6C4qp2L+2q5WRfuBhMVDyPRPYgRg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuP5FAFpHuo0yfH+jN713D136jME3gCugBxETd65+uqwIgAnq+jyJZTGAXazl312JUqwqj5JSKF4/+KCqfspl65Wg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.317.tgz_1488271256194_0.6418017072137445"},"directories":{}},"0.1.319-beta":{"name":"meetup-web-components","version":"0.1.319-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","flatpickr":"2.4.2","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"98a4d146a394eab0cf1dffdd67c7cb4ca0234949","_id":"meetup-web-components@0.1.319-beta","_shasum":"9411097971161a53a65a485df83765dacb294386","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9411097971161a53a65a485df83765dacb294386","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.319-beta.tgz","integrity":"sha512-4iDf0Cjyfk0G1SPE+9Bnl6W9zRbg1ubeYtOmwYNrp8qXGL3/tyxusLNlf01JDWdumBAQTt/ati4ptuhen/p6xQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDlBYpfz66JC5ULBFFjjIOUaJ3KdspwW3uNFSitpVCjuAiAtkd+crfCmclIunbYmqK5pT8k5ufNW1y5timE4MUq0Bg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.319-beta.tgz_1488330949008_0.5747448359616101"},"directories":{}},"0.1.320-beta":{"name":"meetup-web-components","version":"0.1.320-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"b74d5d8a3c4999a0cae8ffaea35292f159217fbb","_id":"meetup-web-components@0.1.320-beta","_shasum":"e0431900327474bc9f3673c93b292cd8329a349e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e0431900327474bc9f3673c93b292cd8329a349e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.320-beta.tgz","integrity":"sha512-f/Nv5UpQ4Mvz2QZ15+HU9iVf9K5mHCsO8B8ZWYGNmzVEj1bjQIEJ0uitPeGRvaK4UrKX6hls55l3xzfBGJQtoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIASG7TMy6tZGOXRhReaReFgwvbCubtivbKRZN+WC4ZFXAiEA+URrP9STdEuAYTJKfV4WZS89JL6YFm8Gnzi1NaLEruM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.320-beta.tgz_1488334462351_0.5611040783114731"},"directories":{}},"0.1.321-beta":{"name":"meetup-web-components","version":"0.1.321-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"01f7f7a77468e940539dbf019781ee95541f63f4","_id":"meetup-web-components@0.1.321-beta","_shasum":"5fd2fd2986989317c3d4b739ab687e288e84b658","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5fd2fd2986989317c3d4b739ab687e288e84b658","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.321-beta.tgz","integrity":"sha512-WKNDLWZWyZapOuN0m+ylXXFcgO6kmkOurMN+QPa9VIljpuzkVPzOGcuexPaTMPxQYCafmPT6rbZktKY8hkiQHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKQTqsWirDDXTxhkbnA4Nrs6bSoaRJZAFpaTL/eLMj8AiBsNkwoIwwfjLJ+IvujDG1THswoDhn9hQ0EliDD3bI+3A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.321-beta.tgz_1488385679620_0.24465594673529267"},"directories":{}},"0.2.322-beta":{"name":"meetup-web-components","version":"0.2.322-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"6bae492d917cbd4302fb9deeab33578266c968b6","_id":"meetup-web-components@0.2.322-beta","_shasum":"b0d3e96a3ae2f9c35ecabbb504e3d3d66abb8794","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b0d3e96a3ae2f9c35ecabbb504e3d3d66abb8794","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.2.322-beta.tgz","integrity":"sha512-WHQkvD6tTIiL8CORM8EcdmCzOI8L5MhYQqLLwUJg/GON5Rp7nnyqqiGhgpIIN4tjHoMAa/YOC0RjjKYzvBwVYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjTV4pEd5hjQiy8Y2HlBA6ZBEaqiAl1ehtWOWzWRNqGAiAf9uoXwdGPryESWLZBBwo+iXKNweEVVydHMe9qOJH04A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.2.322-beta.tgz_1488394066666_0.1898949344176799"},"directories":{}},"1.0.323-beta":{"name":"meetup-web-components","version":"1.0.323-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"4fb3dc9887cd34a76a286776fcc117fbdd90e1e7","_id":"meetup-web-components@1.0.323-beta","_shasum":"352ae4a6692b7d6a7bd2601b821949b6733df2c8","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"352ae4a6692b7d6a7bd2601b821949b6733df2c8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.323-beta.tgz","integrity":"sha512-AxxgjlRHplslmxrhDkzUtaYszTDqfiN9fNTcqY0+WXJ15xuaQzH6pUtwkOomxIJwxcYrsFvfdzWB+b/qq1nwlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDn4YFyJxsekVNor7jsVFmp1rbwV9Mci2A9p4kPJYewPgIhANzxPpQEfJr1+m59pm2J4EE+dVKoCQg+0F8/K+bchKrz"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.323-beta.tgz_1488400101999_0.24810200766660273"},"directories":{}},"0.1.324":{"name":"meetup-web-components","version":"0.1.324","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"bcb50f9d787856dbfc5d0c829b06d0655001393d","_id":"meetup-web-components@0.1.324","_shasum":"a7ee042c0b6670a1655657d256738c1bc5e327b9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a7ee042c0b6670a1655657d256738c1bc5e327b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.324.tgz","integrity":"sha512-yP1U5CVHcC7JNlV5NoOjepH/3/wwIca/tMHcGhAaosE9OILuJvRDA0XNaoNjZqIezmsl42cQyv2UESXS9nCjzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJtJXEHECg9tMa/5kixrV+mx0FKA4TFrBe99RHMmq5KAiEApChgQ3N93nMaDmBH4ARWyeHLg5htRCo1KTrvpAKKoKo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.324.tgz_1488402879808_0.6011104339268059"},"directories":{}},"0.1.325-beta":{"name":"meetup-web-components","version":"0.1.325-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","sassquatch2":"^2.4.4"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","flatpickr":"2.4.2","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","sassquatch2":"2.4.4","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"29411bff9698209cec1846bfc4e0d87d193a09bd","_id":"meetup-web-components@0.1.325-beta","_shasum":"0c8cedc79f118af78c97924ec6bcf471611e2dfa","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0c8cedc79f118af78c97924ec6bcf471611e2dfa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.1.325-beta.tgz","integrity":"sha512-cdhNyv0lSS/RZNbKw3V6R3zdT14llYyu6dT9i32v8/4UiYIz86EXzbkThOk57Gtxr06zSxCWzPDLTKl1oSg8EA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8UhY0Zad1ey4McCO0m7xBgorzghAWJ+NG+WvFOGh+FgIgZ0+AAafTqWoDS5dAD7lPvjCw2MEjI9m+A4TwmEHFqJs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-0.1.325-beta.tgz_1488404903589_0.08787575433962047"},"directories":{}},"1.0.326":{"name":"meetup-web-components","version":"1.0.326","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"fe4ce03fdf886c635f835c758c0750f65bac23ee","_id":"meetup-web-components@1.0.326","_shasum":"403e1c994e7de5523990f9f56cdd135c94887e1c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"403e1c994e7de5523990f9f56cdd135c94887e1c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.326.tgz","integrity":"sha512-cDl3rk33MGL4FyHcWil4b2JvtPFP+XEpNUuQk/za/+YWBSs7Ya7BcNUq39r2QtjE5QuOM24GGHAlRF2dq/P8EA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyJjju9717eqOfqcVMkQQ7wIu/2OnDV5bBZ5NP/mmSIAIgSPXKFKrvWQSHF7LHQv1dQQv6TAD1iWbWh5cu7XocV2E="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.326.tgz_1488405818848_0.9959653653204441"},"directories":{}},"1.0.327-beta":{"name":"meetup-web-components","version":"1.0.327-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"a351cb0c4486843ec6b3c3003c97286fe84b6c79","_id":"meetup-web-components@1.0.327-beta","_shasum":"bb7d2edcb76696c0587eb4b4d661eb7659f45424","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bb7d2edcb76696c0587eb4b4d661eb7659f45424","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.327-beta.tgz","integrity":"sha512-edGEmVPvPf+PKUBrmt03pcSXIEpMSHySl4AuNLnXwqqIbyBbJ/N4dLLbBWJ4dj3jM6WcquKvDvYDOfPYnQMGOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrVccIecXAU2i69yvBdvUQmK1DkiWHvYsOXjZq41AS4AiBM2JnZwGG2QCaSfpFDcIGzeNnrJIx/RfljIBf3eloKdg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.327-beta.tgz_1488550143417_0.06051719840615988"},"directories":{}},"1.0.328":{"name":"meetup-web-components","version":"1.0.328","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"a7a03bc44a976cad1184991202428f624cca3217","_id":"meetup-web-components@1.0.328","_shasum":"c607c9b1d813ffef94512b93567a4025dd8a0d4a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c607c9b1d813ffef94512b93567a4025dd8a0d4a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.328.tgz","integrity":"sha512-vjAiEoQNxy4J5Go5ONuPK3JJqJF8O1ahDavmKDNXrDmyvl3vogHn9MZsckZvg6E6iL/YueXRlRLQ+oLsh+erDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICPCdL+gHLpE+YsJSpkePj8p6jIRJdcEP4+SllTD+1HvAiBhyQIBW9FRdyQXuzswkHe4auC7pHaOUuXGlMIWsfF+Uw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.328.tgz_1488568054924_0.6346596642397344"},"directories":{}},"1.0.330-beta":{"name":"meetup-web-components","version":"1.0.330-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"afeb7143db1a05040e678464e44b9fab0b44241e","_id":"meetup-web-components@1.0.330-beta","_shasum":"a0968a769b82adbaebbeaf4b8a1d9b3800b479db","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a0968a769b82adbaebbeaf4b8a1d9b3800b479db","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.330-beta.tgz","integrity":"sha512-YONLd/H97x+NaMjxSYZ5vA+bQJRN0U9DrpiTxRLxPeF6dbrMVWR8tMFXpv+yNZbFQ2uZ4rrjwwFZdvjR2NH06Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXSoLyLIwfR0IIzyxHQj/qwPJPjab/vl5nuWYvhrK3gAIhAKRAli8mPdLdpDDKVtgvDIq/iu1q0pczXqy983kyWnSX"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.330-beta.tgz_1488587280957_0.9953261946793646"},"directories":{}},"1.0.329-beta":{"name":"meetup-web-components","version":"1.0.329-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"7088a37e7811f837fed910ce885e3075ef3acf3f","_id":"meetup-web-components@1.0.329-beta","_shasum":"b492987b1ddfc315e145c322bc8f7a33659e2cc2","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b492987b1ddfc315e145c322bc8f7a33659e2cc2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.329-beta.tgz","integrity":"sha512-8GE8DJEw9sAANWMQo7WzMHkos6qlOQxchn/tM+x+Fha8R+qM/70ChGFev61indUJfDhlUo5AxhFcM/eg/YkGDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUy1CNIYPWM1z/XRY6iCAEwT5EId2dGkAEtYPlc65G1wIgGlyjJdcL+Zwq1oWztk0x2ZF1hxruoZ+GTS+Ujq9lCrk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.329-beta.tgz_1488588127830_0.03651506430469453"},"directories":{}},"1.0.331-beta":{"name":"meetup-web-components","version":"1.0.331-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.11.16","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"6ccfe504520190e914c2015fa2567c93abeb8e0b","_id":"meetup-web-components@1.0.331-beta","_shasum":"84861e1854ff19cd575d1b89434fad8a62970e82","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"84861e1854ff19cd575d1b89434fad8a62970e82","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.331-beta.tgz","integrity":"sha512-0KYP23sWzxLWEXBS44ZK/SXePs2BxUHJw/RsBX10tubRfcZC3FUR25sDTSOeTslv2akbsz84tE0ezCntFypVkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZY3a+BmArhu4/S1QUMKAge5AElNMiBzckFxjdI1RPjAiB6gD0g50ZmwQpM5Sbxtiqfz6nOebia4/p8dR6UyVSpsQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.331-beta.tgz_1488589239147_0.3780614766292274"},"directories":{}},"1.0.332-beta":{"name":"meetup-web-components","version":"1.0.332-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.5"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.16.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.5","jest-cli":"19.0.2","meetup-web-mocks":"0.1.66","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8d33786388b5eac0e0a2536b135cdf43033aad8f","_id":"meetup-web-components@1.0.332-beta","_shasum":"d6199784aa06bb25236e06e4c6cd3fe7236ae30e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d6199784aa06bb25236e06e4c6cd3fe7236ae30e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.332-beta.tgz","integrity":"sha512-nobjm/jAST/8W8y7Na+JC748SW3HRoXvgOj678IfjJXsGVX4W0AU50yNPSz/20pWw/0YUWxrtGGA3shoy05CIw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbtOfx00Ao+AHNHfGijgkIWiQYki85uiDbgu4erXJeLwIgNkKhbc9/esUwGp4/ZczgECYQnUKA+fvUxjYzwK/JiYc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.332-beta.tgz_1488745413815_0.6893153637647629"},"directories":{}},"1.0.333-beta":{"name":"meetup-web-components","version":"1.0.333-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f73aabbdc879901c1febefa0f0be1bbceb067108","_id":"meetup-web-components@1.0.333-beta","_shasum":"2a680db250de7b9c303032fb807f63cf4c9e9fc9","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2a680db250de7b9c303032fb807f63cf4c9e9fc9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.333-beta.tgz","integrity":"sha512-ZBFQwOLFoHUwzaCDWs3tWp84PyFLNS70ciOBh/bAJCPAnsmV8+aSNDjFv0nOwA+Ri4JiaPYd2dSZQZxz/SWWLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqX5oHR3klqcSM4tm6LcHfkGaxhhtIGilYNpmxHk7HKAiEA0UpZgrBbGfY6yq/Dlka2SV1nb0Dda/xEpfIf0yn4eFc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.333-beta.tgz_1488746756593_0.8724777854513377"},"directories":{}},"1.0.335":{"name":"meetup-web-components","version":"1.0.335","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"5084ce61ee6d063f1673887cf9e371a101eca33f","_id":"meetup-web-components@1.0.335","_shasum":"c6fec1e83365b3bd1ee6192231fac9b7b4c1485b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c6fec1e83365b3bd1ee6192231fac9b7b4c1485b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.335.tgz","integrity":"sha512-h8kP7WJdhL6uffnnX08WFV3j81oHdisSD0nLVDo85q1VWobN++SX6bSEwQMmqBbUBMSjYo3kmPSwi2DwE7DaLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHGznDM/nWqd2L3GD3vX3pwsxcM5fesqk1JokfTA8YfwIgImlp6POlGZfcAimPrf/UqNXNRMlRsrdMVEi/I0WB+fY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.335.tgz_1488747202168_0.750554115511477"},"directories":{}},"1.0.334-beta":{"name":"meetup-web-components","version":"1.0.334-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"523f0602107ad4a1017509d66a4cfd0e1907f7f6","_id":"meetup-web-components@1.0.334-beta","_shasum":"f7bc54e9cca9009e24ac8c38beae012a262a7b0a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f7bc54e9cca9009e24ac8c38beae012a262a7b0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.334-beta.tgz","integrity":"sha512-bWmQXmhIK3NaP8wAFKL+Mm0OECxpONBFJOAfuHdGRXTRZJToVsNAJ3gd5BGCLoJpcAOUWhC2UqkXmhUB4Ctrbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTtfaLEdJl01hUtzqIYiO8sqIs4sr+oW0K4Iy/YjFACwIgXtxpfnYh/vWmF+VIVo9iMQfx55PuWureOFVHYCT6LqE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.334-beta.tgz_1488747377058_0.5011145260650665"},"directories":{}},"1.0.336-beta":{"name":"meetup-web-components","version":"1.0.336-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"b452843cffd1264025a44eda66bbbed7c577134b","_id":"meetup-web-components@1.0.336-beta","_shasum":"bcf86ea09dcb3efa5beedefbf83e865e19c9f17e","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bcf86ea09dcb3efa5beedefbf83e865e19c9f17e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.336-beta.tgz","integrity":"sha512-c4q26Hy9UmfDmo9tlXFypD8nVEOoKJ57GiWJPEG71PrATy6L3BtOG2IhD5z3lFMDCIIhuM9WHw5sBJ+D1qs6+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD45QbMxdMhCCA4/avdHTXHJDZkvG/EG45ZT8nT/xlpqwIgd/KxZEjx5wvr0GzjC8DNGvoplhcYBFkj2Ec+56ByTNM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.336-beta.tgz_1488761911605_0.9253330826759338"},"directories":{}},"1.0.337":{"name":"meetup-web-components","version":"1.0.337","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.3.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"53ad53e4fcaf7856659d18b600cdeaa98619d6c8","_id":"meetup-web-components@1.0.337","_shasum":"488607f0cc393ff8c785b87e10809ce64e379b0a","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"488607f0cc393ff8c785b87e10809ce64e379b0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.337.tgz","integrity":"sha512-JdOaCf8Q9FNyJPDy1RULdYJyDKwINC3Vg/3nmWzS6b4m2YRIgACpxlDX4NU1YqYuoeVFp/JWBAxwLa0AvAg//Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIESjmWKAXQ6BfCKrdLomNgzWsMAc4GXrtTNNXf8WnqXwAiEAvbgBLsIy5TDj70QWAmvQbJFUDxKvktj2tA0g0X9/Q64="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.337.tgz_1488762147803_0.4169799513183534"},"directories":{}},"1.0.338-beta":{"name":"meetup-web-components","version":"1.0.338-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"c724239399de288f052d6a3a9e1133d68296fa73","_id":"meetup-web-components@1.0.338-beta","_shasum":"f8e9aacf187ef045909e5d0ae0f05d067b6031c2","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f8e9aacf187ef045909e5d0ae0f05d067b6031c2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.338-beta.tgz","integrity":"sha512-IhMsGu0b7HG87PJcibjUgtyJpfQ106W6n4WCJtXYRUIyDOGzu+9XQr1kMc0kq/hl2cSVmyJCjgKLZpKWpsrIAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQB8r2INhx7bQ56abDP1C2THGR1pw/UHlPtJAq3Hf3+wIhAON2bgRrvh/ZtSxQsvux194crskMXQiZbdMMgBhblxZV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.338-beta.tgz_1488805808700_0.44055947940796614"},"directories":{}},"1.0.339-beta":{"name":"meetup-web-components","version":"1.0.339-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"e7a44b4b04c8ab0265e8e9865e5f1e2c0d3025df","_id":"meetup-web-components@1.0.339-beta","_shasum":"eaf35dfda495076e9b7f67bbe12839b6e22988bf","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eaf35dfda495076e9b7f67bbe12839b6e22988bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.339-beta.tgz","integrity":"sha512-6rHwn00MNzy9YrN9PmJfOUnoyDzsrCKLaMvM/x7OD/k72AhWuGSGF32kpVsiSCeBGQaJzb0mqevrfvjbfIZN9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG1tp+9CFtzLHZ8ahQczz+2c9s7ag2wy/Yppq2AyAAu5AiEArH0Dp11yudGxmzD4SIPmEZ78Jo7eLwLhhsXbQ3cr/58="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.339-beta.tgz_1488818869016_0.46031802450306714"},"directories":{}},"1.0.340":{"name":"meetup-web-components","version":"1.0.340","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"528fbded9ad95565e0fa1504603935549c3ec6ee","_id":"meetup-web-components@1.0.340","_shasum":"22fa4cb9eca23b8f60fc4e3e84a83edcc8b5b296","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"22fa4cb9eca23b8f60fc4e3e84a83edcc8b5b296","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.340.tgz","integrity":"sha512-pw7jeQME97ugEXEMFBokuSMj2IMsEKYmotzLEPWs3hXg165VVH7p1tijE8MbVRGFQ+bnPU3Jn8jS+tCpgWt3og==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC0c39xY1z7u/fjUIwcrh0jlxlP+FROgEPdvtB9hhOdAAiEA2LdlcDSpwiNaw4c8E44GCJDzNOBkgfV1sOCjyqX3jAk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.340.tgz_1488819616564_0.07749986671842635"},"directories":{}},"1.0.341-beta":{"name":"meetup-web-components","version":"1.0.341-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8df547b1713b0930df03758ed6242c074233749d","_id":"meetup-web-components@1.0.341-beta","_shasum":"a8dc4a5f6c1206b0f7e850f8dc60eedd9f5cffe0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a8dc4a5f6c1206b0f7e850f8dc60eedd9f5cffe0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.341-beta.tgz","integrity":"sha512-tI3RWyKJImqTpXFixOvPoUk7SsjTX6JTA5R0pCgmH1yRgiGaUQorlECek18V/rn/k/naoJr0LaYiJaq1B/37pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD94T9GLEcBHQCdVIKiiBOHzMI5S/aXfCXgujqrUZynSgIgVQeHdhG4SJmcVGDw5UYxJLHO0w3jrqVuv5cjzlvuRQE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.341-beta.tgz_1488839052874_0.6389518831856549"},"directories":{}},"1.0.342-beta":{"name":"meetup-web-components","version":"1.0.342-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"18.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.18.0","babel-preset-react":"6.16.0","babel-preset-stage-2":"6.18.0","babel-register":"6.18.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.9.0","flatpickr":"2.4.2","husky":"0.13.1","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.68","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.0","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f759cd514f3ed4861c680c3a7a9f13d636625b7f","_id":"meetup-web-components@1.0.342-beta","_shasum":"ab077ec7646c7fa8481e5a7766f337145980ad94","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ab077ec7646c7fa8481e5a7766f337145980ad94","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.342-beta.tgz","integrity":"sha512-dbLTtdWV8M3B2XpkTVEONdecYQUxKdH4mt42QckTB/DDKok4i1puRrJa75sqsNRE8p80hYCN71RiueZEDstR8g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG63A7ZKaERTz84HTb3IPkFNX36HWsX/X25rOmsiGGL2AiEAiE6z9xpMsSfX5wmkEuvynB3CQJh32Oec2QnqqSbiINQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.342-beta.tgz_1488839162145_0.35895295441150665"},"directories":{}},"1.0.343":{"name":"meetup-web-components","version":"1.0.343","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8fb65e16cfd4b9bb7d7c63c7325aab3e7b8a1f28","_id":"meetup-web-components@1.0.343","_shasum":"f66ef0f89c73861a8e6b4a51ab4ae14c44fe8f13","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f66ef0f89c73861a8e6b4a51ab4ae14c44fe8f13","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.343.tgz","integrity":"sha512-6qf/wHolmMCA3r7ko5sBVRTsrMSKgpgoAMT4QtyM0riP3MfJcbVyRX0K0DnBXogNmpPgV8yFZDCB85UsevFRlQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnby/Axk3ezSk4PCgBQFAFNmcJQzNrrDqdKFsEHLtmmQIhAOku5XHLUB5n/wBd12bgn/GOysodfch7LvvCjT4ygCht"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.343.tgz_1488841094629_0.9633062651846558"},"directories":{}},"1.0.344-beta":{"name":"meetup-web-components","version":"1.0.344-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"8a19b868ce556976a1684ca0c50b1d4db28a1212","_id":"meetup-web-components@1.0.344-beta","_shasum":"2548058859ad76119259d895f52a106c9616a9ac","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2548058859ad76119259d895f52a106c9616a9ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.344-beta.tgz","integrity":"sha512-mhUnJyZFMbgz0djj0LhdNB4aUnI0vqqId1hDTNawbBtBD5D7uLIL3wVr+kWzyhgailRfecWXxzERsJgA6sraZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlrj9NV/wE6gpbNnWlAiREI5uBZ61qyR+IzunCYgf47AiEA/b8KhNI2sRAlH5bkoSgJ3gYUKH9xApoQCh4XxY9l4uI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.344-beta.tgz_1488851837788_0.43709167558699846"},"directories":{}},"1.0.345-beta":{"name":"meetup-web-components","version":"1.0.345-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"2b985d081595252fad7a60e6c8e48932eceef693","_id":"meetup-web-components@1.0.345-beta","_shasum":"7dd12a7e3412ac4e73fb2d10733cad42b7e739ad","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7dd12a7e3412ac4e73fb2d10733cad42b7e739ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.345-beta.tgz","integrity":"sha512-PL8jzBI60wMQ/fF/OdKx/jtb5I8KDybFwfB+3LV9iyL9AjognS38KlCZvGmhaOKFP3t9pRLcvEOotM4epag1Ow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6u83UTMrkDGBJSgZ9AARtAAA0YlezGCPOmrEZM6jXiQIgZ515u4wpjmumujuUit+xe/kHI0P9gnOyk5Sq5TYXdRo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.345-beta.tgz_1488910873121_0.9826803372707218"},"directories":{}},"1.0.346-beta":{"name":"meetup-web-components","version":"1.0.346-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.3","swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"16b562d6d31605927a6b1019605339a11f7ba624","_id":"meetup-web-components@1.0.346-beta","_shasum":"176a41b8273098a8eb0794aa1995ff97b89500ff","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"176a41b8273098a8eb0794aa1995ff97b89500ff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.346-beta.tgz","integrity":"sha512-LbEaT4G/Hz33OiWBXTTB8yhQJgAGkFR60Ijm6Q/7jzZEMgcIQEvguDwbsIiNSC4AS49HPl83Qhn4b7CEj8TePw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDKOVBlkrhE8wE2eZRVurR89OsYbYTyuPKFzqjO9ZGJiAiBoGL97mOSQsVVIe7nmVmsb/7N2TiZxvQJkjk5PJtXcDg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.346-beta.tgz_1488918210191_0.9911522164475173"},"directories":{}},"1.0.347-beta":{"name":"meetup-web-components","version":"1.0.347-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"82eb64be29900e75c2ebecdc6c375adf046c45d9","_id":"meetup-web-components@1.0.347-beta","_shasum":"9b8fe230592b478c4ad81afab355534035c7ffe0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9b8fe230592b478c4ad81afab355534035c7ffe0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.347-beta.tgz","integrity":"sha512-uf9PN1nHhjGbZGk0scwb/IqnpxfvB9meu3e8o9l2ssQQQEy2tbqckAP3IhFi+IMCNxgvtB9qFfUTT5kYjPscsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZL4rV8U5sWYA1sQtfhXCNG0mji4uCvaJSrH3DKacPnAiEA3CBQswuBfyGVGkEsh+bqDqtCLsEhSYKRlNlhNXMk68A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.347-beta.tgz_1488918555339_0.8637090814299881"},"directories":{}},"1.0.348-beta":{"name":"meetup-web-components","version":"1.0.348-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.0.9","webpack":"^2.2"},"gitHead":"41deebedacae4423d291c2a2769108212244e71d","_id":"meetup-web-components@1.0.348-beta","_shasum":"7792583b4f121a149bb2ac536e87491ff3f135f1","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7792583b4f121a149bb2ac536e87491ff3f135f1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.348-beta.tgz","integrity":"sha512-0ppHtNerqg9r3ESI27Dtmp9RkyQR1urSnyuh5kx9++QowqhSLjZ4rnAjMT62qXBvZl2cWBa/fTXSNBhYBO1IvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6hiryW/vN1ckGwtXalrnn2d7XLNfI1oxXsJ2++2lqLAiAhSRWKNAlN36Nu4MJJDz5j9fTjEG+KdVVcXmOU13z9Ww=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.348-beta.tgz_1488921487288_0.8527482633944601"},"directories":{}},"1.0.349-beta":{"name":"meetup-web-components","version":"1.0.349-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"79e664fc4fbff6eb174d0a7067f18802a32c3ee9","_id":"meetup-web-components@1.0.349-beta","_shasum":"e8249e918af8167326606649ec3d05c677862200","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e8249e918af8167326606649ec3d05c677862200","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.349-beta.tgz","integrity":"sha512-g/HVXgQyhWMi4LtfraH9NnOh58h9jlbePaXPebswSfHfPsLYFidQa+L4Qes6DZq3xqjHZoLg08uQlCCmtg4yzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLTsBVuLwcdSJg8gWjRFG6wcFkgEmFiUgSTAYhqtYpZAIgf33tUEdbExzpNAE/sb66RXdIBBvex5TF7ORi8vJRBrQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.349-beta.tgz_1488925951637_0.6614291376899928"},"directories":{}},"1.0.350-beta":{"name":"meetup-web-components","version":"1.0.350-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"dbbe04aee5a3b6066632e452f8763b26ba5fd80a","_id":"meetup-web-components@1.0.350-beta","_shasum":"85e849ec5ef7bf353d2b26ebce6c27457efc0547","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"85e849ec5ef7bf353d2b26ebce6c27457efc0547","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.350-beta.tgz","integrity":"sha512-RBHfspctI3qKp/129jMlNwmiDJy71Se6I9HCSqaENnSOJBJtBmacfjE79NZXRGddQJfQdejZcOsbMGZWIPtgug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFYdp9uvHKActxwvJUpAA8B8y6QLuK9nSs8A0RE71ObPAiB/BZkbGCvoUyB4BC/x2kmybWo6qfFQKVKfp506onM9Bg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.350-beta.tgz_1488928278142_0.29092132835648954"},"directories":{}},"1.0.351-beta":{"name":"meetup-web-components","version":"1.0.351-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.2","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"f05abf7fea166554feeb4f1833e1ca49bebf505c","_id":"meetup-web-components@1.0.351-beta","_shasum":"dfb9199ec5fd800fdc51cfc1e6131744a8054616","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dfb9199ec5fd800fdc51cfc1e6131744a8054616","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.351-beta.tgz","integrity":"sha512-jN8kwxb+OCavaxhQdID1tA/jJjjnV9LVOAfvebfxYXOgWmZpigoB7l1rvdiDLfFWddFLvArgU6KsNNnT0q3NJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqezVc2mZyUg2ydv0f+Ia1ZCOkhq1+m28reUFcZ1uvPAiEAgrplxy1kk92gpbMMs9D/Awos+0tDAst0Y6QgogyAXuc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.351-beta.tgz_1488930618116_0.9297056237701327"},"directories":{}},"1.0.353-beta":{"name":"meetup-web-components","version":"1.0.353-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"swarm-sasstools":"1.0.6"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.23.0","babel-core":"6.23.1","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.22.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.23.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.26.2","eslint":"3.17.0","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.70","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","webpack":"^2.2"},"gitHead":"4f63e25ea6e36be1376c181fe4240126d8e3bf67","_id":"meetup-web-components@1.0.353-beta","_shasum":"417d8fe251c350d2bd3e79c6c495b0ddf33b1f52","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"417d8fe251c350d2bd3e79c6c495b0ddf33b1f52","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.353-beta.tgz","integrity":"sha512-6YaiXgenOmS+KAFgYzhNIEe47wzCJS9Hgu6m1T54uqQn4Ao8+LzOfNzPma1gMewE9TE+TSsW5P82a7kft7w3cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGupB4ZdLIPfqQjJiosFeU1lrSn+WIihwZxK/fIPA1itAiEAvhnkUiXNq/wAS5hCRcOjo0yj3StpVjVZyQuAZWBPz2w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.353-beta.tgz_1488942783691_0.11562564526684582"},"directories":{}},"1.0.410-beta":{"name":"meetup-web-components","version":"1.0.410-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"f30b79fb21b1dbefa6e8ea792628f303b2e08e15","_id":"meetup-web-components@1.0.410-beta","_shasum":"d52339f13e8c9bcadd48b2b937847d27fee4ecf1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d52339f13e8c9bcadd48b2b937847d27fee4ecf1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.410-beta.tgz","integrity":"sha512-DVyy0PTRcHEKIJn/h4drReTEyNFdt7WOjb7nxRK8ZtsFrbuj9NSmCY131MqvMzVWYHDMkYxsf9BA9ViteowaCg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu4+GmJs0cgURUgCDCELEwIiEyxIov/VC0Lj8XicfeMgIgAOM/DNMXs7Jp0PU1D+wVYGcAQD4+AcrMlEMn1ybIGkw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.410-beta.tgz_1490043731424_0.7734026350080967"},"directories":{}},"1.0.411-beta":{"name":"meetup-web-components","version":"1.0.411-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"83d1079ac943cf3173335481759c863cfd3d66a2","_id":"meetup-web-components@1.0.411-beta","_shasum":"36e64245b6a5d773278f3c0f321d6e922ce99ada","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"36e64245b6a5d773278f3c0f321d6e922ce99ada","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.411-beta.tgz","integrity":"sha512-hEWP/aCbYHZ79ZM0vDczGbjVyB6v+viX6UwjdMNdbSyVhypb8JJ8gQ0AY0W9XSkN91CwNg7UWd8iPGDHb79J/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaOJl7kmnkEOwQZa11ql2ejp1MfIOJb2Q8J5bRpIByOgIgUX8yM0VECGxUpZhp0eRMkp84T1wS0DrT/cEs25Vlc0I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.411-beta.tgz_1490043868734_0.011550695868209004"},"directories":{}},"1.0.413":{"name":"meetup-web-components","version":"1.0.413","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"3c1821dc44f0ecd766b2871b41afbd92368d9ae3","_id":"meetup-web-components@1.0.413","_shasum":"7c5826d1a46f4cc8af66e9c9ce0e6262c98110dd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7c5826d1a46f4cc8af66e9c9ce0e6262c98110dd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.413.tgz","integrity":"sha512-JCG36peJGJhYw/Wns5OX0MB6CGz2vPFpGmbMzRLky0VQAks7cKsrFkE8k1KyIioUObEi1c5jGNeExo37IA2wSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICdPMCgw+6TXycsSvEbQ3+0zgAPM1+aDSelygBHTrfc/AiEA5XfL6786RK4l3ERRnitZRw3oIb91/Tj4Eh0t8/zo9yo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.413.tgz_1490044716852_0.42090984527021646"},"directories":{}},"1.0.417-beta":{"name":"meetup-web-components","version":"1.0.417-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"9885e1462adcea0a402b6e695cf0e9b5d29f1cec","_id":"meetup-web-components@1.0.417-beta","_shasum":"f7559e95fedf5c10619cfdb84367a07f6978cbe2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f7559e95fedf5c10619cfdb84367a07f6978cbe2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.417-beta.tgz","integrity":"sha512-/WyvfM2vYd47zuYz/yy9QiKTv8y/mBfH+UsNFOQsyFoM8PeJDQS+QYraUNMZome3uyINoWclIPf2a+OQTd0tCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBuPdCYAw/y4CqU/oLQauY30TVQvSFgGcr1jzjdRb7EsAiAhQNwHU4yJgVYvVLXDrqMhOhVLBMxQK/E+GXfW62EEZA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.417-beta.tgz_1490112920001_0.4490759971085936"},"directories":{}},"1.0.418":{"name":"meetup-web-components","version":"1.0.418","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"955c6adab3d1b6770e52490ca006406411b383ab","_id":"meetup-web-components@1.0.418","_shasum":"4f0cae239e3a60d38d1953b50a4d31e87b881689","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4f0cae239e3a60d38d1953b50a4d31e87b881689","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.418.tgz","integrity":"sha512-ytOG/d8A3RpJgvTclzKR+3lVxT4F7MHFYp+chNAKka2DBo5l82RlqBM2DDrQfIAO3O4M1r6YacdOJmWk1SpR8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICTncNZOZEJb3kfo8NMHReGhb+TYIRMRjGmCf00Xd41/AiEAjznYcVAZUCTgFiQAfDqYtDQkUkY7b+9KTkRKzOfERZM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.418.tgz_1490113576920_0.613012733636424"},"directories":{}},"1.0.419":{"name":"meetup-web-components","version":"1.0.419","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"5d68cc534080e3053d794083dadc2f2cc05ab69b","_id":"meetup-web-components@1.0.419","_shasum":"70237b55cf82a08a3fee888824f762fd34c4ab23","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"70237b55cf82a08a3fee888824f762fd34c4ab23","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.419.tgz","integrity":"sha512-05o71WZhbNoMS2qI2HQ433KHZNFPuhCCVIDtv/Hw0KE1y16Ah9v4ypV5vE0ksiZv9sp52/hE+pEqoMvHbRSb0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0lnxrtuHuRFpSoWrsMvLfeVwku85Urg19wWji8tQ8lAiEA6ROdJM8KDXB843ZbqQISmzhfxyVsBvp7/eEJ0tLtJ5I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.419.tgz_1490113979256_0.22651822795160115"},"directories":{}},"1.0.420":{"name":"meetup-web-components","version":"1.0.420","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"5e885621b432e314efdde181e5a4400ecb3266fa","_id":"meetup-web-components@1.0.420","_shasum":"dc145b5f58f937bce4a4ee7f46ff3903472999b2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dc145b5f58f937bce4a4ee7f46ff3903472999b2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.420.tgz","integrity":"sha512-oYAHrkpfFiyc2RYUoPVEA92DMWbkeGu34BwriA0X/AP2evQpPMyfuRwBMpWnyw9U5n54lsBhZrgINGZgko8Wjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICcpDXFZYoww7QWk3fuTfPnpT3jQPHzovdmSf9t2djOPAiEAzykZlSHwf1ZrPPuYWij8AFM6hjKW5THQnETzLwuB3K4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.420.tgz_1490114166055_0.3531839984934777"},"directories":{}},"1.0.421-beta":{"name":"meetup-web-components","version":"1.0.421-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"33b5dc8c0e0e982f38c871b09c54c08674f1e2c3","_id":"meetup-web-components@1.0.421-beta","_shasum":"52125ca4008ec255216dd1fe5bbfe75414c7ee5c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"52125ca4008ec255216dd1fe5bbfe75414c7ee5c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.421-beta.tgz","integrity":"sha512-QRJGskWu4Zv+AJKbymEGyBPke1W9fm7q+TQgkSz6KxRYz15HNnusaZUeWTuoHm7ooDm/GdgP8ifHyvZHtRT7Hw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHOJacoW10S8CcqiQs+Eg+vX9TVWK6mM/xjIXlj6emRqAiEAxzSAt9mEhibETGfqA98g14fPBTqbDDE927IOZ94u0Zk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.421-beta.tgz_1490118389963_0.6274415967054665"},"directories":{}},"1.0.422-beta":{"name":"meetup-web-components","version":"1.0.422-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"6e409da32ba0a0f9ce79bdee62f55f0499993eb2","_id":"meetup-web-components@1.0.422-beta","_shasum":"76ed86479769aa825dbd23b2f0eea18b1f4d03d7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"76ed86479769aa825dbd23b2f0eea18b1f4d03d7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.422-beta.tgz","integrity":"sha512-/F41Q4Rd/cZTxI+y4hXagztJK1XF7p1HXDUzCFH+9ZOWAJo/tgD0c2ZZppu8n5wZGGfpGk2SYjwXl3dxNK2njA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGXNJImG/bxH3D4C0klQZfHb/1FHJCAz9PwdF37Lo+rLAiBxi6mK+URN7Yahzj9T9xon8bPv9FAToYpgiItohUR9vg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.422-beta.tgz_1490120742331_0.6340779615566134"},"directories":{}},"1.0.425-beta":{"name":"meetup-web-components","version":"1.0.425-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"4ac0de4c2854246915060ba3fd8ee47f35d904b2","_id":"meetup-web-components@1.0.425-beta","_shasum":"414c240345f74e77cc773d40682168e747184312","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"414c240345f74e77cc773d40682168e747184312","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.425-beta.tgz","integrity":"sha512-HNhT9hqL7WDm40bYzA2QrMyJfRGK6Y6IvxYsRMroflBQQlptuInfm0vr9M/6ZsVguqKfsjyezyXtngRyd+DX7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHgZP7Lhs9ij88AIk3/IEtxxYcoxQJL5hU7/2zwnO9TAiEA9N20gA3PqLxc/JCvV3d57Na0BqCECnAY5CDBXOzIV4I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.425-beta.tgz_1490125092573_0.47530644410289824"},"directories":{}},"1.0.427-beta":{"name":"meetup-web-components","version":"1.0.427-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"50ac362e51379fa560aabed9edd4ed725a9f66e9","_id":"meetup-web-components@1.0.427-beta","_shasum":"28f595d5cb9a283daaae81ad0e07de4bed2036a5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"28f595d5cb9a283daaae81ad0e07de4bed2036a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.427-beta.tgz","integrity":"sha512-P59DUf9Gr5FaspgyU+588J4UTJgLXaUyI6LicKt9OzAQ63R+/vKjenbUEGGo1KK8du/6jy7N+sNOCOU0OAi/1g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDY+kvh8OgdU2Sg3md4lNBnU9sdDoVWj4xPYNxwNS3jpAiBkfUfAShYZ1zYeAvp36ymOcQGWwzACuQwtZDMUMHK2gA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.427-beta.tgz_1490126387664_0.8971761919092387"},"directories":{}},"1.0.428-beta":{"name":"meetup-web-components","version":"1.0.428-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"8c96a8212b3ffc22c9e31ac9758695d29fd6106e","_id":"meetup-web-components@1.0.428-beta","_shasum":"5157449a449c88fb6ae065fac10a72b6584c0144","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5157449a449c88fb6ae065fac10a72b6584c0144","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.428-beta.tgz","integrity":"sha512-N1FHgNDsQX64Z6mLp00cCddbGWwfe3ku7Jutmur4/x0YIpDys0DKfTE8jmOPefthk0ljnSPTijirWa4tmlu0OA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMTa05fJGkr+hOmrAPiFeylTQZd47YJwbdQb1LSnZg0AiASYbz3uVc03qWFQpnc2QZclZfOiu/q28IwIK0TC8717A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.428-beta.tgz_1490127239824_0.283157512312755"},"directories":{}},"1.0.429":{"name":"meetup-web-components","version":"1.0.429","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"0084ba12bd15d4e74f039d6107b4644a16df3e82","_id":"meetup-web-components@1.0.429","_shasum":"d2fa745d31dc7d87542636696ef87278eb23b849","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d2fa745d31dc7d87542636696ef87278eb23b849","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.429.tgz","integrity":"sha512-gUBKbJzhjLZBP2qwJkxV0iU0Q+VUZe9fek/oX8dmUcrpAJ07uNSGZIVmk8C/6uxurjgCI3JSKeDJGyzYUMpawQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS9XVNreKJoo6QG0xAnRn6coUSw5T8kJykI5dPiJ8hcgIhAJvpIUQBZ09UBn/Z32icaG6PseaoEZFPIl8ZiwDMQ7vI"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.429.tgz_1490128492030_0.9516228707507253"},"directories":{}},"1.0.430-beta":{"name":"meetup-web-components","version":"1.0.430-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"d82827f806b0fda58ed20dfda6fbb111b3f5a4ab","_id":"meetup-web-components@1.0.430-beta","_shasum":"f82b44c2f13812d5671fe7b61823442728457bc6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f82b44c2f13812d5671fe7b61823442728457bc6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.430-beta.tgz","integrity":"sha512-zJK+if3ONHxJUM2YKMLETM9PZk731dQt1Zjf4ORK8THD+vjjGzXS09VILUflvRMgkqEovfGC3+PZ2zVUmL23Ow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEHvbXU1RVMRj84nfmsBGFPJEAvq5Q6g5nRtDwojr76sAiBcVnEQCRa+zGcHZp5fVIX3q+wleQ6nmbHWGkV4TUftEg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.430-beta.tgz_1490128815021_0.6829565691296011"},"directories":{}},"1.0.432-beta":{"name":"meetup-web-components","version":"1.0.432-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"20fd3a4bb1b3e0e02c26212de019d2acc4fb7116","_id":"meetup-web-components@1.0.432-beta","_shasum":"0b9c13202dae1129c443b949ebe43e88c110a6e6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0b9c13202dae1129c443b949ebe43e88c110a6e6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.432-beta.tgz","integrity":"sha512-XkRzy2xN3tPLoJH9FqZBd8ThFwcNWB0d7zLUq63PxYh1ZKgiEuD4zd6yHP3zQ1ApP/B6IkNL1lUQ9HU0fFuT1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIErVhpHVGhYVHpdoU6Pnk27L0GTDpckaJV3wEyja6M0pAiBROzPIzhXQ5XR7eBRZDk4SFPzzaFezwjHLbYb9eM+dDQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.432-beta.tgz_1490134425045_0.20219180872663856"},"directories":{}},"1.0.437-beta":{"name":"meetup-web-components","version":"1.0.437-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"a1484edd9af0759ef948e39c7c70c11c50ef3608","_id":"meetup-web-components@1.0.437-beta","_shasum":"8decaac571efbc7e4ed97193fc7a1126551bddae","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8decaac571efbc7e4ed97193fc7a1126551bddae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.437-beta.tgz","integrity":"sha512-RFi5K+s8vrH7kTSBTympmW0MdNvOThbO+tSvTTm9cPZeR5YGSbtOy4r2eQtQIhoMAcU2jhcwBNFcJiB98TaQmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZG/YHVf0ntAmJSNRaz6q4vsmqFIzlegMuswdVjNqHIAiEAjVyvIbJ3GxkL9pFXmoIYhEG19/RhPD1pGsVHqOsXPX4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.437-beta.tgz_1490141815815_0.6728570244740695"},"directories":{}},"1.0.439":{"name":"meetup-web-components","version":"1.0.439","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"959c25571167acc52a9fba81e36e02daae5fb3f8","_id":"meetup-web-components@1.0.439","_shasum":"5c8327a4d41c19a65699e6c2c87e4381b21a8bb0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5c8327a4d41c19a65699e6c2c87e4381b21a8bb0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.439.tgz","integrity":"sha512-wWDE9R/ne/JP8RROUySHzV2XZB4PKXWRDUSSaJPe+Q835L/jo35JkMuXH+2m3mKiy5z9D4a2LZwnHOMRrf9bwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCNfeUQ6BL14UzEXbQbWvm43Jya6BdVFjT0wxwDebh/AiBY25MdYZ75m5TkGC8W4JUoVvf+MaWDUNLm8wBhR6vZZg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.439.tgz_1490142341682_0.13755919318646193"},"directories":{}},"1.0.442-beta":{"name":"meetup-web-components","version":"1.0.442-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"d06cb39133d85a98993600b831e9f06f0cd7ae3b","_id":"meetup-web-components@1.0.442-beta","_shasum":"1add11978a6c8630ef14dd7af0691c705f20ff1a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1add11978a6c8630ef14dd7af0691c705f20ff1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.442-beta.tgz","integrity":"sha512-hhu4INN/EMlqMIpheTxSj8dwJkTFkIln8iP9fJ6r9AlDo/HJUPqQ17gpkwpYXjgOkQBifx2IgMYuecfwfTELRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuR4h686Ng143YPRLdi0EsmUfk70we8inXgsSFfTpcTAIgeiqjbsRhOEEsGHRJL/qAmOMZlS0J5VDpjIsvyA+aMbM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.442-beta.tgz_1490143118606_0.8383466706145555"},"directories":{}},"1.0.440":{"name":"meetup-web-components","version":"1.0.440","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"8863f0e46e02985732d3babed261d4c1fdceb1f8","_id":"meetup-web-components@1.0.440","_shasum":"396de3656802033b0384f715d3d322ca74354b68","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"396de3656802033b0384f715d3d322ca74354b68","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.440.tgz","integrity":"sha512-NaOg0bgYF3NXUl/V1uYO3FkfX+m345AzzCWuhHi9iw8O8uzZjg27ooubfIRftCLdRxzqFzbue95auYRSxkrx/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCc+35+lBB3vnSAGH4PFMuPnqLEyILwszhs8BSXGPT7hgIhAJpfX/Gtndvz2i4pMRvXI+7FdZpOHWgcVo/M8Ro7dGEq"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.440.tgz_1490143188216_0.05678716488182545"},"directories":{}},"1.0.445-beta":{"name":"meetup-web-components","version":"1.0.445-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"8b1295f97d626dd61791c41a8bb2c9cd35e5a7e4","_id":"meetup-web-components@1.0.445-beta","_shasum":"71e6e6a2b39282cc5baddd8a327474440ee40019","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"71e6e6a2b39282cc5baddd8a327474440ee40019","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.445-beta.tgz","integrity":"sha512-y8w9+bHvVtS/a3AQNEhkUBXC7VFwOuKnczFVfm78ndGKl1chSje3gPNU7KlaNF2ihWZQLZsvacvSM/L9nVTewQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0FvJumxVflvXD3/bLnrVi/u0eSDBUxVkg99BOVgU+aQIgXyuwBpzxp8ka4gSTo/ZCy7EL/4GF4reVaDUv5l/on2E="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.445-beta.tgz_1490144108322_0.683341620489955"},"directories":{}},"1.0.448-beta":{"name":"meetup-web-components","version":"1.0.448-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"df66ec2e201e7f08e376732e8565cc32871ff8ba","_id":"meetup-web-components@1.0.448-beta","_shasum":"5a157a1d36d8030f7a141cef2d2fdd864292ee8a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5a157a1d36d8030f7a141cef2d2fdd864292ee8a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.448-beta.tgz","integrity":"sha512-dRDJYtHd0PgLi/UsFvg68svA7Rn/brmUGpwvBzvVRkQEWcKT8cLC9qbegMktxmYcRp6PNV4TLTkCH0IgK/glNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICpP2d4oEdozZzCRmvRRGKYoqHIIMhtYRNXIFNpyCJRZAiEA2s18pGPk3M7K1MAirwmAUbcmvKVocMZ1FvPtMdDjYtw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.448-beta.tgz_1490144554212_0.8907875877339393"},"directories":{}},"1.0.451-beta":{"name":"meetup-web-components","version":"1.0.451-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"92e528d7bc9a54ddf382f96c17a93cf565f891d3","_id":"meetup-web-components@1.0.451-beta","_shasum":"9c91103e964f3e3a9de3d268162aa2fa563d59a5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9c91103e964f3e3a9de3d268162aa2fa563d59a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.451-beta.tgz","integrity":"sha512-fxaH9DFKQTSPLZoLj0LrhkHu7lNlbga/4DL57oFBkCQh2egBfU0ovjp6OqOycYZ78qpRzqvkbGKtqH4sIq6GGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeXxC/uoH0TZxMPQU+pObm9bNl8DN6+lg8avSFaCqjUgIhAOjLkEXYiUKyZIFACmDYKVT5nQIPGO7JPkRmFUTFJu31"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.451-beta.tgz_1490145797446_0.9305244258139282"},"directories":{}},"1.0.453-beta":{"name":"meetup-web-components","version":"1.0.453-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"6dd7f17a42ee97bb3c17f9c4a1e16a1905e3c2fd","_id":"meetup-web-components@1.0.453-beta","_shasum":"c1101857388cb771f4c21224981a9c1eb0cb76c8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c1101857388cb771f4c21224981a9c1eb0cb76c8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.453-beta.tgz","integrity":"sha512-0PFqZFbllaSpyW8R3QN8QvkCUQFYy2pFh6cUY2Dp+AehKmajGdAW4Dlf40anm821TgqxQKn6xvDljXl8BRKSRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+QmkgmSCxB2NM3JJLft6jELPDa19jChu2T/nFRJQUswIgFwMb3RL0dlFdLcDZlL+9MCAhTyB81yHpkmKXWxbwGao="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.453-beta.tgz_1490149578951_0.6109393858350813"},"directories":{}},"1.0.454-beta":{"name":"meetup-web-components","version":"1.0.454-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"233682405dead20943ca00a7517147e52806e6d4","_id":"meetup-web-components@1.0.454-beta","_shasum":"15e63264bbb153db5d991408ace6afd6c10ef141","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"15e63264bbb153db5d991408ace6afd6c10ef141","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.454-beta.tgz","integrity":"sha512-Ktnc9S0cKk2JGO4MhudfAdSrYQOLZ+aDoPfvHVxjCA6Hib2g/228GM/wImH2pVQBWxyfippxZ8rkzwYcsQfs2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCepECAIS0gh+k0MH4pb1neo3CakOJa8syxIqkwoQxx+gIgGo8o0ASiPBFLH5wtrb5mVam1C3BTivMN7pOopl51wfE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.454-beta.tgz_1490150428710_0.33683358947746456"},"directories":{}},"1.0.455-beta":{"name":"meetup-web-components","version":"1.0.455-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"d817e619f68cf15c2244ac8384d9d8a45bb57eaa","_id":"meetup-web-components@1.0.455-beta","_shasum":"a549e3109424208d898dc292318561e5f3c1e2f4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a549e3109424208d898dc292318561e5f3c1e2f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.455-beta.tgz","integrity":"sha512-3B4IyNcry5G/0MwytnJ9xkbv7zAqokxRP5av//k+pPLMCWMQL+mQVNHlq5eO0kJPg7umYxhh07tWh1vdHebJvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmCfmeoOfQsfMjs2Uw3N7X2acJDp191/1vREec85f5bAiEAyrN0X9wJBXJabHavoBDxrrEQ8JlVwQqqWZq1IntzHH8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.455-beta.tgz_1490152898241_0.37677353504113853"},"directories":{}},"1.0.456-beta":{"name":"meetup-web-components","version":"1.0.456-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"1c78ae96a8191027e44ae2608d84bbac2f27cef6","_id":"meetup-web-components@1.0.456-beta","_shasum":"1ffb5b788e6d3d1788dd52803e752079aa22fe27","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1ffb5b788e6d3d1788dd52803e752079aa22fe27","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.456-beta.tgz","integrity":"sha512-wOvZFrH6NJMDiATIwjp4h8CdljjhSdw/rg66Iic8TLeW7FEG6CNrcRRpYA/NKejEUCq3DKchzvqVPk2tJ/+NVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpapW3KbZ1o3gZvLIhJtkp3x9w+jMoV1mqEQNU5eQbxAiBX7Qq374ZfE1oDlMG3c/FZ1tTzSyLf7iZDPgW7akZyTQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.456-beta.tgz_1490193457248_0.9321553446352482"},"directories":{}},"1.0.457-beta":{"name":"meetup-web-components","version":"1.0.457-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"329b4f3b4ec3854ff7d497a99fae664b7c83b62f","_id":"meetup-web-components@1.0.457-beta","_shasum":"6e19e9b1da02d9bfdca5da700c06ff9b3826bd47","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6e19e9b1da02d9bfdca5da700c06ff9b3826bd47","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.457-beta.tgz","integrity":"sha512-o5gfQEZDOjG1X15PZCvkCK+h6ge0BTSxDVhOAOIRVordrs4pAHpuMr84VQVPS/3YIpEe1i+dgTbRteCP/ajEhw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEA/eKmYc4d+7EqiQ69Tfx/ZSHEwmkkTJU4kwvKST7qnAiB+p1+oBi5UHWyPb5PedX7tvd3Kvx0TL/HI+RQ9R3aq0A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.457-beta.tgz_1490194907979_0.38664014148525894"},"directories":{}},"1.0.458-beta":{"name":"meetup-web-components","version":"1.0.458-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"20834a656bf281aa2fe750b44a2425cf0a2880c5","_id":"meetup-web-components@1.0.458-beta","_shasum":"08a540effc7840e987a0d4162c34e99881336c4b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"08a540effc7840e987a0d4162c34e99881336c4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.458-beta.tgz","integrity":"sha512-Fmbtj2SgrdF0tR59w3i0BpKp/bjTzbM/rztSOCJGGDgH0Ms0wSu++O6RT2HAp+dyGEwive7THHBVUOP2GTFfcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkMtBUiP4U7VhRV1Cw32v13ELS/mQSZi3cNJw5LF7n1AiEA4hHIFf5tEA84vxpB+xKii+PIDOtf8FqYo/WnB/sHxss="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.458-beta.tgz_1490195430288_0.003271829104050994"},"directories":{}},"1.0.459-beta":{"name":"meetup-web-components","version":"1.0.459-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"1f5c670f182e6f4768b08707ae28a82182b6f8c3","_id":"meetup-web-components@1.0.459-beta","_shasum":"af6556e2e25637c9d72792f0e66350574389b542","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"af6556e2e25637c9d72792f0e66350574389b542","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.459-beta.tgz","integrity":"sha512-HIY2p/NCzA9wsnxuL7sJcmaYMevrSO9vSV8GJtBYUPUS7cvHUwnNohLDmlhIWcHpbvjFLgICoXdKM5BitXL7hQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCwTI5pzPbZfowz0zwKI+Pf7ivr7z/jvlhIR73Eu3vVgIgDi8qwWywzBf3U5S+uXf89TJ/m9Kcxx9+2JWKHJOI3Hg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.459-beta.tgz_1490195491659_0.7256959592923522"},"directories":{}},"1.0.460-beta":{"name":"meetup-web-components","version":"1.0.460-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"e21cd0e7aa023de1d5a92ae10d203afbeacc124c","_id":"meetup-web-components@1.0.460-beta","_shasum":"a474760594680bfafdaabc7508020489254886f5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a474760594680bfafdaabc7508020489254886f5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.460-beta.tgz","integrity":"sha512-BDDoE2kDxCCs5JAkC4oPODmicra5jV7V1qpm15VWLOtGgHK0zROgB2xOx4hT/ZWv4ADDqQ5Y1l7MqL4MoX0mcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBWzKKLNJfyLRUrDD/5zSwT7GI/SXUqfJGDki2ALrH/cAiEA0eoGthmzS/GcgSGQ2a8TYclLjIuG5Hk5tO+0PcQETTQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.460-beta.tgz_1490195783073_0.33312948187813163"},"directories":{}},"1.0.461-beta":{"name":"meetup-web-components","version":"1.0.461-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"06e8162e3a63561496ead1c6e84556af0ddaf31a","_id":"meetup-web-components@1.0.461-beta","_shasum":"0f1a9b743035a5db64205c6020a8f87bac8464f8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0f1a9b743035a5db64205c6020a8f87bac8464f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.461-beta.tgz","integrity":"sha512-1gVOHcKy4+p01D8h9mMMz3+ftS1hjKE0dFVpq/3DmmiY3rQia0Di72BngbzfypVmsvQ0UNu6abfmxQYZVVCBPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeeSgMk7mvs1HlXCChW7kxzc8xpvYu7YfB9dQwpUzYxAiEAmDT3qWiXmuf2yWLYNENRdV8vzt3r1DcyavIfI7m/zz4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.461-beta.tgz_1490195838377_0.20721014076843858"},"directories":{}},"1.0.462-beta":{"name":"meetup-web-components","version":"1.0.462-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"7121d6c6cbed51cfad31ec6be4f1227eacd3adde","_id":"meetup-web-components@1.0.462-beta","_shasum":"6eaa87c4212c6d6e85d5b7aea60ae0c20a1ed37b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6eaa87c4212c6d6e85d5b7aea60ae0c20a1ed37b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.462-beta.tgz","integrity":"sha512-DdJ42v3egI3M62VzPAeFzqMfg4k0sv1+iJbxyJwAmpCAqcMjNTTtHsJEBMHOIvttmHcM4bPCsQxVWHR+PKBVlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICq5ggA+E1nXnFwZxrM0f4iCx68bwKVjq71zFNhecZ95AiEAy/95g9gqHgnPKXZnCdMQJE4CvPRYop0kRlH/N9v0ET0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.462-beta.tgz_1490195966089_0.5273857288993895"},"directories":{}},"1.0.463-beta":{"name":"meetup-web-components","version":"1.0.463-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"7f64c9ee1eccb1f48a3c02cb083900e54267d18a","_id":"meetup-web-components@1.0.463-beta","_shasum":"b6d2c8f0651c5720ceb0ef037e30890f5478e69f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b6d2c8f0651c5720ceb0ef037e30890f5478e69f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.463-beta.tgz","integrity":"sha512-TPmMOUI+gNJcZdJN8jpAGGQ8ZHLloISA/p+0C2zV46TJjRJjeal6xpWT6O1b3PYQxXBX8w66i81zGAtgfMaNVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF0ObKw/e3T+wESvYTKpMx/aR7FdFuIUWW7iK+P2LM3MAiEAh7XY/cr0jj3LZ1jU9jZse8O82HUVJ9nls00VDZDxadI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.463-beta.tgz_1490199755258_0.8330023169983178"},"directories":{}},"1.0.464-beta":{"name":"meetup-web-components","version":"1.0.464-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"c84f616c6d888cbd93699efd4e0650e82a780170","_id":"meetup-web-components@1.0.464-beta","_shasum":"54fa4e487b884032383dac0979f5e4a3f7ab0548","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"54fa4e487b884032383dac0979f5e4a3f7ab0548","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.464-beta.tgz","integrity":"sha512-fCIntaVysZ33AMoIOWGy95C7VxYbqeYmVXrylo3E2wEL3JKe+BrG3KU55vstheLAK2FKPkYOjr1VYR5J+uZg4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1YYbIBEOTYw8G0X357PHgS/kMGi6ibKoFNww5SCy3WAiAM+F1z/tdixr8tugaA5hHc5GQKut448pusTMdxd0GZyw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.464-beta.tgz_1490200237346_0.6676457715220749"},"directories":{}},"1.0.465-beta":{"name":"meetup-web-components","version":"1.0.465-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"dependencies":{"base64-image-loader":"1.2.0"},"gitHead":"e917aea92d2176b6878bdcd51db27dfb493c01ca","_id":"meetup-web-components@1.0.465-beta","_shasum":"f9da61c4687384002d2882134f27369511b7ca89","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f9da61c4687384002d2882134f27369511b7ca89","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.465-beta.tgz","integrity":"sha512-gXINB4bFNxgODTRTK4IOQjWK3t6nCsrkazd0ivAMSuugpARc45CtQtRnsUwYN/j+ps/O1pI5YuXEpoIF5nvtHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHoqwoLhHua8KJdoZyZJWvx74xA00inH6TEELsLwzZOUAiARcmsOu3XiO3XogJmtwW9Xncir80HwtnRz1aJUZCvbnw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.465-beta.tgz_1490202874112_0.7849210423883051"},"directories":{}},"1.0.466-beta":{"name":"meetup-web-components","version":"1.0.466-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"b38e951f8057ffd28ba19908a4250c38ae71e7d8","_id":"meetup-web-components@1.0.466-beta","_shasum":"be1102ce9ff73b74421e0640cdd36338295be4bc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"be1102ce9ff73b74421e0640cdd36338295be4bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.466-beta.tgz","integrity":"sha512-nf/tkAf87jSrIfWQOuZFqhDhsWKdadoTJsvcPluzJeBjDNilXxLTZwa5UN4Nw7M28WDqaD5bfYDetLvMH4MSDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUiu742j3lz/4M68k5agzaLiBho0QEpcuKYMeE/2eOQwIhAKxLKZjQlsV8Kobj4h12vUv6UgqyYRdmTsmJTAcysO9o"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.466-beta.tgz_1490208107242_0.10114858811721206"},"directories":{}},"1.0.468":{"name":"meetup-web-components","version":"1.0.468","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"cat coverage/lcov.info | coveralls","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"c5a4809aa6498176a4d33cae4e0f093c16caec46","_id":"meetup-web-components@1.0.468","_shasum":"722b217c55e07265eacc6478681bfdbba81ace20","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"722b217c55e07265eacc6478681bfdbba81ace20","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.468.tgz","integrity":"sha512-d+SHfpty3IDzX0UeXlJ8M6Kmnl3iweqiYEIh3bsfzuDrUG1CVF2PakQcvmLp24aiC5Zg4SoikHXhCrBDMNwsxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF9x41daJmZyzBWNs162H9z0nXV7m6PuXmXTDrbPtnLJAiBHtI3qiVH0xYwNCYOkkUXVNj/KMOPn+fNpC/v+oBDcxg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.468.tgz_1490213452121_0.6711363464128226"},"directories":{}},"1.0.469":{"name":"meetup-web-components","version":"1.0.469","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"ba6543313f3a020396fc8fd2a74e42a7b27ea673","_id":"meetup-web-components@1.0.469","_shasum":"e470c02a789e1b662e84823f59622fe09d30212d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e470c02a789e1b662e84823f59622fe09d30212d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.469.tgz","integrity":"sha512-GaD2e6X96/MnCYnAfJEfiU+/cJpwBSZP9Ygw4gP5Gm9+SOdFGo17iXSkJBVS2nFSEmJBxTHkIEKYAC3aKfh/pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC90dKJ28hutMAP56uDN7IbwL2MCtPPRnU8bO9GbzoITAIgVyKzJxQthoTg7GfpXWjSaROGJWv4bzZ67YmT56AZ7kc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.469.tgz_1490215603352_0.6635472557973117"},"directories":{}},"1.0.472":{"name":"meetup-web-components","version":"1.0.472","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"c1d66cd90bde984dc887d999fca1b8c30f6c8244","_id":"meetup-web-components@1.0.472","_shasum":"e78e19eba31c2e690503dbd16cf40d0f2a91e5b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e78e19eba31c2e690503dbd16cf40d0f2a91e5b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.472.tgz","integrity":"sha512-uR3Ks7DAlbooGrO3XvFLuMHj0TS8ryS5wXdoehWeChf5sww6S5BvJ5GjOvGOz5OIdXjXE2BgxPTxIuYtT100ng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE4bb1QywHxaxr9FExH8dYIIwPe/xo2fowttv0zPUOEqAiAz2rHAOTTtWIWGboqa/Qqrgm0X2MBUNZ59atw7htVvFA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.472.tgz_1490290627417_0.6530188985634595"},"directories":{}},"1.0.475-beta":{"name":"meetup-web-components","version":"1.0.475-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"4d4f6286bd83dd56394dbc4600350783c407702d","_id":"meetup-web-components@1.0.475-beta","_shasum":"c80600cdce7124e37bd8904a9ab57b554fa04353","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c80600cdce7124e37bd8904a9ab57b554fa04353","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.475-beta.tgz","integrity":"sha512-vrtolZ5q6c1QlXFtHj7agyQKkt4m8TVVTRXlgQ7EmkjIG9u1meugLIWdSBpEnCfWhWh7cCffT5N7R6pAFZ3dZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGzQeJTLFTZEaO+sp3q0A6Ukyq0CSmXcGKr8VlJ8BGqiAiBXdHAwbXLmtSGuOV+U9pqZDhwyxB1QqjVq/dw1DSjEOw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.475-beta.tgz_1490296981251_0.5256467116996646"},"directories":{}},"1.0.478-beta":{"name":"meetup-web-components","version":"1.0.478-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.1.9","webpack":"^2.2"},"gitHead":"4d241cd0be4ae61549206c3b3201789d3f16bc53","_id":"meetup-web-components@1.0.478-beta","_shasum":"ff24fbe710cff824dc67dfcd13506f43b7732772","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ff24fbe710cff824dc67dfcd13506f43b7732772","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.478-beta.tgz","integrity":"sha512-vp+G/Jfi3Xqf+qOAt2zT45wsUXj1UGsJRrfw0rlHFJCbVclavHOsZULcq3CFbF0wFO5bDLcLcPCOK3mjfL3tbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG4IvqF6wJWbto8/ZzDRhbbKLme2Ud3kTorb4GzfUS7TAiEAvgkp3RPkTcO83nJAqAxXZpu3+APSpPetoCBSa8+SqMY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.478-beta.tgz_1490297333074_0.3761108967009932"},"directories":{}},"1.0.480-beta":{"name":"meetup-web-components","version":"1.0.480-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"28225864e9e2385fc0a05d9201ed79572b354fcf","_id":"meetup-web-components@1.0.480-beta","_shasum":"6e209305f44a1f9b39a040cdc541d24a8c503d41","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6e209305f44a1f9b39a040cdc541d24a8c503d41","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.480-beta.tgz","integrity":"sha512-/HTuidFJ+fTuwQVpI++mExiI99K3lA9pUaVFve8SEym/jSDyun2UX+c27vW5uUnSQSb/QMHzld1ZCZY2l1TpLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYEpl6ReLCmugXB/m4v7BYupWzMCJzp86pNoLNu42cJQIgJmhU9O/9cpvFzlYZ0EgvajVFzSsuSHWHK59+u/stdAM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.480-beta.tgz_1490297995185_0.8760618714150041"},"directories":{}},"1.0.482":{"name":"meetup-web-components","version":"1.0.482","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"bbfa21a23ca45d7a98aec97afab18a7db43a5e30","_id":"meetup-web-components@1.0.482","_shasum":"bb93fa63a9bc7c91395455205d2631d3e763f5d2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bb93fa63a9bc7c91395455205d2631d3e763f5d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.482.tgz","integrity":"sha512-sXktg5Y8lZzFIq/nMXbUtDICr44/B/F8N8YkfgOoKhFXRgO3MuHq0Bd7bpx+zNJW2+9DaIuyUrhj9Q5hBvC15w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDu3QJtrnEEbs3uOx+2w2kEK4RROarOCKDCrhde2NKwDAiEA4UxoPw2sBKVB2eB3PhQptQO7ey+ROuLAcHVm9UbaTgk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.482.tgz_1490298254305_0.5594801702536643"},"directories":{}},"1.0.486-beta":{"name":"meetup-web-components","version":"1.0.486-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"eceff9a03bf5ca89d624c55be72dda122e6892fd","_id":"meetup-web-components@1.0.486-beta","_shasum":"0b547a4d4e4236c3296449e171d32867eb3831d5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0b547a4d4e4236c3296449e171d32867eb3831d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.486-beta.tgz","integrity":"sha512-GpYsDniibUzHMX534418TYqLR1CE6BVKA7C7afPuXOKB9cOT7vwJe70UG/3Go/1G+eTNUAOuOAsg5GAogCV7Nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSeu2ajA5ZxKw52u6Ek7kim6a/uU61IEupEdVNCi1mXAiBAPRk0dBHqVdgEiVzb0hw5hOuvSoLjdIpJEZGyt7J/Lg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.486-beta.tgz_1490301519234_0.0662654866464436"},"directories":{}},"1.0.488":{"name":"meetup-web-components","version":"1.0.488","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"e9cc1c3871ed61b70654369144dad7efe3b45754","_id":"meetup-web-components@1.0.488","_shasum":"0e752d6b4145525326136e6f1d13a89cedd322e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0e752d6b4145525326136e6f1d13a89cedd322e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.488.tgz","integrity":"sha512-feo26aScg6uy//CZu1ZTP0uV6Xd9k4yfDtl84/y8hTAXnYkxUcsBiGbNn0XYfZ11R5xLVI6rhFOmEPQCE2Rl9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPKeHpnStiuB/n6ZOH7c1lzOtKF3wM9QGBYKcIxSZCCAiEAw5PJ1pqVXe/jvejkSMgeTcJEgTUnrTz6wlOYOY3iDd8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.488.tgz_1490302227586_0.08060070872306824"},"directories":{}},"1.0.491-beta":{"name":"meetup-web-components","version":"1.0.491-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"e72e28ffae9a58d9b10fb60e1ce3ddd401576473","_id":"meetup-web-components@1.0.491-beta","_shasum":"f5ccd478cd2eda30ab5c76083f732b086708509b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f5ccd478cd2eda30ab5c76083f732b086708509b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.491-beta.tgz","integrity":"sha512-GerlamV3l9L+4787E4+svziFRwSzOPK6rdKlYYPmnkeeIv1UT3Ok3kMFmTpFmJTI5Vh51NkStDVlqpbK5ux6rw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+AnKrCGca01Vo8Z3sCMD7VvzakwC1ORcdHvWFQc1WggIhAMdJeFr+tmEhjaeSLKxY5Gi+792W8iIUGEw8cg8N4Ygu"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.491-beta.tgz_1490307458256_0.2970785528887063"},"directories":{}},"1.0.494-beta":{"name":"meetup-web-components","version":"1.0.494-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"7246b6bc395c0009d620854b312d417330a10c44","_id":"meetup-web-components@1.0.494-beta","_shasum":"1d9de2f355b70e6077c0bc7eb954fa56c1dfb098","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1d9de2f355b70e6077c0bc7eb954fa56c1dfb098","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.494-beta.tgz","integrity":"sha512-yDf3c28aCLJI0fyxUhv1sMkYQgTat7KHVAkBgFO+LcB8xu2JNVA9GLZlZItapxOr+qHBm8Rb7ttu7yBmPHSmLw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpuTLkYvbKTS5XAcczvUTmTs76bp7EYc6GcBfsxRsjzQIhANOIJjX70P8M8aNkuVjK+/MjsBReaVpSRRK4srdPHYj8"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.494-beta.tgz_1490310996388_0.3839200488291681"},"directories":{}},"1.0.497-beta":{"name":"meetup-web-components","version":"1.0.497-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"7b6bb856707071c6068ea107541aec99f7f0cfa7","_id":"meetup-web-components@1.0.497-beta","_shasum":"c87a099bc70fad7486b828753bf6f335c7068448","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c87a099bc70fad7486b828753bf6f335c7068448","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.497-beta.tgz","integrity":"sha512-0TV0LukcVNLkdWWDfPzaaMvWzGZlpP0EuuCl4/77llYyu9zlAJFpN4l0EQGjlcuLexr42BLkMtqBhG7IM8mzZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwjz82NGwwHmWM1R8rGRlq2SIytwWhemwv4fJXrA1gUAiBAZBlotXs1Vid5f7mVDTofo9bXqHYvvVJyFv/3JJ6LCQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.497-beta.tgz_1490370251758_0.48203921620734036"},"directories":{}},"1.0.500-beta":{"name":"meetup-web-components","version":"1.0.500-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"6b44851cd17286a09ccc2323c1d662b0d4b73e91","_id":"meetup-web-components@1.0.500-beta","_shasum":"89b9ab484ed552cefc74d6561af8cb0093d35eaa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"89b9ab484ed552cefc74d6561af8cb0093d35eaa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.500-beta.tgz","integrity":"sha512-YzwZsRLBuILrcmmh9DL4HLomIwJKf+WU5FIMXZsm4w1MWgbgcyjLJKN+1WnGeMo48ujspAOoFe62fu7wS8mZYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBx+5GpOfMNjlg7uXNTC+wit1XcLhPpNASATiZDrRPsbAiBjz7wiWkhX61HtQpwsO1V2w1CY6r7pUyGnZlJWvtMyDQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.500-beta.tgz_1490372643965_0.8294865158386528"},"directories":{}},"1.0.505-beta":{"name":"meetup-web-components","version":"1.0.505-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"560dc7dd09c1d4336d4f5c2de016e63b80f0cc12","_id":"meetup-web-components@1.0.505-beta","_shasum":"47f7e23b3e62ece5ecdf5054ed249b64da3f829b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"47f7e23b3e62ece5ecdf5054ed249b64da3f829b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.505-beta.tgz","integrity":"sha512-FbtAhS5jHfnSk53ALlL4Am/N/gIC3oNAzNDFLGQZuFa5PCNjhexJ6/mwXkDqixmrgNitwYasb2JxnJK/3oI52g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB6DSlHNeiiYsh4vx0FAlpAGWglOrlymA8W2SJOt5/QnAiATUEK5KTX2Y9G+PHe6sfbldEFG8DtSaXNyXZkfGOh31g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.505-beta.tgz_1490383127750_0.9986872032750398"},"directories":{}},"1.0.508-beta":{"name":"meetup-web-components","version":"1.0.508-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"7a460d453693ffddcc54c6a017a74e3066c08771","_id":"meetup-web-components@1.0.508-beta","_shasum":"13727b336d391ac498a5a8e168183b282ef8a1b9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"13727b336d391ac498a5a8e168183b282ef8a1b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.508-beta.tgz","integrity":"sha512-7a3EKkifBQrUFMiPj4zWeJ4JyZOlJWgMytP+heCvgq3aJgzYOPDyxcW7Ux1HE10hzobt0KN47OiroKwRK+cP6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG3+FG6XhxmQzVbzBjZegYVNB5oKfNaqzi2Tcz67vNklAiB0OfLdtmTBlOygPsdA7TyR2kkI+fec/uwaBFXh9MRtTA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.508-beta.tgz_1490384167016_0.1665659169666469"},"directories":{}},"1.0.511-beta":{"name":"meetup-web-components","version":"1.0.511-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"835a2f1b54b9f5e6dc5a59a205bf3dc5d0cfe349","_id":"meetup-web-components@1.0.511-beta","_shasum":"2b86c6d3fa5298810390ed3f0c3ad82c5ec8db84","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2b86c6d3fa5298810390ed3f0c3ad82c5ec8db84","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.511-beta.tgz","integrity":"sha512-SjYvcYpwLtWgCNJlxMcIN9FCaKcsiIiE0nGAJLk0hkywCfQ+swQqKZIH0oQM+4ArIAspiOANU084DR0RQ4uSLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDgkWZe3g/JACF8Kbt7wNhKJrC3cKZ6OJezX46uhre07AiAYaKN+FW+ygW3d7qCDHX/Et8XzMx8Ww2KLA8OpjIgtQA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.511-beta.tgz_1490629172960_0.47240600688382983"},"directories":{}},"1.0.513":{"name":"meetup-web-components","version":"1.0.513","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.3.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.17.1","eslint-loader":"1.6.3","eslint-plugin-react":"6.10.0","husky":"0.13.2","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"0.1.79","node-sass":"4.5.0","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.1.0","swarm-sasstools":"1.2.10","webpack":"^2.2"},"gitHead":"7a950c2a5f781a11ce0a014466d1160e755b747a","_id":"meetup-web-components@1.0.513","_shasum":"8ef933c7f0449c7e3baf93254faf99592fe391be","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8ef933c7f0449c7e3baf93254faf99592fe391be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.513.tgz","integrity":"sha512-u9Mj7G4OL6s/zMgbKKUezMMKAnDMsGC0rKrUwLDD8z/uKfsG0McS+YQDULOCoiff4Hd0jyPzbN+8d2PmZgtPoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHu6LAq8Z2zhBk8aDqY1o0+it+X+KjzNPNq5e3mhHujOAiAodriB9QwSCm1kInAz2fNiIJ06AFKj01C5Vlb7fg8iOA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.513.tgz_1490629498694_0.5533161719795316"},"directories":{}},"1.0.516-beta":{"name":"meetup-web-components","version":"1.0.516-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"929c6d053496595bed2aea9a7eb15aa5f81ad483","_id":"meetup-web-components@1.0.516-beta","_shasum":"c583700e95e19da00da538d8d6afa4c0c8a79e60","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c583700e95e19da00da538d8d6afa4c0c8a79e60","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.516-beta.tgz","integrity":"sha512-8530O6KgSHFOqSfw5V3X9Wi2LnBnFoe6/PCr+h4SI4g6udPQL3Sw92DcaZb1gcS3JULTUzHSkMFuX6bXN/pT/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZ+iAnV7fQt8E3e7ATQdqMEP0T63zBWJ/q5BtypQc02AiEA719s45WuFJwKMPA+kU8BgFSBZG/KNrxO7ei0CmIOhak="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.516-beta.tgz_1490631835140_0.1311465527396649"},"directories":{}},"1.0.518":{"name":"meetup-web-components","version":"1.0.518","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"39796acb0cd9e215213938c758ee94b393a1b935","_id":"meetup-web-components@1.0.518","_shasum":"6e741ca660029a5201e423706f506425dd930752","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6e741ca660029a5201e423706f506425dd930752","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.518.tgz","integrity":"sha512-D0Dzi+099eZLIsHxmFxnx5ibf/K0FYBoo9jBhc+Mx8fYzaMWL1XdeX6auLoQC/QS8yk6BlTQaEC7fzd5vr6uUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHb9hMA0pEOrVeVAZbzi06kkH4HWmSoLfE2VnVpnHr9nAiAaM5IQS82Q1kmWBxSyIhP2W4U4G+/0dIOd8rtgIpxf+w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.518.tgz_1490632066053_0.14245384046807885"},"directories":{}},"1.0.521-beta":{"name":"meetup-web-components","version":"1.0.521-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"adef936bf4a6851f812de79e6a0b556bde23ac31","_id":"meetup-web-components@1.0.521-beta","_shasum":"45a376c5da20b4312e4ae3dea28c64ce79e21245","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"45a376c5da20b4312e4ae3dea28c64ce79e21245","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.521-beta.tgz","integrity":"sha512-l/ivmqQFbBkLSsABXK8lupeBIlfWrj9U8qqE9Cpq69tuQkDYiAisaGIGQ3EDkhR1lsAlrNksS3MCaCyihCmwKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAUDefI1gL9S8vvqCNGqfLRcmYwfPkrIy75asSmxBFuAIhAOlgavpbpJtC8DlH0bRap530ki5UQj1532Xzo5mdNJ5V"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.521-beta.tgz_1490632366771_0.15138648077845573"},"directories":{}},"1.0.524-beta":{"name":"meetup-web-components","version":"1.0.524-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"666059c6fa197d264bad688c62cc45b579691eff","_id":"meetup-web-components@1.0.524-beta","_shasum":"7d1dc2828db00c080e731d5a1dc39f39da767b30","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7d1dc2828db00c080e731d5a1dc39f39da767b30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.524-beta.tgz","integrity":"sha512-abHXPmsEYKg19S/O3BPNcM0byJRAj2FYorFwhIG9iRItFEEWCjOLtvS7zcYyKttBEfyznVjduogsmYBTHDanmQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmh0wRs36GUIemdFcWhYqBkSBkgybx/YNvKqxrXjG54gIgP4bgrqY731E+Z/Ye8TgBCAGQzKCDOkThNYiVCfRPbO4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.524-beta.tgz_1490632694521_0.28418724657967687"},"directories":{}},"1.0.526-beta":{"name":"meetup-web-components","version":"1.0.526-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"89caf196a6a9c4a2e7c72a21d468d731c658ab4a","_id":"meetup-web-components@1.0.526-beta","_shasum":"0fb7a1031f0609af54bf2d222cc120faa040287a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0fb7a1031f0609af54bf2d222cc120faa040287a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.526-beta.tgz","integrity":"sha512-V+QpaWAB/owB2YBN6uOsv/2LsvZUJp+I98FXFlFGvyhPXulRPBYlM7mX+IJqntU1MLKFFJBPlUM57otmgsQd6A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBWq3adIjdWeCoHLjYcVfQSrTVh5bfKnvJgwfmyE7EDgIgU4hueREqIH4UZwfQD2TgUPDQagMSFeyQFcURRHrZMbY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.526-beta.tgz_1490638585911_0.9554668604396284"},"directories":{}},"1.0.530-beta":{"name":"meetup-web-components","version":"1.0.530-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"fda037d6a151ca6122c2583575a5f598171593ba","_id":"meetup-web-components@1.0.530-beta","_shasum":"72d0f33608d25034611d7f4cfee5f13806473f1a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"72d0f33608d25034611d7f4cfee5f13806473f1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.530-beta.tgz","integrity":"sha512-73FdK6JikG5zn4TIrfvL1zTiRGoDzgdOXWVjQQTEzerq5YWwnck7T+iyhKxZZTQCk+1/YyK9thEkpVLqXvN/kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHk3xtuydcMQE4r2gBTYFwWBPqdgW5BuDnFAlc3TjggAIhAPpGCXNvjoR4BhJfavx8pji/gGWqm7/419RK6IF7a3E7"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.530-beta.tgz_1490639432486_0.17979305051267147"},"directories":{}},"1.0.533-beta":{"name":"meetup-web-components","version":"1.0.533-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"f55292b5bd23d23d96e3135045107bf95dde4e1f","_id":"meetup-web-components@1.0.533-beta","_shasum":"3105eb336aefeaf9cc6f4b5362b5933419d7d738","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3105eb336aefeaf9cc6f4b5362b5933419d7d738","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.533-beta.tgz","integrity":"sha512-u/SpyyhHM+I7xr64SrDyQH5laJjIFvu+/hCdeE5tRamoKF25TxUXj//txplQtSaWPDCPSh25dlm9um/n3j1VZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSDC07DSeboZUPHLzOioHTm5+dNwrU+f6gKUrT3UE6cAIhALmq0SkMhRPaJhC8r0TfAQfl79/sww9EYViVityRjLBx"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.533-beta.tgz_1490639774680_0.879026057664305"},"directories":{}},"1.0.536":{"name":"meetup-web-components","version":"1.0.536","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"e86dc062926f3508b8b007a102d286afe5d9b840","_id":"meetup-web-components@1.0.536","_shasum":"2742e1208de0f7c16cf506f3f86dea83ace6e86d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2742e1208de0f7c16cf506f3f86dea83ace6e86d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.536.tgz","integrity":"sha512-XsP1igxPZdPS33Z+AbVNsNKggOS2WStucKEokXWkbSOyQGyFH+iZlwCLAnIPQdqkIRH6Ho+3RALw7SaL3gBcLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEsKv2BJad66fE2vxTrNHZw9HNomNlOZR8+E6XDp/G2yAiApriWmUU5B9TUwB8rlp9CMj4siMFKskjNkSDyMJoYRkA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.536.tgz_1490642261776_0.7493945271708071"},"directories":{}},"1.0.543":{"name":"meetup-web-components","version":"1.0.543","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"e9c040715d8903dd818e1f8f994ad060c9f4fc7f","_id":"meetup-web-components@1.0.543","_shasum":"b22eeef7760088ce1d26f2a838a26d94ba919298","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b22eeef7760088ce1d26f2a838a26d94ba919298","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.543.tgz","integrity":"sha512-l6L2YxKR7eKua3lv9QOulOY9Q+VvVmbGwGOEnyFWB9eptXRL3NIz4RDRyLIiiI7DjU2/bDQZi0Jv5cucbmEdjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyOgAXHjZJYbIXAKKW1EO4ktZoOPfEP8oWz8610NOvcwIhAP8aciNyzhSMuEKpPOIjj5ayD0d2oj5y/tfqi4lep4Kj"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.543.tgz_1490649454628_0.3551407374907285"},"directories":{}},"1.0.545-beta":{"name":"meetup-web-components","version":"1.0.545-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"4eb80fc0cf9291490923dd02e12547becebd3476","_id":"meetup-web-components@1.0.545-beta","_shasum":"c7dc8b0066c478596d8e8e2c01eae812ecc1d9ed","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c7dc8b0066c478596d8e8e2c01eae812ecc1d9ed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.545-beta.tgz","integrity":"sha512-1XwfSk9f2gd0ky8dgCxHSJrvZOUKGyLX4UmoKhvtXAfULsDHAD26oyfEEHI51bL81JFuiSZv3tSJztt6RfzEOA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUVA2anMgooxeFYqyT3mkHRZRVcb5nDcFEcJk++8ZJ8AIgXiXMyrW1vNfc3+aR3ytUcDPfay+oleUrVZwqLvmle5I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.545-beta.tgz_1490649498140_0.9937303438782692"},"directories":{}},"1.0.548":{"name":"meetup-web-components","version":"1.0.548","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"25f634355ee44b4f0e13798bdf89780673f4a66e","_id":"meetup-web-components@1.0.548","_shasum":"846f43b87f812b4427d358ea74040d4953fb812d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"846f43b87f812b4427d358ea74040d4953fb812d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.548.tgz","integrity":"sha512-fr8i9pnOS9WEDfS3pKJmlxLoX+rqT10OmDf6KbbUxotZJeJ+MQzrAbbq5iI6n+M53j3kwtO85jeIvMvJdXlblQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB/MPWMYjUfIEodHz6l08440VAB8W0+5qPi0ELmXQc/9AiBu/JWJP90bjy9GlT2/0j78pCC/im8VxeumurbljnS7jg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.548.tgz_1490650726398_0.810423202579841"},"directories":{}},"1.0.555-beta":{"name":"meetup-web-components","version":"1.0.555-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"c357ca6a6d9e408403c00d009e98362ff5ee52f5","_id":"meetup-web-components@1.0.555-beta","_shasum":"4d015434b69a971bd0b601b737f21c856f756037","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4d015434b69a971bd0b601b737f21c856f756037","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.555-beta.tgz","integrity":"sha512-BmCncwfBvC9vaAnYqpt3FLrTu9OoSnqUN5Gb50fmI7av/jtyN8zCtbZ6jpQgFzhvkX4jWW9etfwTPEoGWNM2Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOb+hZxNg5EZxGbYXDmPioDijtyUKTEbjyu4WIx364agIgfeio8le+cDrmswo7XCFFec39y+exsoSdaYcMaAt+LlU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.555-beta.tgz_1490724332532_0.5221619843505323"},"directories":{}},"1.0.557-beta":{"name":"meetup-web-components","version":"1.0.557-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"af043b9cc2ef46d5e0c5344caf1e38cceead8dc8","_id":"meetup-web-components@1.0.557-beta","_shasum":"00908a30bb4d50bd0c1bab432a6f2790d46f3df7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"00908a30bb4d50bd0c1bab432a6f2790d46f3df7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.557-beta.tgz","integrity":"sha512-Z8ouq0rsdi8ZGWE/xaPI24/8+sAYJ/Ix8/TAl0wjhfhAl8vHV4ow/CwPMqCnvnZjsc06olSD1KY4lOzQVF47kQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG7QZVmM+LZBy7C57ix3Q8z2q68IhHoMSaV4OOvSmkAiAiAC6qvHoOqMNJF/FWBVLqAweTw/mW98gEzoxAw/tVg6Hw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.557-beta.tgz_1490730182102_0.7643446356523782"},"directories":{}},"1.0.561-beta":{"name":"meetup-web-components","version":"1.0.561-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"8f431d9145df6788368698835cf5bc76ebc4cae4","_id":"meetup-web-components@1.0.561-beta","_shasum":"33b48a6c5c441cbde6c3672ebdc4538cb155b072","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"33b48a6c5c441cbde6c3672ebdc4538cb155b072","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.561-beta.tgz","integrity":"sha512-16mWK89YP8M5VF8YvDDYL1gp4H5L2Y9gEK+eHnWYFHJCoRQDIoobJnfQGarv52Tvl0xllpWikn4vEDDntfrUVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCR5AgmAIZjqecWTsB0Vvk1KwvOSobzAHmVDKYgbSXqOQIhAIcZnxWtV5IOHQco9E4IhEndezr9EGobBvJbEGG0Uwej"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.561-beta.tgz_1490731383185_0.048826926155015826"},"directories":{}},"1.0.563":{"name":"meetup-web-components","version":"1.0.563","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"7ae9dd8da1415a7e08e368832c386fda09049209","_id":"meetup-web-components@1.0.563","_shasum":"b3bcb7e592bb614fa123a2318aad955f42fa6861","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b3bcb7e592bb614fa123a2318aad955f42fa6861","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.563.tgz","integrity":"sha512-dm8FRTc9Z11WXOiuxTLOWna0T/Iuk9SW5jfjBk1fPi4tblG2N/Syih1qLJh4x5v+7FnYM7nWEdL7d857aahZxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIChQq+leaLBaKC/hUZT0NSMHHDWHOa4TNSD/jAyLZj0RAiEA47SWCyGMZKx4S0IXu5oy+B9Qh9dlXFcQmetSHmunGZU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.563.tgz_1490731680729_0.03355071344412863"},"directories":{}},"1.0.565-beta":{"name":"meetup-web-components","version":"1.0.565-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"f84cfbffc638ebd3f965d3696e2e9c10a3c62708","_id":"meetup-web-components@1.0.565-beta","_shasum":"a2ce96928feb9d9390711e3e00dd67885e9523b6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a2ce96928feb9d9390711e3e00dd67885e9523b6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.565-beta.tgz","integrity":"sha512-TqvBmrpE8snCT3kOTSvXD1jMrP3MUzodl5pordNcaArQ57M47qeIDSp/FGCHka+k94M1JCWOMgWWUhw4jfSWcQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCj6EOVHE3MDbU40RA++hVDQ0Yfi7mIofjV901EscGBawIgSZENbxnxYaHTGkCZlOz/obzr7/UWLrxbnA1EmL0i0Hw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.565-beta.tgz_1490746875003_0.4270923628937453"},"directories":{}},"1.0.569-beta":{"name":"meetup-web-components","version":"1.0.569-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"d899a8b238475910dd1e66a1d02710cef33bdf87","_id":"meetup-web-components@1.0.569-beta","_shasum":"8f46a57f124d1f1177bf966d7513f8119030157a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8f46a57f124d1f1177bf966d7513f8119030157a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.569-beta.tgz","integrity":"sha512-DiPH6nXM/Tv97NXirwrCChJ031r4U/Eo7bJkZ9pDCuThPOIDGAf4+QfFOYdpxWEWsYiUIWCuLN872lticqY5lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxFlUMq64IdNU7sCRT8/EgdlLSDmhoCuonRoty1nplYAiBIJkXLjvqBZL20CVw73JTmmy3V6+NDgcZyHgNAQCQC8A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.569-beta.tgz_1490747122759_0.21346473135054111"},"directories":{}},"1.0.572-beta":{"name":"meetup-web-components","version":"1.0.572-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"c14452250502ddd4624637bdbad10d2399fb3157","_id":"meetup-web-components@1.0.572-beta","_shasum":"6a6e42abd5f46d00602530a6534a742b48c4b2a5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a6e42abd5f46d00602530a6534a742b48c4b2a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.572-beta.tgz","integrity":"sha512-m7Y+1vxWCHo9RPVGv3uAKsRFIU39I/9notLpgLRj1Z2g9e7mUUESzg63HpNI12LNr55ZD+7gWR8I9m7quukXXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCII02+wCTD4AIPYrOm1xQTdJNbmCUmpv3RfSO7AZkoEQIgVUWNBW/I1iJ7PQscI54EF34R93OmZk0mNdPstr4TMks="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.572-beta.tgz_1490810182731_0.9682508723344654"},"directories":{}},"1.0.575-beta":{"name":"meetup-web-components","version":"1.0.575-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"6e7d96783a88e5e3f98fdaf7823a8fc283daeaa0","_id":"meetup-web-components@1.0.575-beta","_shasum":"13c4a0e3d6e75bc1d0f85778e843d89d4b935c6b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"13c4a0e3d6e75bc1d0f85778e843d89d4b935c6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.575-beta.tgz","integrity":"sha512-MxWknsDBlvUAgrb7QK9/XPwsKsE6HhzmkIg/TVO22JiJ3x+77We0cbtRRyseBnStc1xeTbw3ixi9SMdzkUHfBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAwtdYkIkIPDobAble7NfRqMEPuUSQ3yiWeMaaOAjDEAIhAIboF10eIFWIUM+R/BUcZ/EHQ+VKE8GlXCtvyyYnzTMr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.575-beta.tgz_1490810701020_0.9120764723047614"},"directories":{}},"1.0.578-beta":{"name":"meetup-web-components","version":"1.0.578-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"f3ff7977c22e12039a0120772cc74f4e2d29cb22","_id":"meetup-web-components@1.0.578-beta","_shasum":"3fcc2c038b70838d956f2c1039855fe748998ecf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3fcc2c038b70838d956f2c1039855fe748998ecf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.578-beta.tgz","integrity":"sha512-Fgknc2X4gNUKhbQt+DPRnd0zjQtOEUxFMJOii/0T6xNFl/k/W6/7ZeQ/ydRryACp0/RXU67aQ0vlx+OKlV0dxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG/mf3+xgUMGUaC2KstAtFcTp+UszKJ6jqxmR0lyFp+eAiBK9x07xcpztSotknJe1T6Hn8ZSJvsIuTqjtOeq8uSL/A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.578-beta.tgz_1490824697209_0.933196630096063"},"directories":{}},"1.0.580":{"name":"meetup-web-components","version":"1.0.580","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"24befbc136c81ad0c63541006e98f525ca8c1b4e","_id":"meetup-web-components@1.0.580","_shasum":"82ae148b9e28026f234abe745e86f54d0f5b868e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"82ae148b9e28026f234abe745e86f54d0f5b868e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.580.tgz","integrity":"sha512-Dav91gtwQau4+Oci+YeAKd2Wz96AfBbhNupiM+qAHXpmxTWGjLxOeuHa4reuYn3nk8Q4a8MWiCYO+pvyB3/A6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBcIEiDlpnVA1JVQAcR898mFPYaEsbGEWiSO4XPOnO8pAiEA5scGxiabgE+aPYCkaU7LJiE7xDqokM6Nwj6RY9hVsDU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.580.tgz_1490890280169_0.19967359071597457"},"directories":{}},"1.0.585-beta":{"name":"meetup-web-components","version":"1.0.585-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"c970bca4583f301536f303baabd01797714eb03a","_id":"meetup-web-components@1.0.585-beta","_shasum":"fc8c32979b3f4d8c38d842d7b8a38d64040dc73b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fc8c32979b3f4d8c38d842d7b8a38d64040dc73b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.585-beta.tgz","integrity":"sha512-a8VuGUrJv00nRaNZvit15jTDg8FaJWqQqSu4uurCjp62SoevdCnWqAniihdJY6ly9tRpfg7FZ7P8Sv9pvxCrQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2rt/PLayYwZ/WiFCJnQ9VUHItE00lSoKBn/qo2NcXNQIhANAxUegqL4xxFfKRV+wRc+gavSjcMz1+O33yJWXpxMLd"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.585-beta.tgz_1490898394396_0.36750104324892163"},"directories":{}},"1.0.589-beta":{"name":"meetup-web-components","version":"1.0.589-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"0fd5a7c95590c6036032d37bb640d2758871211f","_id":"meetup-web-components@1.0.589-beta","_shasum":"ca7e21812b5a902839206eeca9a6a3ea7d924a3b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ca7e21812b5a902839206eeca9a6a3ea7d924a3b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.589-beta.tgz","integrity":"sha512-6mVkp+vxjXCBcMf38PORkB/7Ptcp7cGSl457F6XY9N0C90DjwSw1TPb0cgHTknhKlGrvLDWS44rHOfe+fifMAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEkOZbyc4EellofH249STp4NA0R3MrO8J4yZwRPxNsKAiAopQ8ULZ0rnjwlbFDbNJ47+4aGgxadXQHeZ4YWkDiGjA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.589-beta.tgz_1490899157124_0.41535063623450696"},"directories":{}},"1.0.590":{"name":"meetup-web-components","version":"1.0.590","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"b29f1c05af323f2b672cdd185eaa2bccb1a1df37","_id":"meetup-web-components@1.0.590","_shasum":"e01cfcef394651b52cb770d24e1c36321d99d8d2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e01cfcef394651b52cb770d24e1c36321d99d8d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.590.tgz","integrity":"sha512-VRWlPd97POehx2urNTagjMjTZgzTX535GBMtSGmMQKDfNWFNPZovSY5Mh06w/e2ivFer5P/HGnP7Ku8CO3qKxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPsQTwWO5X/rlvWF6LF5MrZsgHpXd4Njh66KtkgkYsvAiAVsKbIgeQrwkhzPQPFCINCUy6SfRAM3Cj/Mz+7HDaSaQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.590.tgz_1490899381798_0.6790267894975841"},"directories":{}},"1.0.593-beta":{"name":"meetup-web-components","version":"1.0.593-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"eb8e04f4ef67880ea600727520c139dbe7d106a9","_id":"meetup-web-components@1.0.593-beta","_shasum":"5a5a6c4922043e150ae36994dbe7f871ccbf798e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5a5a6c4922043e150ae36994dbe7f871ccbf798e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.593-beta.tgz","integrity":"sha512-e9+va9YwS24kV5bGWFrnybkeDFksDH8gO+1n5KJdxYQD63gJUTDM6xzYEEjZ8kAYIi4JSrdCRKiq0DYwepWtsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTqY661L80ZIYrBWvrwX9K5lVSrzBDfmdlyF3O6CrklAiEAyZ5e6CMP37gIrYqmtOnXqX1727j/1tQgs6gEluIxdJ4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.593-beta.tgz_1490902963765_0.6456890050321817"},"directories":{}},"1.0.595":{"name":"meetup-web-components","version":"1.0.595","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"03cdf993df5f2517d5bbd04803cb50f5353979b4","_id":"meetup-web-components@1.0.595","_shasum":"db1c94dfe85616dd5a8d7d603b05f2f2062b1de8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"db1c94dfe85616dd5a8d7d603b05f2f2062b1de8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.595.tgz","integrity":"sha512-kfNhK+Zaoh3aump/jkTmNa40+/UcOQEBMUROgmtfeBTndjTq+vouRL4mTGgcZHLpp+qGT/0JO+sLIJjsffG1/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIChLV5cwOgIdUuPxuANfC23wdX1MN1ge/uHReWvMVzabAiBYUR7KHeFW1zXlQIn0eVj8cfs1v6OthJ8v4N7Z0bpbQA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.595.tgz_1490903272930_0.4773494964465499"},"directories":{}},"1.0.601-beta":{"name":"meetup-web-components","version":"1.0.601-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"05312817ab6a8fcb07ecba89fb098c24266cab27","_id":"meetup-web-components@1.0.601-beta","_shasum":"88b5cba0f485cc1f273e82ebd73c1d282a6d71df","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"88b5cba0f485cc1f273e82ebd73c1d282a6d71df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.601-beta.tgz","integrity":"sha512-R3nA2Xzx4Jt4wH1U2ARcU0x8sDBVf2hY3SLcV+N41wUUhtroPjcPBmmR7zfBnRKqNe6LptGiv2/EKfq3M8TJ2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1iKj03ITp7imK/C2SaFAjwSACyKBtKJMn4pSBzp9H+AIhALveBmhWtyPPrAcO2cKJ1ufoGws1m7RoEKJYeCCn4ae3"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.601-beta.tgz_1491000833954_0.14722547959536314"},"directories":{}},"1.0.605":{"name":"meetup-web-components","version":"1.0.605","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"0e50fc45ef011d6c431ea6d53083e2afeed2f854","_id":"meetup-web-components@1.0.605","_shasum":"48f08b187a883ad31d6e82645c2ca4bcbff21e11","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"48f08b187a883ad31d6e82645c2ca4bcbff21e11","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.605.tgz","integrity":"sha512-Oe8MnpI9RtvrzZ83zu52b+Xxh5PEGxirfXVKG/VJ4JbFiXoMPZq9W4kUaL7hOzqoqxZZGvSiN9i3FFKuvLMV9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCarS23lkr7UKw0sJTPTYtri5sjIeJtxQMV+A2OXA6ifwIgHi9Uc6SiUwJRkzzNj19vuZfn9had8A+ffT+YbxOp9bw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.605.tgz_1491230518625_0.6107963747344911"},"directories":{}},"1.0.606":{"name":"meetup-web-components","version":"1.0.606","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.10","webpack":"2.3.2"},"gitHead":"50986a5eb250843cc2d2f186190ffed6a2fe4561","_id":"meetup-web-components@1.0.606","_shasum":"8c4b845b9b5e33bab36360aee1a530116b02dcc2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8c4b845b9b5e33bab36360aee1a530116b02dcc2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.606.tgz","integrity":"sha512-FgHYa//5G4OrjQOIzcEQYgIMBymLmFJ0ZwOVwkZnIW6p9C4DdrdKZqpcnui0gIZCWmn1LC94ykhPd8HoWy420A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFsfMrj3w0/kzOBhhCEabkaAExWsLJ5i53ETw9YMUezuAiAGpHsAwoa+kyN2MUYNrd8rS5rHvNU+YeNJ9Pu9tYPJDA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.606.tgz_1491230559701_0.13730787229724228"},"directories":{}},"1.0.616-beta":{"name":"meetup-web-components","version":"1.0.616-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"d92e1199d5ac53767c9accff6914493b8b9dee45","_id":"meetup-web-components@1.0.616-beta","_shasum":"a7a38cae357f96f23768838ef2aea5c1d106e7ad","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a7a38cae357f96f23768838ef2aea5c1d106e7ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.616-beta.tgz","integrity":"sha512-JQX8sZMzNdZaVHxUOth0wcVbfKibfqZVG+X0phacL1sCKl3UobGUtSK7EYBpGxs08ibR4IKCrdWT7G8j4b8qZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqDxHiCHYDMANdYjcG5MXaAUOiM2YJUaY1YfwrPrsiMAiEAhEKxiNCGJuvR3p+TYVuSO2s09z/ELmYiw0RwscUtq+8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.616-beta.tgz_1491237230688_0.9878091174177825"},"directories":{}},"1.0.619-beta":{"name":"meetup-web-components","version":"1.0.619-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"2b11f53d9f6f6984a8fefb36fb425b661408cec3","_id":"meetup-web-components@1.0.619-beta","_shasum":"dd986e97b82f5e804f802d731843acdab8f7c9a7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dd986e97b82f5e804f802d731843acdab8f7c9a7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.619-beta.tgz","integrity":"sha512-CMNxPrnvcn2xnrI1GUJd7fOrjpkLn8ArOJCDcJBRbs+rYf7w9q0eYr2gFV5xVICXqnVJ50k38PsYlg6EiRwtDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHmRqWbpYK4t/l+pe9PByFNsQwBloLLKDbNBx8mzWEswIhAJLw7S8gqWNymoS7LWIjyBgR1IS8YW8Wr6xgCSkFE4sZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.619-beta.tgz_1491242828067_0.9292345335707068"},"directories":{}},"1.0.622-beta":{"name":"meetup-web-components","version":"1.0.622-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"6e540c5322271889cdaff4a7646635c84bb9cc4c","_id":"meetup-web-components@1.0.622-beta","_shasum":"96c0157751405c3aba5b6e7fb78d3e729ac3c63a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"96c0157751405c3aba5b6e7fb78d3e729ac3c63a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.622-beta.tgz","integrity":"sha512-UEgnUq+eP4lipWJC1BornCpf5sEqdBM9lhtr7vg7mHY1w+D556JiLVy7SpmnJ5d6l9q6ZzPXlmwt/qbqatuCeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2gz3R5wNJD0xkCoJl/9D3o9Qczi5BLPJpeQzn5HA9kAIgcb4td/MreOe8j1fEKTFCm1zSVwf+Vyr9elwAZKIndUY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.622-beta.tgz_1491243464593_0.9448539977893233"},"directories":{}},"1.0.624-beta":{"name":"meetup-web-components","version":"1.0.624-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-media-queryable":"2.1.0","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"7d0dd837c66355e431546f1e189c51a792752935","_id":"meetup-web-components@1.0.624-beta","_shasum":"7949629a8122b8b5c46491eab2e9aa124b9eebb1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7949629a8122b8b5c46491eab2e9aa124b9eebb1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.624-beta.tgz","integrity":"sha512-Ss8CUG7H/WXmyKeuZNWjoSBf+xx9fF6xnDjV7wEYT+zMxJtsmEPlg5Ic0tOEFAerOP8/DdKWuiz4SkDVziy00A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBy9GUQvej3LxkPJRzjqj4tEvACE/PXlfHsybdHbrikbAiB39lkFd8tSHrPetsali6kpgjCPv386tRG+9729f6a73A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.624-beta.tgz_1491243573588_0.4983053356409073"},"directories":{}},"1.0.632-beta":{"name":"meetup-web-components","version":"1.0.632-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"e0abc708299437ed958b12ae9a936b897459869f","_id":"meetup-web-components@1.0.632-beta","_shasum":"d823cfbcaf6d19264c89c3f4e3e492e3af418141","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d823cfbcaf6d19264c89c3f4e3e492e3af418141","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.632-beta.tgz","integrity":"sha512-BvUyuCmGkgBDOOOh2W8TLvwoWBT826rnHbuEc+okgtqbLEg6DWvIdcYZ8uXmwrNYlOFzf5WJNBP7Jh7MJ0hzJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNcjb3tc0RoZzSXb2cCM5kzsBagTZs1dcXnn1k2KTbJgIhAOmlnfKOkmi+iDVms05zY2TnSfJHpaIS9yCo3vx3x/K2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.632-beta.tgz_1491256690781_0.0672159472014755"},"directories":{}},"1.0.635":{"name":"meetup-web-components","version":"1.0.635","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"aed7e5a2beddc56f4c46697fe81daf07db26c865","_id":"meetup-web-components@1.0.635","_shasum":"85205c0de5d11532cf23898f5b392dce35a24abc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"85205c0de5d11532cf23898f5b392dce35a24abc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.635.tgz","integrity":"sha512-HO4rSiPzIJdTX1KfR9PBmNp2eCFX9xwvS2qNZKJwLM9cOxOqcZxyf0DFj7cFKAqq815pnmh2SsGephok2UUdwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDnbfY/1VMuSSFVh3rMx5TDJ7KB1WuER9j3EUEJpbtCyAiEA4tOs742OguO9icaGt40uxvQTi5Qp9Y+8vB/+Bzf1d0A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.635.tgz_1491256930701_0.9582750489935279"},"directories":{}},"1.0.638-beta":{"name":"meetup-web-components","version":"1.0.638-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"4fd3b3fc42110c7115f4f7ad9a2010b7bd404801","_id":"meetup-web-components@1.0.638-beta","_shasum":"afad168b5a1f69229491adca6e76bad852165a71","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"afad168b5a1f69229491adca6e76bad852165a71","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.638-beta.tgz","integrity":"sha512-u5XW3qBwA4iWBaCUXbW7g8gHL/g8ceZak6BCVa31Iyb6aEVHmYW6hJVl9KoN3ZN81M3dNg45LOMyYJdN4S+bHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDc/ZKCnBZtYjRNvDZcOOZpENkfoNQlKO3py2FyNZ/DVgIgBG4mcjTiTA9NzekoWv8xtNnLMV4zHEU7AUihpg+0Uwg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.638-beta.tgz_1491319611875_0.7820202028378844"},"directories":{}},"1.0.643-beta":{"name":"meetup-web-components","version":"1.0.643-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","base64-image-loader":"1.2.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"834d5245f02fb3b690f75e695428c1776f670628","_id":"meetup-web-components@1.0.643-beta","_shasum":"a461ce54b95eb3da2dba6c9d6738f90a8630ffc2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a461ce54b95eb3da2dba6c9d6738f90a8630ffc2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.643-beta.tgz","integrity":"sha512-lDpsRPTVX/8T/9jNfafyAev1Cr/r1X5Nkcu5dvnzysylmQV1kEdAipzPvsrYAYRek4FhINZjWvcsRpX26OilHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtHM/q8T87yh2JeQRd+/3/Mwz+BCPUo49zngwTJmzn4AiBW9oRpTsnI9+DAkGC8fH4VuEGzvYJV7Bg3lbmMsmeD+A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.643-beta.tgz_1491330295397_0.8007888316642493"},"directories":{}},"1.0.644":{"name":"meetup-web-components","version":"1.0.644","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"93d0202dfa68b9f0496e7c57cb666053f3188e71","_id":"meetup-web-components@1.0.644","_shasum":"1a608ed42ad14f5f846ffe556ee013220ec57065","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1a608ed42ad14f5f846ffe556ee013220ec57065","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.644.tgz","integrity":"sha512-IYs+Gh7JBmkpw1HO701uCpJd6z9umX/AH784AID6VIDVCdi6CHVzxslfr92E+tPR7q+jYAoJpPvyi71h55uqDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6FKMGguTS8jKX1u7S/O50r8cKas79FE4mrD0Q0cOz0QIhAJdRl1yakgF2XUq7lrOkaUPYC2W5JVsrULUB1WCVeTxm"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.644.tgz_1491330428029_0.6989338507410139"},"directories":{}},"1.0.646":{"name":"meetup-web-components","version":"1.0.646","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"91ed4678ce0f63ccd18c500689d8acfbc8316764","_id":"meetup-web-components@1.0.646","_shasum":"28dc5501cb14c68771264406d7a5ba8dd9107bf9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"28dc5501cb14c68771264406d7a5ba8dd9107bf9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.646.tgz","integrity":"sha512-M0vTYoMFtlItzDRVM+o34oE3q1999SBqCjsm1YQ7ZPVGy5RuyC1gzUTaKsuPXsXcn7n8tsiQcqV7i+i5GzfQtg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6dvxWmEf0fvuX9DYfDicGuN3WUpF4LKhQcdvMy64W7gIhAJLKl2u7dWPe3gLVkre39QEeFe4sZt4DploCnPDUeqX6"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.646.tgz_1491330598857_0.3484588391147554"},"directories":{}},"1.0.655-beta":{"name":"meetup-web-components","version":"1.0.655-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"b45033c4c52e6f18b755605df09dadecb6ec6740","_id":"meetup-web-components@1.0.655-beta","_shasum":"3df02543769f0bc7f95a12b6f54613b4a701d7da","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3df02543769f0bc7f95a12b6f54613b4a701d7da","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.655-beta.tgz","integrity":"sha512-HnJHae0ZXpGtD/5cGek49gBNSHFNwloK5zDN/zEtmkgJ2/Ca4dDTyY+JmKNg1cKnL9wmPDtdtbepe7qWjwO06g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHkVWlmSOLEhjs3Nvt/oYLnPKGOe2wcQQaZ+q9LEMzbyAiEAvE1j//lERT4BNm+lvAPlgNh4TBHk5d5TQ9YcZlfo6a0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.655-beta.tgz_1491332609191_0.5700254854746163"},"directories":{}},"1.0.657":{"name":"meetup-web-components","version":"1.0.657","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"e2feac65fb623116c1e62bb7f15b89641983cd2d","_id":"meetup-web-components@1.0.657","_shasum":"5933cae160d3e22324b3fc5bd97f228d122c86fc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5933cae160d3e22324b3fc5bd97f228d122c86fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.657.tgz","integrity":"sha512-7FZXvLYaImQOv7lrhrvzIOVW+uNaact30Wns7t+nB5mR7bAkQ6N1TpCeL2Q5ytAgiKE9elO2JMvjToG5q08vGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAYH3q6ggXRW9wVqA2PKWHKqmUQghD6Xd2x1CduX2Qj1AiEAw0odUuM71PhhIGZk/e/JnQzOlxQlFLRd7naOIhlTaJU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.657.tgz_1491332791362_0.3079111853148788"},"directories":{}},"1.0.660-beta":{"name":"meetup-web-components","version":"1.0.660-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"b69ed4bc955e9fdd200b2a0f76df40fd2c493df3","_id":"meetup-web-components@1.0.660-beta","_shasum":"738f1e964914bd0bae1db631d3f235db10a1ca6f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"738f1e964914bd0bae1db631d3f235db10a1ca6f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.660-beta.tgz","integrity":"sha512-mievv77H3rANetpC54vDK/xIgxwCrwNy8grRcTUNcVF/2QlC2x5cMCER0JLAyPxcFtX52GjR+nM68BArK/JHSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBeUClU/qbGfsB9yUtjPYsf6FK7YmnBwvzKo6EzR77LQIhAL4xgqRxgOSJbU0YyMJi74hn/ZSXEpcaO2hh9V7hG1Ci"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.660-beta.tgz_1491333244774_0.2256799517199397"},"directories":{}},"1.0.662":{"name":"meetup-web-components","version":"1.0.662","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"6ace8243a3c5140b78eecd1333f6c79453535fc6","_id":"meetup-web-components@1.0.662","_shasum":"b1ff2e25193d7fa33b68430f9da3aa7026520223","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b1ff2e25193d7fa33b68430f9da3aa7026520223","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.662.tgz","integrity":"sha512-NqZoJ/xS3f5eMZvYtqOxnbWniNeFvjpt7iP3osWyo84+8pG/yICOu1IJkfFBp388ea2fBzVIc8ALHaXArSthWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBdKX+5JTyExB1Vd7BILsWtVvrPUe4yrOo7KrYVUcUIVAiEA1epiv2aBY8KdIN9KIHcwWc0VT5KtvOMyXzEronYWKeo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.662.tgz_1491335586627_0.04188722837716341"},"directories":{}},"1.0.665-beta":{"name":"meetup-web-components","version":"1.0.665-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"a1f40e690336b4704dd9edf3331b976780401239","_id":"meetup-web-components@1.0.665-beta","_shasum":"297e5f92ad175cb7dd6dbd4b134f6aee1f1c33c0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"297e5f92ad175cb7dd6dbd4b134f6aee1f1c33c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.665-beta.tgz","integrity":"sha512-FiW0CEnz88rR/+RjWslMHrwCVhT8fThBRw47AfWb83y6H5wyeS7kdeQUHcpqRCnS/5llbnCQdAURvLhtJ4iZhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeExLzZT0xmqEIqyQU4K4rTCMmOuyaoxJjdTFczPgrdgIgaCzPFfmABnnTeNhUpXdrJeS/uEVtPoaE8bKbmjzfGH8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.665-beta.tgz_1491352906145_0.31659539067186415"},"directories":{}},"1.0.667":{"name":"meetup-web-components","version":"1.0.667","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"fdae3d4f3059cb1a268b357d4c1c6be838d39004","_id":"meetup-web-components@1.0.667","_shasum":"383fc6a141f7bd14595b263d7892c742094dd0fc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"383fc6a141f7bd14595b263d7892c742094dd0fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.667.tgz","integrity":"sha512-2bOWgh/0BDNig7BXaif2HxjjBrXbvC/uIG2ivdgGK+gy6Bm3GgBxm8ky4B78///D3IH75MHVQwMyAad8m6m+FA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM4v4zoNLJ28mBMYqb1Xeldv84mJHw1hCDNYb9TLmnYAIgXYFaTYdxySZYOaVI+2TKPwFMQ2NzCkQhKIHf6fonE4o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.667.tgz_1491353223750_0.8059496758505702"},"directories":{}},"1.0.670-beta":{"name":"meetup-web-components","version":"1.0.670-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"a71dca74f171788440529441a77f21c6f0dec745","_id":"meetup-web-components@1.0.670-beta","_shasum":"5c219ec7530612a2e46eff72bdc17ebab5d0e4bb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5c219ec7530612a2e46eff72bdc17ebab5d0e4bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.670-beta.tgz","integrity":"sha512-GRbjF+DVlLjGQXR78RW2yLlHCLNZbbit5ToX9Yo9HwyX8WUHkPFlFtXbOaa0LTM6Bi7frPaPVOgj6chcXSTPSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9bd7R2EfHFbk7871Bl6IYs5vd+RmZpI0l6E4Ey7jsEgIgZEVlsrSQK9k5k7RiFDfN5eEu8JdXRUVsUdrKMeWbHhs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.670-beta.tgz_1491420774556_0.18941127904690802"},"directories":{}},"1.0.673-beta":{"name":"meetup-web-components","version":"1.0.673-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"330eae5df0283f9f7fb7a22cdc1dd4dfdc7af570","_id":"meetup-web-components@1.0.673-beta","_shasum":"014518576db8a4973911ea549b5c2e0956a9fa6a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"014518576db8a4973911ea549b5c2e0956a9fa6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.673-beta.tgz","integrity":"sha512-m4oyRfstavBJXgby6VhXafLXeY5mwlYCg7ifJSH7XLNjC2ZLWp5CyaKHgOs3JYxwOUPa4LYOwGbnbrXuGeK1zQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtGVJLAHRkLnqYk0mLQBZxaQ0sOk77xmf01ygRUNGhkgIhANBLKCUHoKezOkzUAZlXeCz/n45D58a2WhQwOoxjM1Sd"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.673-beta.tgz_1491504422798_0.6564992950297892"},"directories":{}},"1.0.676-beta":{"name":"meetup-web-components","version":"1.0.676-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7","moment":"2.18.1"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"28ded79e8265f1054bbc83ee4340fdf2ef5d9afc","_id":"meetup-web-components@1.0.676-beta","_shasum":"1fb12c05141419501a404bc1ab6654e8882eecc2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1fb12c05141419501a404bc1ab6654e8882eecc2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.676-beta.tgz","integrity":"sha512-dsTKHpJg/5iIpZz47amw0yrxPbQJstgcahNYnmkKYaqi3ZXWxtVl7UYUhIO4SflFG0U9KhUeXKbzqUTogK66QQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsF70l74/Avxn47kU3YaWNdVhD2OxZkndbHmPXGqy9qwIgFrGkqHey0Kw0GmRe9t0zwwey00FPXvICbItXjAHLQiU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.676-beta.tgz_1491510355517_0.8359075989574194"},"directories":{}},"1.0.679-beta":{"name":"meetup-web-components","version":"1.0.679-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"8391ee631d83ec732051a470f893b7714a5268c6","_id":"meetup-web-components@1.0.679-beta","_shasum":"645bf1a4d1c07fda129b7863673691b062914ff8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"645bf1a4d1c07fda129b7863673691b062914ff8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.679-beta.tgz","integrity":"sha512-x8LEwLYa7eGyMhBOXoZkuXNURZzlCR3fD8iWw2LuAllMdoci9qUu+fQhkguCep5BDSDiyMDLES2r4JAQyCiMbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDSLQUL2w2JQUm21sYAX6zNJjWHEXf55kfAdfz+xLRJeAiAn7faBHz2jftnMSarhaisw5VhwPcKR73slbvH0vanIpA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.679-beta.tgz_1491511278283_0.08394111879169941"},"directories":{}},"1.0.682":{"name":"meetup-web-components","version":"1.0.682","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"9c67319f49e30d749c3a805d1336c2776370a443","_id":"meetup-web-components@1.0.682","_shasum":"658ce29a64785e8fb8c82f435826f9476154dea4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"658ce29a64785e8fb8c82f435826f9476154dea4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.682.tgz","integrity":"sha512-f8NXyc/nq+CUJ6wNRY5SssaZqKhWaMRgCbBXkuJlUa3MtQ5ObI+MPDKjBK5ldLX4uj/Oxa9wvfsP+aWU4pG8zQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTGiRiy8gKR3KYZPqsasMoH/l/wmCSGmHXt68md4iOsQIhAI/izdyCA3UxFQNo39T2XtQq5J8q9FEaIcX7TiMkQTCo"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.682.tgz_1491529661086_0.12657957198098302"},"directories":{}},"1.0.686-beta":{"name":"meetup-web-components","version":"1.0.686-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"bbc97bc461e5edc6e07a2d97d310b46a0ecf4347","_id":"meetup-web-components@1.0.686-beta","_shasum":"c934dcaca72ca2a7d2c16060cae34fb8d4329813","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c934dcaca72ca2a7d2c16060cae34fb8d4329813","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.686-beta.tgz","integrity":"sha512-SoiADuBlKNDftdXTLg9ObphULwYsYLn2p0ZSScULXAKExTJYZcNSM09m+/c6L9oZ2wtXd2W0PrOfZGoVCvgPSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClC+X8RbQRVnNMvvuWjQJwzoh9WWYM05kwLKG6gIHylQIhAJRi44gHqNrkmvo9viJtMXrY+AIaP1qDloSxdJ9H2Tlg"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.686-beta.tgz_1491574860374_0.47032229183241725"},"directories":{}},"1.0.688":{"name":"meetup-web-components","version":"1.0.688","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","prepublish":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"7a4f932ae64734110cc3604d9ab18128b3eb87cd","_id":"meetup-web-components@1.0.688","_shasum":"6586d0381da6b9a4c04a67ea79a81a9e4d2e0e6e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6586d0381da6b9a4c04a67ea79a81a9e4d2e0e6e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.688.tgz","integrity":"sha512-zlnXOw0qyQD+uwmf+skVgTuOkvzVrHsRpUwQDyQebhbEwzfzVJlInxXpZlEA5wLToWxfJ1ZYeUgun1rZ8lDzRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCy9dmVBgyYtOob6VvGY+MBO6dpBadpBE4LvK5yylj/NQIgeqxTGHBRgfEzyKGA8hTM0D+878qL6kSzW6z6p/EnwiI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.688.tgz_1491575207118_0.7447048956528306"},"directories":{}},"1.0.724-beta":{"name":"meetup-web-components","version":"1.0.724-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"a1a743bf442b222cb5902f74aa1cf72fbf320bb1","_id":"meetup-web-components@1.0.724-beta","_shasum":"6c1f9e781cf1197407184549cca9de907126e1c9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6c1f9e781cf1197407184549cca9de907126e1c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.724-beta.tgz","integrity":"sha512-H/9Glze5xH8mco7xnDaTQafmXSx8daP21z/NId7b4Ic+A5eU9tbps+QO23tSR7PjonBcKXD0bsQNzoO9nX75eA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDx0K/Kx1mUMIcDJDJzytr9+0wbcCwZIL5sQ9uHvp07kQIhAIGazz4PSIkTzSlgz8ufdz1+WCOCcre455J/cw9BHLXG"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.724-beta.tgz_1491858234451_0.2902626779396087"},"directories":{}},"1.0.730":{"name":"meetup-web-components","version":"1.0.730","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"587b290558c2edb6f20f9e5a2812bb4d1de0b6b0","_id":"meetup-web-components@1.0.730","_shasum":"24e3a2e2c7b6c34ae343fad2bad06a72ee7e43d5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"24e3a2e2c7b6c34ae343fad2bad06a72ee7e43d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.730.tgz","integrity":"sha512-gOkztmdZTUiaPftN48yQu00cQkeqpMcb26WbjTj1wmSDmDi3IBaYqlbmPpcm678QIA1sNZ86WCPNqo7AHnwMKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8l3EUQMI+VCWNgghOHXZcBW2dBWVTKMCB2IHJ+Zp4GAiAZjs3MZKPt2InnoopMfhJpmnk0c+Isn+kDCw5UgGTqgA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.730.tgz_1491860552498_0.2806571938563138"},"directories":{}},"1.0.731-beta":{"name":"meetup-web-components","version":"1.0.731-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.117","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"646f398219b9ec8c7b3e2396d9c87179ebba0994","_id":"meetup-web-components@1.0.731-beta","_shasum":"8caf36cf7b2481944b7c8c74d2763bffce0f4665","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8caf36cf7b2481944b7c8c74d2763bffce0f4665","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.731-beta.tgz","integrity":"sha512-2waJlHKVeboDziCYvlElbxj9I+UU2FDvrIuxaarAWYtIle//FgLhSVuMSb/p2nJwtT5uljO5uYUOjQahOM3bRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKJMGACp+ycEvOUf957/d4pl6MoBKgxFuQTvNFejL5MgIhANAQhpW4IUhkPptRRvFiZLMQgFIvJlrlyoZBdM1raafV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.731-beta.tgz_1491860605288_0.9211801127530634"},"directories":{}},"1.0.734":{"name":"meetup-web-components","version":"1.0.734","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"c7071a4e7d7be1dac88c111bd87429a81fca7450","_id":"meetup-web-components@1.0.734","_shasum":"2ea4b4e94c9a80ca2bffa60beb0edfc670ae8eab","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2ea4b4e94c9a80ca2bffa60beb0edfc670ae8eab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.734.tgz","integrity":"sha512-HQruFpRNC0+H2p5bGfME1t7azYjZky0bYAhVI3Q1Aet9JeXSOcLk5383llXLmTRmpsOmgU84G8md+tnip1UbrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOjv+u99BgUG9ueEVMU/nn+tXFYXotz0KwBiBjrDurlAIhAPnun56FdP2Ljdh43+5kXuGhQ3FB9iWLu3Co0Pfn93Sp"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.734.tgz_1491861912633_0.6162193191703409"},"directories":{}},"1.0.737-beta":{"name":"meetup-web-components","version":"1.0.737-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.7","moment":"2.18.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.0","babel-core":"6.24.0","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.0","babel-preset-react":"6.23.0","babel-preset-stage-2":"6.22.0","babel-register":"6.24.0","classnames":"2.2.5","coveralls":"2.12.0","css-loader":"0.27.3","eslint":"3.18.0","eslint-loader":"1.7.0","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.84","node-sass":"4.5.1","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.4.2","react-addons-test-utils":"15.4.2","react-dom":"15.4.2","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.0","swarm-sasstools":"1.2.11","webpack":"2.3.2"},"gitHead":"ab37a6c518bd3b34aa283ae7416b1118a6bbc56d","_id":"meetup-web-components@1.0.737-beta","_shasum":"321995f50fb717c4f04d12345c23bbe58dce9dec","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"321995f50fb717c4f04d12345c23bbe58dce9dec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.737-beta.tgz","integrity":"sha512-jSISHuDpAaXWyK3kScWKdJNTBxrkgl3A5iM44azmBsSDNSMSLDS7idHxfqSjRCH7egO4LEu8bh8Ugkxi957+ZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuVnvD/ZOVKIeQzd8n63Td5S2ooFBllnyrGByqvTTjwgIgIEPXs3Ti/h1uTzr1RYk72mZF1kCeIUSHXLwOE/EQhhs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.737-beta.tgz_1491862228033_0.7056092717684805"},"directories":{}},"1.0.739":{"name":"meetup-web-components","version":"1.0.739","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.117","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"ca3792b777617b874b5f552140dba6fc0bc835eb","_id":"meetup-web-components@1.0.739","_shasum":"5b0c75ef40a8c3836f5811cf3aea27ea002a95d3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5b0c75ef40a8c3836f5811cf3aea27ea002a95d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.739.tgz","integrity":"sha512-5jMQgcwEampdMxVDbIfswaM50WfIvUESUpxf0Ujg1LmsqmByh3WmIzpstrSTPcZyUhi/awaCBygG0aPG26qu2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKE1qeHT6GtIGdw/BBiPKehAS+Z/GqpGUQxbzKcZ3zwAiEA2Htnp9gdhj+2abvbA2zRXrIe+YtMeFpNwMg9yc2i0Tg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.739.tgz_1491866797924_0.534401593497023"},"directories":{}},"1.0.742-beta":{"name":"meetup-web-components","version":"1.0.742-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"507d5c7051936459fcb71802554077c3f30523ad","_id":"meetup-web-components@1.0.742-beta","_shasum":"0680c2168a12e3429c34d9d622fc304c2997f9e1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0680c2168a12e3429c34d9d622fc304c2997f9e1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.742-beta.tgz","integrity":"sha512-O5tzdMhneONBGsZMpP4tAgJqH9iZP2gIRdNizkYbfDAn7M8QDjfJwCxWL1u4hGf16C7lTnx1E5CJ9lAAsqfXDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCigdE0Q4aRHo+y+yfePdFSPCDvmueWJqAkwnz2ffp1/gIhAOiwuOC+dTf/OibBeS8tJhFf0iEC2w2HHpSqitqx2NXW"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.742-beta.tgz_1491873220684_0.6500105170998722"},"directories":{}},"1.0.744":{"name":"meetup-web-components","version":"1.0.744","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"491a494e158551f6a974c5ff9e875eeca3041391","_id":"meetup-web-components@1.0.744","_shasum":"7f50420d8d5afa37dd32afb5460fa1f16c0390d3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7f50420d8d5afa37dd32afb5460fa1f16c0390d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.744.tgz","integrity":"sha512-7mN15nb6lDMw+yB/qiGDAdefMqTqXdVU91Kmaalwe/IR0YpGC0ylJv4l2j1VC4ToS6oVq1+pvJ69ofwvkkf5zQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDuirvWDd29Hl8XmWt/mgl4vRTm6pcwG/u67h0lghC/AAiBg8AKQnz2qoIlgxpQexJcxeN0PS4/2Kp/V1Y4StvO5Rg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.744.tgz_1491873552124_0.8875848699826747"},"directories":{}},"1.0.747-beta":{"name":"meetup-web-components","version":"1.0.747-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"6addcf7a8bf7576e2ac6734837082f356c1978a9","_id":"meetup-web-components@1.0.747-beta","_shasum":"5feb53c1fc66f97d37e47880559ac13d13d00ed4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5feb53c1fc66f97d37e47880559ac13d13d00ed4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.747-beta.tgz","integrity":"sha512-4GCqToI+wEH9DHkZJn7TGGcPqopoqcGjwNLom2gDJXQXWa2eIx7WKgpu3LjlPLWZ1Yqfz+K9m83XXBwhSGyvqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFhzueVm3F+vTQsWqJVZzk5rnZkWcI/qrPYxA18+wijxAiA9X7QUPuFZnmYc9TRGmwfZFCDpb19n7+4BYWqYv0MHUg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.747-beta.tgz_1491918011766_0.21576421824283898"},"directories":{}},"1.0.749":{"name":"meetup-web-components","version":"1.0.749","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"175bd071efb9ba97635f21725a44a45935273235","_id":"meetup-web-components@1.0.749","_shasum":"6a5fb266af93ee10bc3392cd1af23ec79d37a483","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a5fb266af93ee10bc3392cd1af23ec79d37a483","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.749.tgz","integrity":"sha512-Nzw6GWx4jqxE+5Dw69NHJgm5GC8rXW6d5F/lvClKhPD35gl1bt6bUe4TudEwTtZn4SYWuKDXxck3pzpfTPaHfA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXL7Gi9GU5dAA/15kMtqGma7Bwno8MmswOTYyzBjLfUQIhAJ+DIjUXivNdraTNawwZq+eoZ899pJKTEsz3hP5BNnPg"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.749.tgz_1491918225604_0.2508017336949706"},"directories":{}},"1.0.752-beta":{"name":"meetup-web-components","version":"1.0.752-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"c4a2d6a48c4ed0d5d245c6bfa4c9f4eab01bb684","_id":"meetup-web-components@1.0.752-beta","_shasum":"08c8336a3858a34d193996491d6647ed4eadcb81","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"08c8336a3858a34d193996491d6647ed4eadcb81","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.752-beta.tgz","integrity":"sha512-pfQW8xb4i5Iy4HM16yGMal5/PwEJc7NcQQWc2JFKMhYxJNFA9QokLNcnWL8xdU8EfjiaFiSdddZwePzlg6x+8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoGSsqbUBcWXUDbOZ8QNjzoqE/WeDrKFUqZ1DKLhoEoAiA6Ha9RliLY8MT409CV82UYupej9eUqVgetfL4/Xn2f6Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.752-beta.tgz_1491920770377_0.3058937524911016"},"directories":{}},"1.0.755-beta":{"name":"meetup-web-components","version":"1.0.755-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"10ac5b91843f7b60ebb7d5860bc73f052f7b9fd3","_id":"meetup-web-components@1.0.755-beta","_shasum":"6e275712631d59f653653904cb275336bf8a1d87","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6e275712631d59f653653904cb275336bf8a1d87","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.755-beta.tgz","integrity":"sha512-KSvOEb5IQe1TKR/dP9GAupxLruD9EQIbxdySncRjqaMWuzqOM3IoT2EWH1NI/Fl5iD4QfPopkZb2DExB5iBZVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBA1T2BTzvaaosc4kh4hKDiq2JeXvO8LlndU7LCn9krpAiEAzIgJ7k0Leq4XVWxqBnj2jo91BRENYNf5FSFF2kgtOC8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.755-beta.tgz_1491923670199_0.8319755094125867"},"directories":{}},"1.0.758-beta":{"name":"meetup-web-components","version":"1.0.758-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"19e5bb9e5b944ca1ba75c8005c7be30375221a52","_id":"meetup-web-components@1.0.758-beta","_shasum":"ef61b6e606c2916ac65b2a082273e33f515ded5f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ef61b6e606c2916ac65b2a082273e33f515ded5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.758-beta.tgz","integrity":"sha512-P84sFl9mgWwhfIlwBJ3MEdLoucHGSL10WgsTgfFTsUZvJu1vfVcPlySNcUfs1TANSVU+8AudpwAr5xJpHVHKvg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZxE1hgMOdYPqzE2ifraqOOgeaPjy2qiT9luNbjN+ImAiBIvmYpAU+frblLc9Nf39TgjNSjMJ4NOv6c35vAWRYTiw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.758-beta.tgz_1491924731331_0.44202711316756904"},"directories":{}},"1.0.760":{"name":"meetup-web-components","version":"1.0.760","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"8b00a9836a076d9960d21aae2cb977c1ccc3afb0","_id":"meetup-web-components@1.0.760","_shasum":"eb5de00a05eddfc9a547712bc51bd32cd2eaed86","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eb5de00a05eddfc9a547712bc51bd32cd2eaed86","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.760.tgz","integrity":"sha512-bu2jAgMJX8uJf+Pl6XvmwqzOcnh9jMJ/yuzKgTrjmCjLjDLZCHKq5UDY3Wt+ktkfmBWkjLzzKOk16bi67ok9gw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDENyHl8HaBPvOOZsco4lFkpWxhx+Nl3DUy6uwhKdGrhwIgXhue6ckBM/wVMkIuqS0GyrqiNan/WkRiz2s0f88E7zc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.760.tgz_1491925246221_0.9999382498208433"},"directories":{}},"1.0.763-beta":{"name":"meetup-web-components","version":"1.0.763-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"b3482a3e9fe162357bbada8d3fe14f1ac9e8c082","_id":"meetup-web-components@1.0.763-beta","_shasum":"39c827cb408782c107efc154510e504f2a428422","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"39c827cb408782c107efc154510e504f2a428422","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.763-beta.tgz","integrity":"sha512-shHom0NhzFUlw1KT0KlmVbZR+1V8aNhYbIOpe9auGXSDfnGT1U5GkA6ewmS+RhQWv0HH9UUd0yUh4oz82TmaBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBhKQQbdYVH+bUd0RMpaKtyiPX+oJ3Q6ZNLACUZ81U/1AiEAstcUYM+bFJ+Z3n7Ge2f5zvFxyhM6m/FiDzhxMsyGYUs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.763-beta.tgz_1491933238801_0.5784720096271485"},"directories":{}},"1.0.766-beta":{"name":"meetup-web-components","version":"1.0.766-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"2fb8191149ba3c19636b42b3acdee895a13a42e7","_id":"meetup-web-components@1.0.766-beta","_shasum":"084bdabc0ad6b4387c0a811213978ec73f5635a7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"084bdabc0ad6b4387c0a811213978ec73f5635a7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.766-beta.tgz","integrity":"sha512-X9VvmzwUGYNEjbZ1k/qb00H79u+HxcEHv//zw3+d6K/xtQdU54Qr2z6+xYxb5ifer8lZ4f1mjFFP07UeAl5JHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFdJsHiLwutcVy5hG/rUjA7KLWPCa2VkLsPEn9gT/ViqAiAm1iklCEGkwXsj6mMUZEq+BzaEXsl1tSl1Zg8HLH10pg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.766-beta.tgz_1491934006547_0.5267897595185786"},"directories":{}},"1.0.769-beta":{"name":"meetup-web-components","version":"1.0.769-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.122","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"0307f159b1fc289eda96230162a6de1bf1da8045","_id":"meetup-web-components@1.0.769-beta","_shasum":"a09522e115f5862f1caa81e7bd4f830c732389dc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a09522e115f5862f1caa81e7bd4f830c732389dc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.769-beta.tgz","integrity":"sha512-BK54kc3S+tU+VpGownN7UzbN8hHl6Uve8HgBw+OL0+kuKNP6WFGs2SE1s08kAeplvnAvVf2OsdzLX8fGeLDuTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzvjBy32+Vynte5AhNs9R1/ZW5Df1Bg+DrU2Og7r+4GAiBXBbgpLGYKkqAugR7z5yjnDd/xSTRnKhTikT7jpx1M+Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.769-beta.tgz_1491934833636_0.8665647110901773"},"directories":{}},"1.0.772-beta":{"name":"meetup-web-components","version":"1.0.772-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.129","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"405c521a37d91673a9505a702b7acd81f4736b79","_id":"meetup-web-components@1.0.772-beta","_shasum":"60627c41b81a87c5fa9bf6dc810cc4d96e9d2d9e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"60627c41b81a87c5fa9bf6dc810cc4d96e9d2d9e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.772-beta.tgz","integrity":"sha512-Gf1jWHgBAWAkJi9/F/72hFitz4lAW9p/4LM4vhGZ6hL06fLRxod007XC1hhxBCZqLDhwJJbagaGlaKTfEl/14A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYTIq21nyQzfJjrKo3GcAhgyXdNGmhxPcyID3EIIIcbAIhANaOdAejq7k53BpHDA6ugJKq7Sgc3n+kn0PgozMZIirU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.772-beta.tgz_1491936742486_0.46861718222498894"},"directories":{}},"1.0.775-beta":{"name":"meetup-web-components","version":"1.0.775-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.138","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"a9efdae19b49dba4afcb83271520e6a0d0e63530","_id":"meetup-web-components@1.0.775-beta","_shasum":"a654479d583990841c5e623e49d8fdf417d5da52","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a654479d583990841c5e623e49d8fdf417d5da52","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.775-beta.tgz","integrity":"sha512-YLgPNZEaerqp8wgDyaKkxERngNP9gXPiCcqlLkgJvSzmHxrUVvrZJ8ctYu3gvbIPErdvri6Mq+xohMgmAiy7BA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0z6z26mgAq/yQDp9/JGoNWwF8eqBPq+f+ilnbqX7o6wIgQ4+1x7vb6iiqiH7LEpvu+xaAM2B6G+5TQHCuDilbciE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.775-beta.tgz_1491941836605_0.25242420146241784"},"directories":{}},"1.0.778-beta":{"name":"meetup-web-components","version":"1.0.778-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.138","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"155a60a10ead51d701795c6be220478a3a48d37b","_id":"meetup-web-components@1.0.778-beta","_shasum":"a1effcb3749cf9516b9f7ad64d15cda7f4fd488a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a1effcb3749cf9516b9f7ad64d15cda7f4fd488a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.778-beta.tgz","integrity":"sha512-Ytg+lgHn5zajfvm2u3+BVsTZOgYobIK7ghzuISkKCxbiVRsJFFnT4hoa/THSd32U0FpzwA4ZOJq/qivAGe0bhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDydPTwAlzvij6yG+BRRgh1OEcRQP6LosooYGYRtbPusAIgUs5kaihrWiJZRGTPKXgWS3oGcGGL1ZMpk2oj+suCito="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.778-beta.tgz_1491942410702_0.5058093729894608"},"directories":{}},"1.0.779":{"name":"meetup-web-components","version":"1.0.779","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.138","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"16c94b247df1c23fc4ce17017284c952dbf5e85a","_id":"meetup-web-components@1.0.779","_shasum":"6f34261a00ecf88bb5faecda550da90debc85d9f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6f34261a00ecf88bb5faecda550da90debc85d9f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.779.tgz","integrity":"sha512-5IcSTIhrmPfK6hH3DKL5m9AeCHj+443gQKPVz3TkSW4odA/Aucoe8yUIDXO8Chg01uyfhw3b8z1m+z/f+Zr11Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6HSPDnaBEKNoswRNpGmikI853+04/3k6g8fIOo2sv3QIhANxNaxwrFM1pLG97igt1GaDT8895Tg15qgEtoD7fAanx"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.779.tgz_1491943155616_0.06859219237230718"},"directories":{}},"1.0.780":{"name":"meetup-web-components","version":"1.0.780","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","install":"yarn run build","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.138","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"815e041729a529591cac534ecc5e7ca6eb80ff02","_id":"meetup-web-components@1.0.780","_shasum":"2f643f8134b9a7672f0dbc33e27335b7e68e29f5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2f643f8134b9a7672f0dbc33e27335b7e68e29f5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.780.tgz","integrity":"sha512-ngczJGxoNTgprEGYFwM9G3RxMkB0CADjLS3+2caPYFkpDQWzGfzgUs8kC/mrvHU9Y+oXw9cXi2XJgeLbB2SzwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAkApyhbXtUT1JUvC8Yww1+pwVReFr3L/Xjx1XkxUM7JAiAhtDsDFvwMn7hwyaw1BvtWrrPwSMCCsOTeetnJCGrj3g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.780.tgz_1491944112912_0.5165735767222941"},"directories":{}},"1.0.792-beta":{"name":"meetup-web-components","version":"1.0.792-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"46cccc408b1abfcd89eed3826ab3095d3e2a3cf3","_id":"meetup-web-components@1.0.792-beta","_shasum":"65115966ce24ef4932aeb5590013dd806f9b9649","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"65115966ce24ef4932aeb5590013dd806f9b9649","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.792-beta.tgz","integrity":"sha512-oyAoPAWvpGLogFXZrKc4VCExHWyjc7zvcyS6ScAkKDFda0a244P1/8TVCvPsn2y3FURSfybnT3JNsOyxOwT9VQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/LL5l2Ay2zFLki2VvDZmNWES+FUSCUOYbR+CfmNkmUAiBw0JaJcedW8iKaT3rk2jlVv1pngA6pA7lY2gi6Qga6Dw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.792-beta.tgz_1491962000988_0.9575406133662909"},"directories":{}},"1.0.793":{"name":"meetup-web-components","version":"1.0.793","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"bbd9e0d7fd18da147f2e2094d1dfbbbb57cb9fb6","_id":"meetup-web-components@1.0.793","_shasum":"5dd5dbef441af83e9fc71456d7e8f7d379b76ddc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5dd5dbef441af83e9fc71456d7e8f7d379b76ddc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.793.tgz","integrity":"sha512-giGGqgIFaN2F7LcDEtCjOp/8SHzWXCBf0VMrC2S1kdj8cd81Bg+JofAaZAOK9qWt9b8abP/QY9uTqaMIDkyUhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCX/QJbvbqUHM6P64r3A+K2IdP3Dn6Xy9toztwam4nocAIgEJ0/pgJE0edPeS74ZnxLROTUQTEkVcYilj3+5R/RZ4o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.793.tgz_1491962485592_0.7006226524244994"},"directories":{}},"1.0.795-beta":{"name":"meetup-web-components","version":"1.0.795-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"04c24e87e04855e6b53b41bdd68ff81be1e48b03","_id":"meetup-web-components@1.0.795-beta","_shasum":"3fc3ffeb4933f303df222b2c6d6631e84fcdefe9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3fc3ffeb4933f303df222b2c6d6631e84fcdefe9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.795-beta.tgz","integrity":"sha512-0+B2eQbkP37D5PILBhygebi8Vhs4jfo4KWLEct/XEJu8BbQ4YhAuTxdFasEc8qFlkjJC4kKsMPDJBRapf6LR9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAurMEWIVvcKWq/qhXEAMYAJgQ31d4wEAeJsQysDG8TBAiA+Jk8jmuRmhcf5T4qBSv0KqoyTv3vtLK0b5Q/FXvZIqQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.795-beta.tgz_1492000158109_0.25056308531202376"},"directories":{}},"1.0.798-beta":{"name":"meetup-web-components","version":"1.0.798-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"d281b5ae3d1acc615fda7cc7189dde3213e8b8e5","_id":"meetup-web-components@1.0.798-beta","_shasum":"9682414e8b93baf2facab35259558447ac6b3cc0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9682414e8b93baf2facab35259558447ac6b3cc0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.798-beta.tgz","integrity":"sha512-4IA1TIayBS4gr18cphIC3Q8eKTXhD2pSanWaOoDDcYDKIYssPU7vS23MD/GJEkTGL70W3eSW7t05YqmXVKn5XA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFRHhh0bvI/8DvbTus3EzttyXObYe76zedGHGJDvvzFgAiEApfoRLDkeK5oBTyqJluO+/i6kc1zZGjHqz/XJQGl5In8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.798-beta.tgz_1492011238443_0.8406756778713316"},"directories":{}},"1.0.799-beta":{"name":"meetup-web-components","version":"1.0.799-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"9826359b57d089417eb1d296494f2ba8a2f8a76b","_id":"meetup-web-components@1.0.799-beta","_shasum":"6a8ed9ae79d78b820f5a36e125757048d39abe32","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a8ed9ae79d78b820f5a36e125757048d39abe32","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.799-beta.tgz","integrity":"sha512-+l1+chklWVgvNb1fQr+krw9TVqLR7ogpMwQwEejij2gCwM+21/VcwSOkqSb0E/FDyvBR6LluGFQ5j1+g/nmJbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6Qx1gTIJ7dgeJvWVbaGZ40ruPgV3ObpZQqC3P3EsSggIhAI9fOijgH5ftJB4cWsQ00mDAt7xv8U4eQT68JSpJe1TY"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.799-beta.tgz_1492011251281_0.49632644071243703"},"directories":{}},"1.0.800":{"name":"meetup-web-components","version":"1.0.800","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"5d6adf7e7e3df584329f4a61037165c62151cc3d","_id":"meetup-web-components@1.0.800","_shasum":"e881314cdbee36a01d0c1109df977376eb33c972","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e881314cdbee36a01d0c1109df977376eb33c972","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.800.tgz","integrity":"sha512-imjRVxx5wSIBCLEiziExHE1JAfj270y3jfC2hq/VrDxxBSo7myg7pOtfMGm1S75JTbWGyYUpogOPWNhKu8B8ag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+n0zY4AZ/lIQITR6fF5AE5reLYd1+vCxMh0xz8h5TzAIgUfUMx3oKbTzsaXpKLe+rABbUtdFDelQvgydtqdwFUDA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.800.tgz_1492011416649_0.5232712628785521"},"directories":{}},"1.0.802-beta":{"name":"meetup-web-components","version":"1.0.802-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"0794d95f1c0be423c7d74e7df3e867aa917773c5","_id":"meetup-web-components@1.0.802-beta","_shasum":"cc827f513afa380fb68bad71089681a5effde06d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cc827f513afa380fb68bad71089681a5effde06d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.802-beta.tgz","integrity":"sha512-vNsXpbZprw/YctTZgQw+CP8eNoTt9fTN9soHHTg91AqAW8YzCsHZqEG/7u3jIdt2dsvOZLXxrrJSarHwACQDCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBSjATjptCYf7PY206dKe0MfdOsrjNjRmgbxunHdlw30AiBlCUirATTf2WkHaXeUH5SZlAkKofLImjuHMAiMa+mPXw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.802-beta.tgz_1492029038632_0.41242386400699615"},"directories":{}},"1.0.804-beta":{"name":"meetup-web-components","version":"1.0.804-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"fe984c8c20aea3aa19c2f0a6ea7f2f789bb610a5","_id":"meetup-web-components@1.0.804-beta","_shasum":"efd7138a789c372f82a8a309a4998f6955a20413","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"efd7138a789c372f82a8a309a4998f6955a20413","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.804-beta.tgz","integrity":"sha512-Libn+SyOeD1jVy1wa1aIqVZ0Ipaw4jTBS1LSz0p0efgUpXaDOTnNCtbJ/Px0kjigp/V/xjwmyKfwJXAbPAZiXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDPSGZESYJySdVe0oLswXliQj5vdsrgm5EV/F6jL2wKWAiEAt8jYH8D6iMZ5gZmOkuAljriVnIVA36GxhJedtDJvrsI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.804-beta.tgz_1492030851492_0.715933085186407"},"directories":{}},"1.0.787-beta":{"name":"meetup-web-components","version":"1.0.787-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"e4061512c7dba7fb780b15542380f99f2f490691","_id":"meetup-web-components@1.0.787-beta","_shasum":"21913f2a9e896713776ca31f49b1368257eac00a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"21913f2a9e896713776ca31f49b1368257eac00a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.787-beta.tgz","integrity":"sha512-ImdfMgfy2oSwPpd5I+6uFHkNMnH4Tl8YhDrQm2dWRJfX91lZMv9OjJ1fAgbXx6CUv5wFMmbbgjNCtBSNLOMKOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAcvORZ1SfaTsilGWNSE3Ksun5Pj4ZU4Qx+hh0yumgoqAiAId433SiIjqALXtPVAuRkxCCdRUV7i0oO4vXNYV1ik6Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.787-beta.tgz_1492034117793_0.2443445937242359"},"directories":{}},"1.0.805":{"name":"meetup-web-components","version":"1.0.805","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"34167bf610d23b1cdd0405f9d4e33d2b33fd5329","_id":"meetup-web-components@1.0.805","_shasum":"64e71fce87a6e8e9d6fb310b733c988983d32bf4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"64e71fce87a6e8e9d6fb310b733c988983d32bf4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.805.tgz","integrity":"sha512-IwDZ8tvZ1YolzlJMgAqqVwrH487Za1hmHHTLKJ1byL+wLtn4fiX39tqLuNVChFOV4qOpCKqXApL3OxELAKdzxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDZ0H+4AP4Ok+cLYayUtuVGukKQPpMNqdShr8h44dGzrAiEArUL9uDeC1nDQGK2iYRQugraOODW5IU2/3xZsgR1aZVA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.805.tgz_1492035668559_0.6915953462012112"},"directories":{}},"1.0.806":{"name":"meetup-web-components","version":"1.0.806","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"8a768e724d8e08abe9328354f0b2b6641c5a50a7","_id":"meetup-web-components@1.0.806","_shasum":"16a0c08b3433e401d541437671188d2d182c3b66","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"16a0c08b3433e401d541437671188d2d182c3b66","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.806.tgz","integrity":"sha512-4nPz8DFCfuj+hQvTK53XJYMEStMAuJsB9n82dkDD8xMH8pwewAWYjUDmP8GrcglL1lftzwr08vQWTWDLBfPszA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0MIdgdA/c+rIrh1EyBMhYHdIJ0EK6zIzJ2YYMLpHhNAiB3k+kqA61uRoi1FMqEDjHOAgR689vsRym6fLR7qUKj0g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.806.tgz_1492036185291_0.4671398049686104"},"directories":{}},"1.0.807-beta":{"name":"meetup-web-components","version":"1.0.807-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"8bbbf74cdba1d003fe927a17559c4caffe9fa6ae","_id":"meetup-web-components@1.0.807-beta","_shasum":"fdf6fd0aea1da168a0a4b5ede97d49bf610c25f7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fdf6fd0aea1da168a0a4b5ede97d49bf610c25f7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.807-beta.tgz","integrity":"sha512-A2Xn8EQKCudjAqlkfmqq/w3ODYSEavE7u7lGFeZ6adoODupm9qRodcNP9Ppl+392DEg9bNwjlcNXVE1ZVMdSGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgehLsfisscc2D4lCJ0IQOm/cYWljxNbbLJwfQGJn15AiEAwKVzBTBHEAXM2t6hWz9Uv48DT6KfRd58JYBjrUVy1tk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.807-beta.tgz_1492036755116_0.8296212572604418"},"directories":{}},"1.0.810-beta":{"name":"meetup-web-components","version":"1.0.810-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"2d30e2228403edf5dece948b88ee66f1b384d8b6","_id":"meetup-web-components@1.0.810-beta","_shasum":"81ce50dc7dce4e2e9edf9e81945b67da9a3679b4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"81ce50dc7dce4e2e9edf9e81945b67da9a3679b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.810-beta.tgz","integrity":"sha512-zQfyUueXgVhumnMCKDXOTq8NLOIpNIAWLaHESdTCqtq/z8tEZ9mbTerw4BpVQTUqxPC3/VcDmRE2RkndePktdQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC465lLLALav7DnNW9U+9Dwvx1frrpt6w7OEM6chiK4pQIgKUet6Z/sozxKS9fjWMfNT3mt4EPzBjkwLDusTDS02zc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.810-beta.tgz_1492038099492_0.2408364457078278"},"directories":{}},"1.0.812-beta":{"name":"meetup-web-components","version":"1.0.812-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"fa7c5b7e57e76770c47c0bdd634d5c8a79db4ad4","_id":"meetup-web-components@1.0.812-beta","_shasum":"9d7923e3d9b6c41e58f982e83a19ec97e8768835","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9d7923e3d9b6c41e58f982e83a19ec97e8768835","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.812-beta.tgz","integrity":"sha512-+/azQhl7Ji98Htaq54f/LaBBksnUeAZfBoNF75844TLKK1cc/liUIx2vXUQa2jIrlYxgRk8H8S0h/i3//j8Baw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEb3yYaPP9jY3zyuZ7U33itMdqfW0rz6SlkryRXZ4PkHAiEA6KqgjHQIlHiMDNObuL4j4livEzZ6PNr4AXNjW3k6/4k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.812-beta.tgz_1492038226074_0.28602771181613207"},"directories":{}},"1.0.813":{"name":"meetup-web-components","version":"1.0.813","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"86ef08e62cfcf86637b3a3132b56a5335960ec48","_id":"meetup-web-components@1.0.813","_shasum":"45abf4bc108c65cc40c4c15a89c015b6decb86ee","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"45abf4bc108c65cc40c4c15a89c015b6decb86ee","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.813.tgz","integrity":"sha512-LY15nXw8qzo9gOb1LIdRsoes2Rmj9nSrdvzFjAuN8PS2pfSBf0Tvo6lzWXsHJjx3++01mG39PWb6SmSikJ58Ng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCD76lsqNFl1VUtSaoBT2vzr+JXpV47JvXVqMReK3nGAiA3ooFrDfmO7f4Ss5GvIPlyIIU8QsI9V5jix4+JRqxmcA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.813.tgz_1492041272306_0.20875780540518463"},"directories":{}},"1.0.815-beta":{"name":"meetup-web-components","version":"1.0.815-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"128d13a534da6db026e039fa3022c3c4349653f9","_id":"meetup-web-components@1.0.815-beta","_shasum":"859d336396a68cc89dadc73918b7d31924c99ef9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"859d336396a68cc89dadc73918b7d31924c99ef9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.815-beta.tgz","integrity":"sha512-pj4XPVOsiSYGm338GI5PIyuK0SsGrcx+WGUT94DD/z4pE50GasRSqPYJM/xWn9RK0HgG8FR4ZONcwaUBLRJjnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYNUsHzo61R6s6960A1pE++bTMUsVwysDl3I9tTp9whAiEAuKCFBuuZ5q9XNfz5rxvXKTxS/eHEEiZp6yAGe85J0yI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.815-beta.tgz_1492092851331_0.6837245102506131"},"directories":{}},"1.0.816":{"name":"meetup-web-components","version":"1.0.816","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"e439095b96dd50510a85d6b6a5dfe415f05ac479","_id":"meetup-web-components@1.0.816","_shasum":"576acfc46883b1804dedd94ac3c5fc8cb027af18","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"576acfc46883b1804dedd94ac3c5fc8cb027af18","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.816.tgz","integrity":"sha512-EWnC7VRILjMTllBWK7ZAQ0ZI8aVKBh26npbt1Gi9cPgqbCZgNDErgTHPpMm4+XjVvglbG1rBEWsQh8fdvCO4EA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFivn97FVJyAjznJacOx5PvqW9GsuVQVzFF+kReDyoHSAiBQQOvp2m5A+YvwLfmL451KCoYzFq8hYBuzONm7T0qTmQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.816.tgz_1492094338917_0.007746606366708875"},"directories":{}},"1.0.818-beta":{"name":"meetup-web-components","version":"1.0.818-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"1bdaa32cb7884ae17be2a7dbb30faf6720fe949c","_id":"meetup-web-components@1.0.818-beta","_shasum":"113e5c9cf8ae6ebaacfe64414fbf220f3e691aa4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"113e5c9cf8ae6ebaacfe64414fbf220f3e691aa4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.818-beta.tgz","integrity":"sha512-qjsU7hHIsgtFb/7MSix6ocmG7r06QiQHpEcF83axZarBYHbbzr+NXqui0mXT3lmBLtwoKVRSeACSg8B4weye3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHB1KOMuO2htEA+7AapBUFQ24iO8ci/unGzFhJyTv0NAIgF+fAG2oZ6yhRDkHDMwxNYNBN6eSgfmofFUYLg1/rqzY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.818-beta.tgz_1492098892985_0.5943404657300562"},"directories":{}},"1.0.819":{"name":"meetup-web-components","version":"1.0.819","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"af2b1bd75134bd72e5fc31e4fb64643a858a1964","_id":"meetup-web-components@1.0.819","_shasum":"af55245db10a9bbf770cbf0e5ccca4e00e73065e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"af55245db10a9bbf770cbf0e5ccca4e00e73065e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.819.tgz","integrity":"sha512-S7YIgkoVrxCYMq+ad/clRirWdIy+Bp+4OWrvtg9sSYniXi9dBkjutQILcS88nYKNI2o7PrLX0D6rGe2H4fhU4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDU57xJnVQngmwEB5k20IYRRXueOFqUs5E4zcXNZXTHJQIgVXWQ7cwoTGz8hkur9zvdpVdjcbQAVyQPgRoLkmO7L9Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.819.tgz_1492099051335_0.8562058785464615"},"directories":{}},"1.0.821-beta":{"name":"meetup-web-components","version":"1.0.821-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"85f1c5e5925faa8fcc14327317ee1e55e28d5700","_id":"meetup-web-components@1.0.821-beta","_shasum":"4f02b6eb5f31fedf123d3222a6367844bb54126b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4f02b6eb5f31fedf123d3222a6367844bb54126b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.821-beta.tgz","integrity":"sha512-q7vKbrryXeQrjQ/Q7c8jSL8D3unCzMDcAPtE5JvB70yta0n/q3RfevPGluPpFwimu7hGW86QbSWkt20nJBYATg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEjk6jAC5+L+yQ4DOKHEDGm8nIaoKk+go4hZrg5BB/pCAiAnGjMhmdKKcyO1LfcuYyW9poI+zBvJfvcO48z+jnH+wg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.821-beta.tgz_1492121422252_0.717111699283123"},"directories":{}},"1.0.823-beta":{"name":"meetup-web-components","version":"1.0.823-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"ccf06382191e2b1391fb58b6f978d1c9d39f69ed","_id":"meetup-web-components@1.0.823-beta","_shasum":"5406167b99e288890fe4ddd7f255afaf87e1b4b3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5406167b99e288890fe4ddd7f255afaf87e1b4b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.823-beta.tgz","integrity":"sha512-1wDoyv36t3OpFXsBpBez/8SlH/GFqza5Ulkdnva7uOzh8u+30lD9JNiFGp+gsPw4Hkng7mwGgka+mRPf8EWtMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsJYluft8TLPSHrBWOJxv3fM80mOjbiAUTAHD7nbm51wIhAO2CvYPENeaF/NN0uqj/YQ5YjUNHtDyykQT3GJMpjCUw"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.823-beta.tgz_1492182932254_0.3817143684718758"},"directories":{}},"1.0.825-beta":{"name":"meetup-web-components","version":"1.0.825-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"a76e926e8d22a52a59700f2689fb5a07aa4de623","_id":"meetup-web-components@1.0.825-beta","_shasum":"3d40c0448feeae3fb9ecd32da2079a47287508c9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3d40c0448feeae3fb9ecd32da2079a47287508c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.825-beta.tgz","integrity":"sha512-ieu/izHHjWoAuMbKuHrE9ahhS51CNwWv50mzIJ6Fjz2rhHfhp5VCYS0Y40ZVrwhNVAsOgO5EHnzwN8OWpwDJcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqT7G0lWTAhQjv9AcGzljkwMY9bFwVKbLh5GWBD/VHKAiEAuBkffeC9tU9mfYvzdlxcSKS2m4YvmEQVVyvxdLJaTV4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.825-beta.tgz_1492185137079_0.6000268959905952"},"directories":{}},"1.0.826":{"name":"meetup-web-components","version":"1.0.826","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"993aea85dd3e6f20ceab713c8b711a80c3d3d8c1","_id":"meetup-web-components@1.0.826","_shasum":"29743c4780de5c42d5e271c30d04439baf54a7ca","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"29743c4780de5c42d5e271c30d04439baf54a7ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.826.tgz","integrity":"sha512-sr9Z6hR6xHlyKM8EwprUyLrA6CayPCgzLqsdbIcKK8wyVGSPNuC/TuWqzNZRpfC89ozOo4kg3jzbkL9FQ91ZXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGE8shDyVpN9NClkPivJg6N1cCAb5h+inxVAa88RNGbTAiEA//RT+qEnDytIySKDyJ//0j/xjG8afP76EYut3AIDcxk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.826.tgz_1492189917893_0.6087384254205972"},"directories":{}},"1.0.828-beta":{"name":"meetup-web-components","version":"1.0.828-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"aef81e4c178403174b871e4ec956fe5735cde7ae","_id":"meetup-web-components@1.0.828-beta","_shasum":"cf5200aa5c8715fd7d97bbbed780f3211a4b7eb9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cf5200aa5c8715fd7d97bbbed780f3211a4b7eb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.828-beta.tgz","integrity":"sha512-iFIjeCTyP2YbfEvNXK7E1yzzb33Kb6BOjXTLO1Pa3LqSjZMsTYoYtZsX62E/IBdGkiv4FjAjcrE6d6fUuoXMrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlHgbcCyJXLBorEMQ+6YHYI6BjtkTj71iYhdWGp7S09gIhAIXLMJoeHp9VHw5HuBgZFr3VwKjrNXyMRP+A61jKDuz0"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.828-beta.tgz_1492201215594_0.8848955801222473"},"directories":{}},"1.0.829-beta":{"name":"meetup-web-components","version":"1.0.829-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"e84a294b6ae822134d279e3ee63c64182dcdcce2","_id":"meetup-web-components@1.0.829-beta","_shasum":"34061fb4a3d4ac838554d3de7ff8ef7e37291b21","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"34061fb4a3d4ac838554d3de7ff8ef7e37291b21","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.829-beta.tgz","integrity":"sha512-b9aP5Xub3yoyVe4qkJQy/U8qV+hcXv9E65jJHVriT813LcM/gbib81so1PCBR3OnIoosFKzKXyJI//aF9ric9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDK/GyJTbMuue2UEH64qt2+Ip47639nZPFYInR3CTMmmwIhAOkV3xqbhhZXzmkUtdhOH5HOgS5r7xHNOQsEPCmVquMN"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.829-beta.tgz_1492442366555_0.7915327202063054"},"directories":{}},"1.0.831":{"name":"meetup-web-components","version":"1.0.831","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:unit":"jest --silent --config jest.config.json"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"7f0f697e3f35f9f6997fafcff1e074122cbb6442","_id":"meetup-web-components@1.0.831","_shasum":"e6b067ca12063395ca7bcb4df0c8167c36248112","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e6b067ca12063395ca7bcb4df0c8167c36248112","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.831.tgz","integrity":"sha512-gEy/ASHs2qjZDleC2MWs7J1kXzm92okqVRcnwTuADQRKVMITy8G9z0YfQI8eOv5/79P4xrk6MH22WHTzLxeHoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNbu8LqRIgca6K1jHA12WiLB4bFwDkeMTRFdNUlwrRjwIhAM3VU50ffIYrXpTChnHni67cn+LzDZAE+Uy5kZ+RNKUe"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.831.tgz_1492442841077_0.4308217391371727"},"directories":{}},"1.0.832":{"name":"meetup-web-components","version":"1.0.832","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"4a642051a96ce38f04ea9cdd8ca37487bb6abcaf","_id":"meetup-web-components@1.0.832","_shasum":"0a684979a2884a89b7763775ba7ec9e8f41c18c0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0a684979a2884a89b7763775ba7ec9e8f41c18c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.832.tgz","integrity":"sha512-dRmrb42nhJYwqTSl1TyergH1hvIB841UXPIi1OC03Kzsik83cD96led/StIWgVujJlPJdMkAfbMjmteLNytNfA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBY/5jYQ+RHQ2HoRYxfAfutMjcLQsCUoYMIH55RndG8RAiEAzK1iU/huNYZoF/56xuEGBB636PyXDjGBo7L3yV0Xb9I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.832.tgz_1492454933773_0.1157887673471123"},"directories":{}},"1.0.836":{"name":"meetup-web-components","version":"1.0.836","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.4.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.161","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.3","react-addons-test-utils":"15.5.1","react-dom":"15.5.3","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.13.2","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.3.3"},"gitHead":"c984112a2ebbe18c7e053a861da5db3d50a0ab13","_id":"meetup-web-components@1.0.836","_shasum":"43016b228e83c6619c895a877ed7e02b3c7811e7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"43016b228e83c6619c895a877ed7e02b3c7811e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.836.tgz","integrity":"sha512-xS8Y8ebsuoqEjJz6UooqAfeuUf0izY4/l9N80CBKyk7Vu0ZPzziifoiy91IY43H7kkpy7frZ20TeoId/JLtwBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMIhsTPDmx+tPq7yxqf7ymBZexzBF1BUdYQpzNlnimFQIgGllbD5980/c1Ql6ozXiuB1wadhPuc54GWXqqOeulISc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.836.tgz_1492468724682_0.2854102021083236"},"directories":{}},"1.0.842-beta":{"name":"meetup-web-components","version":"1.0.842-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"cb776dd619b5537e2878d0352832e8d3c81c2d9d","_id":"meetup-web-components@1.0.842-beta","_shasum":"fcff6cc9c53aca2406b521d8d2a073a0c5e29a0d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fcff6cc9c53aca2406b521d8d2a073a0c5e29a0d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.842-beta.tgz","integrity":"sha512-itjTwP3IaAMCDRm164wRbRQhy/BRbeB39Jx8nzE3MsRzmbch17GP4xpUppIw3u1K61JXw8r+tcl2lcWkzot7SA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvDGI5w1LUP477/+e0G+fGfpKhdNUQ9gpy7NXGlKEtTAiBDi6gVkUlo39iKQMWa/XBkNIy0+Repyd7QJeqIoTiQaA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.842-beta.tgz_1492470279863_0.5760283784475178"},"directories":{}},"1.0.843":{"name":"meetup-web-components","version":"1.0.843","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"26f0b3ae48742255bee5325b79de611b61ccd5dc","_id":"meetup-web-components@1.0.843","_shasum":"5d430cd29b70aa3895354ca8c4e521a5c200b137","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5d430cd29b70aa3895354ca8c4e521a5c200b137","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.843.tgz","integrity":"sha512-RSN5Ifou5zYJAmrel2l9AWoXLy3iCdn8ZF1lpswZMvjv0+5HVrrg0dAf87VWBKYKheGIhQsFGwCSYVCt2hEQwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT6sJXYQ5JsQqaTU4p+k9iQmrjAzMEzwNqaR/YNBtNjAIhAIMkukb5R6/tIB90BLf9/dyhYrqbqSkk5tG9X0tVPFJG"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.843.tgz_1492470615790_0.704664399381727"},"directories":{}},"1.0.844-beta":{"name":"meetup-web-components","version":"1.0.844-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"04f0968a3e8a43b0bb22f213df3af468afd61980","_id":"meetup-web-components@1.0.844-beta","_shasum":"6c68c2703f70ded50153146cb9bafaa4c499a296","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6c68c2703f70ded50153146cb9bafaa4c499a296","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.844-beta.tgz","integrity":"sha512-CDgffN2MkQctk2yf3wdW7LxBJhVnn+R26Qg1um6zjw9FvImImhPIQp9q2S/5BprsYtQH/JqwYPK1L/2T4/6iEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxNxj46FKOIc7wKbAvojLieqLJoTSy9/emkqzcnYencAiA/p+YagPGUlS9OcUeGXpgiVbJ/P+XjlbSCSwXc7kP69w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.844-beta.tgz_1492708240927_0.2362666605040431"},"directories":{}},"1.0.845-beta":{"name":"meetup-web-components","version":"1.0.845-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"df726e2481e9209c72c79dbc7e6d8a93e25c4df3","_id":"meetup-web-components@1.0.845-beta","_shasum":"47f7fbef963d85853268c9b8db71d25aff611ba4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"47f7fbef963d85853268c9b8db71d25aff611ba4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.845-beta.tgz","integrity":"sha512-iNTGE+11VILGAQsSTewGmRvogI6YwiiH7z4DcyTnu7Vj3+ot/pPOaZBiO1e/0oQ1vkDC8IGjyY+CWTFugA+huw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3zSV0Ridp2Wnw/L5VG+h158xKcOqeLs+g/jjvmWn+pQIgWEapMniRsfyD+Dhb5rV8Jkx7NogLAQgA8I1EiduCt1Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.845-beta.tgz_1492708251439_0.47013563313521445"},"directories":{}},"1.0.846":{"name":"meetup-web-components","version":"1.0.846","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"cfc91818f4b69814cde3290e82577c2fbab9f835","_id":"meetup-web-components@1.0.846","_shasum":"db43b663b7fa7ef5d7e633af1ef6cf2a554555bd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"db43b663b7fa7ef5d7e633af1ef6cf2a554555bd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.846.tgz","integrity":"sha512-QGMucZWbNgJ3L8F44BGckD6zFM6Ny3sjyTjfySIoYugkaBPvw2hYViFpk2SGkrwUWiE+S9dDoUUSSpAZJExb8g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6eZA4FUO1AaVrPcU0Eb0Y8Fkm3Rn4NnSDE0Ru/hpK6AiBNN3ymcnvraPbW6fOjlvObqQT1tkOYSGXy0avOJxJQuQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.846.tgz_1492711321446_0.7736883847974241"},"directories":{}},"1.0.847-beta":{"name":"meetup-web-components","version":"1.0.847-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"25d85aba4e1b1b80791b2b525b311024963c5e15","_id":"meetup-web-components@1.0.847-beta","_shasum":"7ca48e5cb32843bece6fad5dcf87e8b360732854","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7ca48e5cb32843bece6fad5dcf87e8b360732854","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.847-beta.tgz","integrity":"sha512-66AhV3f6jRpOT5TcEOmQHs+0iFe7k6OxjoYztzf+lCueC5UfEFESHZSl9JN8PviNDgBh2DPz9pVfIcBjfw5+9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdFyEB+LZWvCIWAA+9DuKh0pOKos1SgAR1/yxpkvv31gIhAPhreArZPASnm9ibfGucH01j4Fyiino9DkMdazLDnVIp"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.847-beta.tgz_1492717769967_0.634629332460463"},"directories":{}},"1.0.848":{"name":"meetup-web-components","version":"1.0.848","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"b1294d845f113ee2ab0dfbe578fc85a99e5392a8","_id":"meetup-web-components@1.0.848","_shasum":"ba63e2fa50fb734e8afa7baaec4194cf68df426c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ba63e2fa50fb734e8afa7baaec4194cf68df426c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.848.tgz","integrity":"sha512-4qKk1AgTjg+/hw1hWknQ4SNiW22eStOzXhEE6RUk0NIiOAQJn4Rg7vTpIK5sfefLnI5+MMaUEmNhlWLA91j5oQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXFs6xszeOnVPhvbuclTlxNc6rIN6YKe7k6WuDofpbGQIhAIThkuoEKXSnwFL35KifA3FJ8u5BeS72bjZoLL6Rpzpo"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.848.tgz_1492718339467_0.9781304688658565"},"directories":{}},"1.0.849-beta":{"name":"meetup-web-components","version":"1.0.849-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"86d0735cb053d9f4c5c002eca2c8f58a49e6f512","_id":"meetup-web-components@1.0.849-beta","_shasum":"d6015f3665882e9a2f4eb645bb89261a71883234","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d6015f3665882e9a2f4eb645bb89261a71883234","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.849-beta.tgz","integrity":"sha512-rtj1ZOM7GMUzjQmLkALo1EIuTE8rTbWBM9nIBoJlP5ocaUsUBqOFIF5YMlknu5A64QtfXeP4bPsXhnSfC71oOA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHzEMiGwgA85Wi64eficB6RsCRgpSWFgxq8PYKdb7skQAiA2byww47cbO7ZXK476fdTbHW8J7zCuGBSdPLlt7WVx7w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.849-beta.tgz_1492722149192_0.8104890156537294"},"directories":{}},"1.0.850-beta":{"name":"meetup-web-components","version":"1.0.850-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"24effc6e229d950cbb913a21125cf9e74a9f1872","_id":"meetup-web-components@1.0.850-beta","_shasum":"6af7d7ddddd928a05945ad20a7fd6f31f7ae86db","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6af7d7ddddd928a05945ad20a7fd6f31f7ae86db","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.850-beta.tgz","integrity":"sha512-HQybagHjbYxebNfChxMvP18TPT54wZnAUFXoCEXS07GAT4HCJI0x6uCWrslDw6r9OYazQx5OHZRJs0+taeG52w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHMVt+YNue4dDPiqEQ9cvP/DZSJwS81bzA+QODPBYFtrAiEAjN7rws7NOw/Xo1bwk4+/a96vj306dE0nVyMb4PzUFg8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.850-beta.tgz_1492723517680_0.3556695736479014"},"directories":{}},"1.0.851-beta":{"name":"meetup-web-components","version":"1.0.851-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"0704629eb080b50c5b4f2be79889342e0f67a488","_id":"meetup-web-components@1.0.851-beta","_shasum":"2ccfbc144555501764a7636d96e50e09fdcb6292","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2ccfbc144555501764a7636d96e50e09fdcb6292","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.851-beta.tgz","integrity":"sha512-wToBfc15CTCeGriUaDMj1t5ScUHOYyBHl8tATYR96cPCSc01/0JI4Q/8njwmSHp2J+NFqsdTvRg+2AfJjjeW0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBnx17wRBznLngyjpFPGz/mCQlNRUFBxz0GjIyGXuykiAiEA/KmUStEOnClXnG3mmAywZFH7VMR0KVr+ZRktzx8RfvA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.851-beta.tgz_1492723922280_0.5384969096630812"},"directories":{}},"1.0.852-beta":{"name":"meetup-web-components","version":"1.0.852-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"15476ec516d553bb6fd2774c2a54a55fd7622d8d","_id":"meetup-web-components@1.0.852-beta","_shasum":"d35c75e6feed64df2261c372f243c671c9871f6c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d35c75e6feed64df2261c372f243c671c9871f6c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.852-beta.tgz","integrity":"sha512-rhjhb3BVQCRB0VqIXlwLW05I5JvrEzuiYLG0M6JLVovJ4obOdzKaUM9aFr9MxHQ5/um2KWCK23C+GTODeIY14A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGw0V6wNKwkg8BS+MXp8w7gnapVleEnSECRs6BbbHd5SAiEA+4gAWHCufIAKqXFj4Wx60isY71ybPApHT4ofs4WXsKI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.852-beta.tgz_1492784410490_0.64224464725703"},"directories":{}},"1.0.853":{"name":"meetup-web-components","version":"1.0.853","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"942fa534f3b6593d7f4e502f78310abd16643ead","_id":"meetup-web-components@1.0.853","_shasum":"fe567ff131cba4fc6ce6f398a9e2504bc39c9c63","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fe567ff131cba4fc6ce6f398a9e2504bc39c9c63","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.853.tgz","integrity":"sha512-c2nSpLoMzrrAVAwTZqhlSK3XV68I9ODHkgFGc/ShZt7ZG3qoqnmZy05IUHjiA2KT2gj8rfXyPtatMs+PtgqKIw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS8vceZxSMWmu8etvZyPwAvC9753JefZJ6WwgHZdVYrAIhAJQ0/0csFhlFetX1jcQa2Nyy0J/Zgz2ob69cSsYrSA29"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.853.tgz_1492788868563_0.3960515970829874"},"directories":{}},"1.0.854":{"name":"meetup-web-components","version":"1.0.854","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"710f8cfdea854a154cf47a63e6298fd58af8bc57","_id":"meetup-web-components@1.0.854","_shasum":"90acf9116dbaf4b219e8436a41e7da61940442dd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"90acf9116dbaf4b219e8436a41e7da61940442dd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.854.tgz","integrity":"sha512-MgCVNVQ3FOtyzw0x5qZlmLlRD+u5iZdtPM6gYUEANkya/HaSHeG6ghPKsRzkCOUBbbCJLLsfSuvVdAAAx3XKTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDXOSfAPdwtHY5i76LLh/9FvABsw71yHU/5GKY1Mh6WcAiEA43aBjH1mcHRejW/1kTJHrDaUGJZXtos/nTBMxEnkWpg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.854.tgz_1492805643611_0.791928679915145"},"directories":{}},"1.0.855-beta":{"name":"meetup-web-components","version":"1.0.855-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"6673a4515bc22f1d53506bf8c5603d61eee02123","_id":"meetup-web-components@1.0.855-beta","_shasum":"fe49ab23f916e2fcb9dfb02b953919f50cde61a1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fe49ab23f916e2fcb9dfb02b953919f50cde61a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.855-beta.tgz","integrity":"sha512-zs0b11YN0dmPpj0DPMpQxetbb6lg/xfNVJn1d3oaEYgED8dNWkZI4P1EhPEJsw1rjuZFZKNRtBqsCMd5ldpF2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBrD/tzeKVU58nQkS5BQfy/hHKDBnEgvR7OQ28yQzQv0AiEAsDniN77k6TUazDrXRj+3AH5k7dUO31+F4raLttg9xrI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.855-beta.tgz_1492906211334_0.8704203784000129"},"directories":{}},"1.0.857":{"name":"meetup-web-components","version":"1.0.857","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"4d301c05c976fcbbdb09ed25cae1d2af8ff116b9","_id":"meetup-web-components@1.0.857","_shasum":"5e86aebc0c17580ee377c282369b27f7316312d3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5e86aebc0c17580ee377c282369b27f7316312d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.857.tgz","integrity":"sha512-VBboHnuTHSvv3EItyEwm2QfhJiL4Wtuzvfx4WwoOQYS9aDvvQ0fjBcGabhYXwV7xWzIDtt0LYYQlYttm5q7H6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWY9HEhwW5SEffzCgwpNahfuqfrBs5oDdhNzTZD6qzlgIgTMch4INT76qBPDYNkOx59p5BL1IgRDI8HyOr/JgX31A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.857.tgz_1493052969749_0.8088670009747148"},"directories":{}},"1.0.858-beta":{"name":"meetup-web-components","version":"1.0.858-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"6.4.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.182","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"ddbc52e1649aca1d50bad1d32ec1ea3552a4b66d","_id":"meetup-web-components@1.0.858-beta","_shasum":"21d0594736067ffc45e262735955379add2e01b5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"21d0594736067ffc45e262735955379add2e01b5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.858-beta.tgz","integrity":"sha512-FjE3Ce5Cf2LU7y2C+gDW8xlkqjyUNuiAPn8HPWhGjxbt/e+aUA5kjiNYQufVS3s6TWyEscRE34FcjKiwyjjLhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH5dSOk2vOjNEi949lk7yP80L3uJVpNKhwet6zZh/q+3AiA8o4IV3iqa6LA/RT2tvo1rjQtfRSkkoPN9hFJrZrjX8g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.858-beta.tgz_1493056005869_0.31605894421227276"},"directories":{}},"1.0.859-beta":{"name":"meetup-web-components","version":"1.0.859-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"4937b7981a5ed0e5e656e47fe37942f663f2b891","_id":"meetup-web-components@1.0.859-beta","_shasum":"ba454265d48181849d933b769653f422c27ba79c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ba454265d48181849d933b769653f422c27ba79c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.859-beta.tgz","integrity":"sha512-6ATmRAf/fT6luXXV0QC7PDfif3mjHEV2vtfnsv9zl7NQesZzX2FOy33N5uM3OJaUmwS93E6syuVdNiu1PB2lyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6rN2oDYDl9VVgqgoql7LunJNT10uzEOzAtd3efZb66QIgVer3zlfAmCaSndRChPgKW1+gRpp5B6trWdhzjWPJU2A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.859-beta.tgz_1493057303887_0.1106177899055183"},"directories":{}},"1.0.860":{"name":"meetup-web-components","version":"1.0.860","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"32b6c54bae809a86ca24d5997ccf504a0ee721c5","_id":"meetup-web-components@1.0.860","_shasum":"6e8d863b7cf8406ac07f812f7684ff34c2fb8cb8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6e8d863b7cf8406ac07f812f7684ff34c2fb8cb8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.860.tgz","integrity":"sha512-388jdjnYDroQNp7j6yUoAMC9PkdA4qTHZt6zlnJXn3Ed3qKRv0RcsH8EaVLia/vo+xPmq+6EfRSpTsNHqu9dkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPZLsYfLSIDfZoHHRvPW/b9KZ+Q89zlpbsMjdC/3REwAIgaMf48/EWkpbt20zhi5rS8APOHREyrDwFM9vNoD/47sc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.860.tgz_1493057527999_0.11864702729508281"},"directories":{}},"1.0.863-beta":{"name":"meetup-web-components","version":"1.0.863-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"5ae4e271728b4c554258005889e6c28af4814146","_id":"meetup-web-components@1.0.863-beta","_shasum":"7f0442e3f92008fee6ee16f43d0ca65ffdda82f9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7f0442e3f92008fee6ee16f43d0ca65ffdda82f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.863-beta.tgz","integrity":"sha512-du3gSyyWeMii3OTiIjHlMcODCq+zhrbvJYjtEvc/4Vhl2Y/2gPn9eSixIWzKm8d0V++vEEy8ibdXknqp8l3n3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHB5yExvq2yjnz8d1fepAEB1JBZd568o53kmxmry4MyAAiEAnejjgjbAZ+S23cOK87Q3htrGCiDQsezKuMHVVMtXNGI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.863-beta.tgz_1493059780387_0.5985245432239026"},"directories":{}},"1.0.864-beta":{"name":"meetup-web-components","version":"1.0.864-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"3164cb0c4552c328d818d6bbeb927abf8158e4d6","_id":"meetup-web-components@1.0.864-beta","_shasum":"19fed59511abc26ecb941e528920baef383fa1c5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"19fed59511abc26ecb941e528920baef383fa1c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.864-beta.tgz","integrity":"sha512-g9IRmXVA8yA68dP5XrdG829x+nhtcQXYEh62AWyG3MNrLZwWcBEb4RtNXlSk4dHLvl30zcRPzvLOpiiQc3F9wg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5IiMwAD0Y4xB4E/6s61t4gj0ABns3y9HZKLkd8u0bbwIhAM7drt4ex1EPljB5yHwu9iOs2c8WVdjQtOqi6GjmpHqZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.864-beta.tgz_1493148224806_0.4061461230739951"},"directories":{}},"1.0.865":{"name":"meetup-web-components","version":"1.0.865","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"e8dbebcf52a313f56e5a9b5333fd61c1497bab05","_id":"meetup-web-components@1.0.865","_shasum":"381ff0d1014e0129b35612592f79505dbfc5d0a6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"381ff0d1014e0129b35612592f79505dbfc5d0a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.865.tgz","integrity":"sha512-FBxvimH5sRjGd4+bLYGxi7EbekkEamyrIzUu8+xsp1ZYV3X+6XUwq0lPueUR6AX1YameETuo/QbT5JrhB0ZenA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbrxubp2nRXkRXP0qKi9O4zUHXyBuKagk3GYS267+ZOAiAn2+iZBZr/rJ8S90HsrRTHPsMmZvpD6gBXrZCp5cU/1g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.865.tgz_1493150287460_0.11785862478427589"},"directories":{}},"1.0.866-beta":{"name":"meetup-web-components","version":"1.0.866-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"8cc7fbf1cdc4d8d50671df492fd90b31e53ada20","_id":"meetup-web-components@1.0.866-beta","_shasum":"02b80b99c4a82bdf748eea47d877ef482edb06e1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"02b80b99c4a82bdf748eea47d877ef482edb06e1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.866-beta.tgz","integrity":"sha512-9KCXfsSAIBb4skIbJ3EDNIwZSQwPk4EGELOQlJlm09JOSsk1lNxXEFkAo/xFeUwA/VMxTxRAJbwaVpBWpf7pdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFHebpnXPTQLl9jf0LSxUFq4SNCaV9aF/a042ey3gAUAIhALlXM9QOY1k+PAkOFS+/MI5cbV7yKXQ+bIjHJ8hUGYhD"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.866-beta.tgz_1493223635464_0.9120521685108542"},"directories":{}},"1.0.867-beta":{"name":"meetup-web-components","version":"1.0.867-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"c053f4ec378e778fd1d926c2469d3ef8c4d1da76","_id":"meetup-web-components@1.0.867-beta","_shasum":"86a632fe88f52859bf668bb0c879200b4a001ca0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"86a632fe88f52859bf668bb0c879200b4a001ca0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.867-beta.tgz","integrity":"sha512-9K//P/iuU2sVi2WoneLfhWnWHxDQBrM0SvT0T7l/Jf4RFfsXsleOENxLO7HGAd6GB4Pzsy8tFX7N3dXC3emNAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuOZITlA0bgLklKVRpWulD5K8agyJK3BSuqG+y2+EOpAiB+x6HdWArN8Ej0R7ydEe+G6Q0rxVxb4idx7oc8t14zfQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.867-beta.tgz_1493254487779_0.46110169403254986"},"directories":{}},"1.0.868-beta":{"name":"meetup-web-components","version":"1.0.868-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"090294ee30226398528c6482515ed19c949f1e37","_id":"meetup-web-components@1.0.868-beta","_shasum":"67f4aeb24a89a6216d8ccb7885a761d955a3c7a4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"67f4aeb24a89a6216d8ccb7885a761d955a3c7a4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.868-beta.tgz","integrity":"sha512-d200BzRgU97lipqBpQA8egnb1jJ/HEsxLlpC9O9bIfxlP0JCTQtf847GEovedSthKsU1wQItQgZGfw2Mk+fx6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3/bCH2sPjxXFQfcfEhT9GvATpmDmIY81HOpPwkEU4/gIhAL/3FQW2URLHe2fhj/UFOQN5ZwA46B5xWSl+qdf61NkP"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.868-beta.tgz_1493254932724_0.018738141981884837"},"directories":{}},"1.0.869-beta":{"name":"meetup-web-components","version":"1.0.869-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"7d3b3cbd19c2587b510aab23660cf0083cd5af3a","_id":"meetup-web-components@1.0.869-beta","_shasum":"b2a6069adfeb1e63df7e8c0912a5e8bdb9043527","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b2a6069adfeb1e63df7e8c0912a5e8bdb9043527","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.869-beta.tgz","integrity":"sha512-7tIsgjfDiR5oANa2uUAKloPtDom9Eur89WZQjpcQsJUHm2bgfSHAz2gpR+9Tlnzp0NwnrcXo4Z5kaDXgnu/UnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQIG6mID5cAFO47sRUYGjyP5URahpqlU5AmfjuAAP/kAiAO4+O/u8SDG84XVS/f3lF2KAuqQhNXwwtF9sCkC7Wraw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.869-beta.tgz_1493257766020_0.7559748450294137"},"directories":{}},"1.0.870":{"name":"meetup-web-components","version":"1.0.870","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"345cb5ef59d218b240d492ec3eaa27e51f3890f3","_id":"meetup-web-components@1.0.870","_shasum":"56a0215c1074de2a3ac5de86112627b9aab2eb14","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"56a0215c1074de2a3ac5de86112627b9aab2eb14","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.870.tgz","integrity":"sha512-McASeW8kfyCYUCPs/t/wZ4ZxMIeYM6In3+UfXZMTFuJ/ABoob0nVWhSbWBJqoQ/qSh+ftNNlNa6xmQptbXEFQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG22uvcK8CBdN1++LaMJ9AlUfSMVP2c/YX6jwnxTl4nSAiBnuLYJfip+vzFBLa0Pr2Xh25BeOH1MeVrQPmBXYKizyQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.870.tgz_1493257978722_0.7954611394088715"},"directories":{}},"1.0.871":{"name":"meetup-web-components","version":"1.0.871","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"423edbb925db619c11b179444827d3f9f8130bfa","_id":"meetup-web-components@1.0.871","_shasum":"cb709923428ccba0ca1e44340dbeac6fb2b7d53d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cb709923428ccba0ca1e44340dbeac6fb2b7d53d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.871.tgz","integrity":"sha512-Qm+pGXfqGOW4qqd3zYVhZja/eQ7ZLtEswk3K21A/qTdhd8YocgTNayHK+uE0VKQ+5iM5bEFgp8qNKC1Iyiu1iw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYPHlIzwmW8DxldM98BDu98a8XfouJqA8EvkI1n2mRbgIhAM+2wPmIZf8utIQKPjI3FHxLG0MWWhV/6vQwAVC2y8IN"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.871.tgz_1493332435396_0.33728398685343564"},"directories":{}},"1.0.872":{"name":"meetup-web-components","version":"1.0.872","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"f6beb55967fad199af574e7d114a1f18276fe884","_id":"meetup-web-components@1.0.872","_shasum":"8594d484d6cf87024600b46f16793cdb50bff279","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8594d484d6cf87024600b46f16793cdb50bff279","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.872.tgz","integrity":"sha512-jU50J+h8K+Kh5NdiMei6PmBjGqkzmR/OjbEXdmBk6mN0rUJuJX2S1Swvr6y8kf5JAHM95vyciGntExuWnl7wWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAJFQ6Rhsu1J7QkSvH5UQUc8dQivi2owyRFCPiAs4QywIgbUIA2c5n0wqlF02hCZTXEjBllRySWPDlKiZDD8hXrtQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.872.tgz_1493398676596_0.9664370270911604"},"directories":{}},"1.0.873-beta":{"name":"meetup-web-components","version":"1.0.873-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"b9429eae678ea03c01f2a07c70ec169673e536ca","_id":"meetup-web-components@1.0.873-beta","_shasum":"564d5ccd7adfe7aca2d75ed361d77209c55ac672","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"564d5ccd7adfe7aca2d75ed361d77209c55ac672","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.873-beta.tgz","integrity":"sha512-Gw/6jsvSPWVmOVDOr0fcPrhCUmAIISVhO+CODq3mEssJeh1vxpOUQ9c27DYvehtASh7rTgjIu9esD0cZWRtrGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaRwdEelJZJKCe7eJU4Zqql/j8XJ7FaIV2irpiSyrGXgIgECV9vdBuZgtPBXadZVjKqLaCbG8LVXZP0zPquETODzs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.873-beta.tgz_1493648636991_0.04669875651597977"},"directories":{}},"1.0.874-beta":{"name":"meetup-web-components","version":"1.0.874-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.12","webpack":"2.4.1"},"gitHead":"1e10c133a78e615e8137a545fa09fced37bdf084","_id":"meetup-web-components@1.0.874-beta","_shasum":"6d996560f8761624e8a2e931514638afd3d580c1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6d996560f8761624e8a2e931514638afd3d580c1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.874-beta.tgz","integrity":"sha512-/4ScihfPwltGZgV4JRo/DK54Ny0Phu2qgH+uH6u1AzUpK2KH1Za81x6LFy3YZ8GTrK41ayCJcp4WgQsdRtR1Pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHTMo8LOJ83W9CasHvzUHxXLA0aqL7siOl9qFrt6boMCAiAJis+Ohp3etIs+a0Z8L5kjEhhNm1ePiVGZLKUXO88RyQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.874-beta.tgz_1493654458827_0.3385832186322659"},"directories":{}},"1.0.875-beta":{"name":"meetup-web-components","version":"1.0.875-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"d6f5eca0067fb36d7aa3e7cf0e4441346820bab7","_id":"meetup-web-components@1.0.875-beta","_shasum":"6ea17d2c5dfaa2e76335ae7925e64dcca7c7533e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6ea17d2c5dfaa2e76335ae7925e64dcca7c7533e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.875-beta.tgz","integrity":"sha512-udYLSLcYqmLdp9aSZttBIg9qCIkkQPuW7g1kuTXVaFKyGiSbRGEVFPYsKFochjE7slKvG7z0JR30SDLqFP7nzw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3V2v7yLmKyCm1vCMjod2ZPFfX1mQAYD4cUGlkonYboQIgcpVCkAo00ZIYOwl/Rl+/HWF4BNLsaL6sAlIRXmWKXBo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.875-beta.tgz_1493681892985_0.8812977394554764"},"directories":{}},"1.0.876":{"name":"meetup-web-components","version":"1.0.876","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"b885ce7d58d651a70377fa670cbf93e6d298a9d2","_id":"meetup-web-components@1.0.876","_shasum":"de3f099520abd2533080aa9a0dce06079448c55d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"de3f099520abd2533080aa9a0dce06079448c55d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.876.tgz","integrity":"sha512-C97nJv/YZLv5u5+OZLVLGtQHa3/gQj+5JQpGdsxxKfP74LUtKdwy4m0RCfsckFKAF8Kfoas1hM4ycmwUIznjjg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+i8KVplVzs9cx01c0J4t7FvzYnovgOGJi8spLBGNjwwIgQjXy7jX+8HRz2+XdAgVs02f12pN4Vrd/T2dzy3PbjkM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.876.tgz_1493693088864_0.38453830033540726"},"directories":{}},"1.0.877":{"name":"meetup-web-components","version":"1.0.877","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"cecd599873b91c038f69e78fc70a52e4c2c3f25a","_id":"meetup-web-components@1.0.877","_shasum":"b450450f44f8e7bb7819ea4981e5f0be02d3761c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b450450f44f8e7bb7819ea4981e5f0be02d3761c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.877.tgz","integrity":"sha512-XA8oAizm/5jJXLUbP4ESckwCE8/2kp1whyQoEvnJrz+1E+Gl7ibu4/v4NDqu+NUrfJmQf2cjww/DuxSJGD7yzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQBVWvIe3y326ngTSz4gjcKQpXW6ai/93NWxpDje3BhAiBgtUhpCP8xavX/izlWL0seO9vunj2ivGOYHby1yVN1ow=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.877.tgz_1493693594232_0.46332929702475667"},"directories":{}},"1.0.878":{"name":"meetup-web-components","version":"1.0.878","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"47f98c544369f77100d7f1851ffa6d73d1f02dea","_id":"meetup-web-components@1.0.878","_shasum":"7e98592522a535f77965a390b3b1653f6a126720","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7e98592522a535f77965a390b3b1653f6a126720","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.878.tgz","integrity":"sha512-YHxKK375OMdwcAPOPSrMcNlqWm2x6mH0Jn4OiRow59m8FBqcnqHf5u8TDxpcFPMt9PaknrBgmPK9QXcg6nL0fA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOtecWyjjF2EwFeB+G7EZNQZcmfBVbXKnqIInPE46TuAIhAOTZgSm0yBkv6lu81uhOzdCURio3xpzgXYNKVahHLoLV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.878.tgz_1493696249803_0.10236931988038123"},"directories":{}},"1.0.880-beta":{"name":"meetup-web-components","version":"1.0.880-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.13","webpack":"2.4.1"},"gitHead":"ad20c192cca0d2978813c91243dd15a09cb51864","_id":"meetup-web-components@1.0.880-beta","_shasum":"64a63b5e6983616cd1c2d9ad27d938b679baf185","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"64a63b5e6983616cd1c2d9ad27d938b679baf185","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.880-beta.tgz","integrity":"sha512-bKIEIHa1O9FsCcYpBUkhQ3q++MEm5mxzHpvdZh+X81u0SHHcZbVOUfNO6dyiyO0grimWIy27GzmHZJ1D5KMdZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETR0vzwEjU6yhB4Y5ssvToU5GaZjILM+ITx6CGy6G5zAiEA9sXkU3/pO10VsW40fxHxTUCR0z043Vz/wYDqrcvIuY8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.880-beta.tgz_1493737239959_0.2586527115199715"},"directories":{}},"1.0.881-beta":{"name":"meetup-web-components","version":"1.0.881-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"bd0053e3273e1b5f76feafdb4b7e0e53dd6b53fe","_id":"meetup-web-components@1.0.881-beta","_shasum":"ef7ac2accc8507202adae55bafe94137381e5931","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ef7ac2accc8507202adae55bafe94137381e5931","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.881-beta.tgz","integrity":"sha512-nc3/2gFwBd6xzfRAVZ4wsyUedFOXXVSOj4OVC3gnOFOuf4yVT6cz2bieRKL4x487/ygDeXutnlrk/F7x3aWM3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7/ccC6PRW+VK68W493j24NU7n8+8a5oW1TidPWYT7sAIhAPmIlYw4zMfbAM9OuuGD10uCwb0XWwgF0HKBD4RQdPCP"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.881-beta.tgz_1493741077028_0.041306374594569206"},"directories":{}},"1.0.882-beta":{"name":"meetup-web-components","version":"1.0.882-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.2.11","webpack":"2.4.1"},"gitHead":"885fc1fe29ba4ff6196d04b07243b7ed317462a2","_id":"meetup-web-components@1.0.882-beta","_shasum":"95029009db1fd94c91a14c5b3e900cabe67b2e28","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"95029009db1fd94c91a14c5b3e900cabe67b2e28","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.882-beta.tgz","integrity":"sha512-4YDsVQsDbAgb7Bc/43svhwgN2W4N/FpsZHiYaqEZi0FQM3Hn4WY1ZWAQaf1x7j4YDnPxyVxfecAiAtOl8hditg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC30igUzsN1SKVGx6ds4Agtuv1/GpeC0QiUlrphYUcJvAiEA0fmmfSy87/+Z1hHJw8WL6TagMhG1SB8XhAWt4+is2K4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.882-beta.tgz_1493750379007_0.5657916297204792"},"directories":{}},"1.0.883-beta":{"name":"meetup-web-components","version":"1.0.883-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.13","webpack":"2.4.1"},"gitHead":"23d0228f48696f539ab7cb836e77b0e29b9ee602","_id":"meetup-web-components@1.0.883-beta","_shasum":"8aa8d133be5e5b5aefebe610e801e63b7bb689a9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8aa8d133be5e5b5aefebe610e801e63b7bb689a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.883-beta.tgz","integrity":"sha512-caqyZWvJ4GYaH3PZ4aM6Sw+1MF501CMWq31dnZsBcxE+4EMjcSYlCoLopCJacThCe57/vtIsQyEPauDtQ+GDjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdoP5FLlnbGZySpxGzyXGD5IEDNdAqpq2qv64ErVsDLQIhAKou/ocje+Lu4tX4MxrFswWgmC69044DqMPZtBhU51vX"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.883-beta.tgz_1493751685370_0.10229202429763973"},"directories":{}},"1.0.884-beta":{"name":"meetup-web-components","version":"1.0.884-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"a63c78c199c7ee6759de24586a65a0adff28451e","_id":"meetup-web-components@1.0.884-beta","_shasum":"f0963cb53b52de7d98bdbdd2c48a4a7d16fcd75f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f0963cb53b52de7d98bdbdd2c48a4a7d16fcd75f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.884-beta.tgz","integrity":"sha512-k7mBn7eut+6MBNba4IvEtB36+YOPSGCRJiLJPSUtuny7FwdeQ6pRgDwd4yCuL2yZ5fel96IpxzZkGDuoA3zd+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO1XMPVuZVg4EZduv9so6h/DE1oMDEQG8rdnwkiRPj1QIhAPdAOwp4Ut9cuoW1/d9lPmsHGqnPUfIv/duPjvLUve/4"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.884-beta.tgz_1493753953465_0.6613429461140186"},"directories":{}},"1.0.885":{"name":"meetup-web-components","version":"1.0.885","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"80addd33ac80e10273a6b198e520a1d1c8604858","_id":"meetup-web-components@1.0.885","_shasum":"1a0f61cbefb5bbb36e62b67a61b8e4c6ee6b6fb9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1a0f61cbefb5bbb36e62b67a61b8e4c6ee6b6fb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.885.tgz","integrity":"sha512-DeGWsFvijry5P2aktFvZHxYjHMzBNFEx4jbmHyABZx7UO4lPRNQCmwmlWja0PA77JEu5QDPz8Lf7Br8uRnrScw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPrVoeStlUDiLQ6Qb2R7ny04F1cB8bHhYHHRXcUjvz/wIgcT/nJDq083hyKUrlOeVAu0qrdYvxCWzIvCZdcyCBgQU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.885.tgz_1493754128925_0.446572084678337"},"directories":{}},"1.0.886-beta":{"name":"meetup-web-components","version":"1.0.886-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"ffd407436ee0f6dcef05cffc2c9c851088133a42","_id":"meetup-web-components@1.0.886-beta","_shasum":"fb24000fc2c3fb9f91ae2e22512b1b84c9a1576b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fb24000fc2c3fb9f91ae2e22512b1b84c9a1576b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.886-beta.tgz","integrity":"sha512-9CjanFCUZabvc97zvJOUWkQyJwnXscTIXSbJ7E28kPBjpzjdJkCQo8G1SpLFKP6Ym19wAjuzDCWeTYTOrpHguA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF0QdAZrLcLp0rxsTVjQmSnsGiI3itzSegabeG+nyF43AiEAgP1WQ8kBSWSJ8bYWQLcDFOOj2dnUBgInHzAev54QpO8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.886-beta.tgz_1493758037988_0.6545974139589816"},"directories":{}},"1.0.887":{"name":"meetup-web-components","version":"1.0.887","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"ec7bfb4685ddeaedb7386d64f646b766d60d3771","_id":"meetup-web-components@1.0.887","_shasum":"2e59900b2ce130e9d846011f2dc62473ab0030f9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2e59900b2ce130e9d846011f2dc62473ab0030f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.887.tgz","integrity":"sha512-u105f6w1BXAwkA8O1UfKm8WZk0g6ntLFpK1upFDcZIAWzeR4biF62kFt8xffl/zPfh6SK0NO7J20E2RHmxwrWA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjYfAHNLm+/+kivjV3fqJ4WzD+L365jn0K3tGgGV7SwAiAZ1IRs8XfDwykUk+McvMpcqm57J+X4f6IWuT3IFxS+VA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.887.tgz_1493839761948_0.430129547836259"},"directories":{}},"1.0.888-beta":{"name":"meetup-web-components","version":"1.0.888-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"c8f1a9b5bb81b2d7c17ad9b23c2922659b50cd76","_id":"meetup-web-components@1.0.888-beta","_shasum":"aee97f9ac29f75f6e1cd7df689244d506ccabbfd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"aee97f9ac29f75f6e1cd7df689244d506ccabbfd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.888-beta.tgz","integrity":"sha512-yvTG/lWfQemCZYErNTThXYZhs6X9y7CR9B3nowAkgvTOaEDbMZI06v+F0cSUP7+x5T0ODmSNXUi0xJ2oDtutEA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCkosaeRYP8FUcSDYU3Q9YQHilblA/+HYn+spFNkPbRAiAENztzfIEGVuF6zWlOgsPdUhwfZOIJ9Km5g5HfQiceDQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.888-beta.tgz_1493938669440_0.42993596149608493"},"directories":{}},"1.0.889":{"name":"meetup-web-components","version":"1.0.889","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"19d02e4a8f5bfd5d29812cb18fd1150d1c7ff56d","_id":"meetup-web-components@1.0.889","_shasum":"18c6169d3a8ca63bcb095135a336ae9f9ae30b6b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"18c6169d3a8ca63bcb095135a336ae9f9ae30b6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.889.tgz","integrity":"sha512-CwNZleq2EvYUV7lkl2z4eXnAMR04WsPGGJVKYygAtMv2t0WFfJW2BG/nZh2AOJfcPrfYyvS1p+mhf5ripHUNLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEBr3lcoCCt3t3t/S59RY8lrGPnNE8tswFfrPtoSvfgAAiAojGPjE0reFZUMqThY0mFnotnQyEYQwMP53P+YO+YfZQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.889.tgz_1493940615380_0.9683994674123824"},"directories":{}},"1.0.890-beta":{"name":"meetup-web-components","version":"1.0.890-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"7b1d4ecda34f6390fdbe709efb2ccc3b86ece749","_id":"meetup-web-components@1.0.890-beta","_shasum":"e672af60f53046b64766f52b100f09e8b1584fad","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e672af60f53046b64766f52b100f09e8b1584fad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.890-beta.tgz","integrity":"sha512-kV6MydTBpeIaOb8yQuf0OajhfaI9x6Zn+PlIS2naNXXp8RQV7G+8RNQmvuGn0/C8BjS/Gz3aOSB+k1c3SLYLTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCg/CbXLyXbTJIJ3PggaSvH8tNNrZd8xwn/iyo880vdJAIgS6REJXkmzLyHQ42717j0/EiF0Qkq9qPI/krKQwTiz1c="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.890-beta.tgz_1493940843536_0.8532986280042678"},"directories":{}},"1.0.891":{"name":"meetup-web-components","version":"1.0.891","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"77390b48b5dd608aa9a4f61852697f406178b035","_id":"meetup-web-components@1.0.891","_shasum":"24a193b7e58873cbe12e2ef570d48d6e3171a8ba","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"24a193b7e58873cbe12e2ef570d48d6e3171a8ba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.891.tgz","integrity":"sha512-jKu+/84ozkgdHPnfZjw1GHZTtewo5nvW5SuMyuKwNhZrjGunWy+A4bsNuSYP2U0Cs+Och7ZxDXRo7nfBl489fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDku0iDTuHzIVHCvmSOowixU35RGK231hgRQpo5VmjZwIhALbnkm7oKWM3vxSE2it0MpYdNiPP6ZQ9ej4xuwSFZdXd"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.891.tgz_1493941161547_0.9033977303188294"},"directories":{}},"1.0.892-beta":{"name":"meetup-web-components","version":"1.0.892-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"75d65bdc8a41e9d8b1326c2f4c30540371c75f0f","_id":"meetup-web-components@1.0.892-beta","_shasum":"4149f89319a8bdfda9fbce0a8b43fdc7d96074f4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4149f89319a8bdfda9fbce0a8b43fdc7d96074f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.892-beta.tgz","integrity":"sha512-Lxu1cb3B6oMQRkLJd7/X5b5PJjc6wO/lyn+rdweKfX6FCT6HDKQQDNqXRMksD7IF4ByYkrydBcf/lG0CqqXC8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvp06PlwEaubu/aFeIDelblkGPt4Bz0dGIcRe4tvm5kgIgCXshv5X4XBK/iVXbCuCUBZp+IilP0FXlAvCsu2wu/So="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.892-beta.tgz_1493989237307_0.9954933095723391"},"directories":{}},"1.0.893-beta":{"name":"meetup-web-components","version":"1.0.893-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"b81efeeb74709bd41f024707c47fd22a2e66a2a1","_id":"meetup-web-components@1.0.893-beta","_shasum":"2f3ffc63e4d0653af090d292bd52ac93de17de8c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2f3ffc63e4d0653af090d292bd52ac93de17de8c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.893-beta.tgz","integrity":"sha512-GDt7NMpObpYX0VMekAEeas8Zb8OIqsX+bDBcANJ/yFQoZXS9LK2KANAaH24vCY35tQGzgC5VEZ9dW+vMMkze9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDolwRa1C+e4HRdsmj0D9FJojsXn8F92mFzAjrOMXtYWQIhAJ93Ip01LJFNWwxZA28HP7jl/rsCWeMIkyoP8nFZ13x/"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.893-beta.tgz_1494003553669_0.08711738651618361"},"directories":{}},"1.0.894":{"name":"meetup-web-components","version":"1.0.894","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"8b594a3201d4c186b22073e0b08f7a88dd8495e7","_id":"meetup-web-components@1.0.894","_shasum":"f208aa49b55a03a0e6cb881f5b5a2a45cba1704f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f208aa49b55a03a0e6cb881f5b5a2a45cba1704f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.894.tgz","integrity":"sha512-8mbajDFLMNRLsDNfUzhtrqIVzw88ZoM8K5dIj/VHF1HZwaGkjzV/wTZrzXbjJF52beDf2NqSb0ZtJJaJANOZHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5hNNeStKHXr1sM7H5aOVVQ72Sz+0qXhgaluFTcnNFSgIgVKoEoPgpLSmbYEldGyg9LcyAYqdtaeK9F8048nKVIYU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.894.tgz_1494004110733_0.9616585273761302"},"directories":{}},"1.0.895-beta":{"name":"meetup-web-components","version":"1.0.895-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"6a64ef68ccbbd0580fd15db5ad61fbc079ae149a","_id":"meetup-web-components@1.0.895-beta","_shasum":"d3c193a621546e935e75096fa92f008cf59c8e27","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d3c193a621546e935e75096fa92f008cf59c8e27","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.895-beta.tgz","integrity":"sha512-eMF8P5Y+IMg/G+xGw6j53I9naLuAlklMy6mbOuP0grM17NNT95NZAyWyBPFMRI//FlmQXEbIk3wXfdEoIjEkPQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHrf+/sUJ1Dv5X+CjeWNzjDnfJGN2WaDZhmWE2RSFQrgIgeA4lmP47FVo3nIs8D+UR231pdBV5HI7hqhryL1+6fC0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.895-beta.tgz_1494005206743_0.6074337938334793"},"directories":{}},"1.0.896-beta":{"name":"meetup-web-components","version":"1.0.896-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"d33b548bbe8fa2423cbdfc6b584b918c34a35708","_id":"meetup-web-components@1.0.896-beta","_shasum":"8aab9326d1c9bd18ff5bc6a343887d649e517711","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8aab9326d1c9bd18ff5bc6a343887d649e517711","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.896-beta.tgz","integrity":"sha512-SEMccgsGhRjKS6iFX3x4Va6XfFTWqWF4lDa52m1SbH8sxcPNUsom+/durH2CMywuBWiOTI2PfSoF7n1ahg+wng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENMMtijDrzOYzRXbRg2tDnwhd+TXG4T4p+Jpu698r+9AiARZGgZIZRxMShorz/BzNTmWtphcWmr7PSbkmqICu87tA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.896-beta.tgz_1494009449634_0.6869223963003606"},"directories":{}},"1.0.897-beta":{"name":"meetup-web-components","version":"1.0.897-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"43605456dd53fcbac90e262af0b9c013e55ff7a2","_id":"meetup-web-components@1.0.897-beta","_shasum":"ea32b66044aed2d2ff3659c898f5d67e3220e152","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ea32b66044aed2d2ff3659c898f5d67e3220e152","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.897-beta.tgz","integrity":"sha512-/+DLE92Jsyi9bsBXQwfdW9nwiYDmXPvW367sxh6fSfoUsk2zxeM25QVgfCTJl2wrp9rxDaG+I5bFY9nmpKK7Pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDUEIQf21oTABhnjf1AtQFkgaiqUtRJ8nBsKNVy+JCQ7AiEA0EwzLrEgPWZNDbWEBqUheBmjUMRFhjbiAn8f/49quZw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.897-beta.tgz_1494246883504_0.17743984004482627"},"directories":{}},"1.0.898":{"name":"meetup-web-components","version":"1.0.898","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"c529ec3feda53da35b80ab3788ec9108ac667b5e","_id":"meetup-web-components@1.0.898","_shasum":"2b330772c3e0dc0747164e43fde3cfb783d98606","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2b330772c3e0dc0747164e43fde3cfb783d98606","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.898.tgz","integrity":"sha512-DVXYP+je6r6z7ogneZxcALjJ1m1JrJ8x9G+ru+SzQA8SBX5SBhqCDZGzCF55FocYQHeFr7slbb9GB8oaPYHrVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIESOatO4IcCewmESC6tPwiubWGIlrWwcp8HP55K+GYqVAiEAgb3cQ27twsxzASAC0t2mhfDL2a6yyB4HhW6c67TH9rY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.898.tgz_1494335060804_0.4773494517430663"},"directories":{}},"1.0.899-beta":{"name":"meetup-web-components","version":"1.0.899-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"10a999f72b6f78348fefa7cc336022d1d86fce36","_id":"meetup-web-components@1.0.899-beta","_shasum":"02e9645eef54c77db35b3dc50e0a4ced2e661067","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"02e9645eef54c77db35b3dc50e0a4ced2e661067","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.899-beta.tgz","integrity":"sha512-stsd8UXqSy4jCFq/Bu3AZmPb4/+W5DJUwXBkpTSAK4sUDg7DNUKt3R4TSJSbi/uWNiP7MCDQ85z+u/V7oxccpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICpclP72DjjlqZGatntSqfRVlkwCubu8rXeSMOWaYwW+AiEA/tD465dEdvbGZVhTntprKpUbxbSaNNzxGdpSSn4EASA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.899-beta.tgz_1494362719411_0.12294823839329183"},"directories":{}},"1.0.900-beta":{"name":"meetup-web-components","version":"1.0.900-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"005821bf35c816e15a1accef625c5594e826b6fe","_id":"meetup-web-components@1.0.900-beta","_shasum":"77ac0af9481138e801ff7a9bd2541043cf012ed8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"77ac0af9481138e801ff7a9bd2541043cf012ed8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.900-beta.tgz","integrity":"sha512-10sPh+XDSHzDi1uQd68pMAU4O7xE1M584RsY0+XgEl5SBUnJzXW7PjpzeXxHBwKgxG7Ys8we1LNEW4AavclzNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA4cs35kOnuGEnqhkDBmTFjlgKNi30u1QFGhDwECmb8fAiBOX4YBVowepwxULnBmS/sE15j4C6vsV2l5XduH00T7PA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.900-beta.tgz_1494369064461_0.45696439291350543"},"directories":{}},"1.0.901-beta":{"name":"meetup-web-components","version":"1.0.901-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"bf8656e92a903398c30fe46e8b976288ac846968","_id":"meetup-web-components@1.0.901-beta","_shasum":"17bfeb320a9ff8394a398f7d6a207f79b4d26ac5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"17bfeb320a9ff8394a398f7d6a207f79b4d26ac5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.901-beta.tgz","integrity":"sha512-v3psJ/imzWQOHStvlh4Ca/WmeEBZQS2+BJ8L/NqfoGwg2NFRdLzO/XhrTZ9dVW3vTAfXnv1jPjXgWEEa3/ZVWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHZuHYnO/rlpDd4+BP7hFp+LYnQYoVtt0rwK9lYjYg6xAiBIoKPfxqb1lB3qDCCV0dhM7TkshPyoKd9Nj5qvIJzk6Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.901-beta.tgz_1494369514234_0.9345887445379049"},"directories":{}},"1.0.902-beta":{"name":"meetup-web-components","version":"1.0.902-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"723d8c3dd9a70a4e40b20c9c74d024a6b0f48cf4","_id":"meetup-web-components@1.0.902-beta","_shasum":"371c734bec90c2b4bab394a68bf7e6b1b89bf397","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"371c734bec90c2b4bab394a68bf7e6b1b89bf397","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.902-beta.tgz","integrity":"sha512-3EqnF9SQK6daLQG9tOi9hp9FN+Zg4vIzNsKICq6Py7hpQOdS+YhOP2Hrai/KMYxGD5JhzL0cGjgy9xbt64qR+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa9xi0MdzTfjpXvtzMqJ5zz5Vbed5QQfylw8uRZ84dswIhAOrOG5FY9ISsRGG57pAqo5mz8vEjnUlz27N4dq8GAGLv"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.902-beta.tgz_1494441826088_0.9225716048385948"},"directories":{}},"1.0.903":{"name":"meetup-web-components","version":"1.0.903","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"099e3ae21d0fa22a1ab02fcbb29e7ef460fe4618","_id":"meetup-web-components@1.0.903","_shasum":"1f888c633700a3f7b06d18f93baf291147748e1e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1f888c633700a3f7b06d18f93baf291147748e1e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.903.tgz","integrity":"sha512-SKhtd8H/TdHd/cxYFc45PxIVkBDuwzE2ccCRc12D1NBq7WvWovJ/tuKTuX71xzvUqirJQJYKtr85/6C8JdahZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0UHblIjPxdd79jhFbOwWuM1gs78xHzkvDeyKebp6DrAiAoelLvvnTBZgOk3MOQpjM07rhW4E5K6abCoQgyzfM7Ig=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.903.tgz_1494523292298_0.3381114152725786"},"directories":{}},"1.0.904-beta":{"name":"meetup-web-components","version":"1.0.904-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.3.14","webpack":"2.4.1"},"gitHead":"e596dcae31d9fe3138ad292c8a10c16d262d731f","_id":"meetup-web-components@1.0.904-beta","_shasum":"1487177bcaf8d49d521426a9045d123ec1302343","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1487177bcaf8d49d521426a9045d123ec1302343","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.904-beta.tgz","integrity":"sha512-+4xWM8uSfVkf27khWYMmTA4TIhGqTHNrF87vD0FpVUeaZBGFJ8qawhbPjvmkds3WEefq0xlwOof3xvyL5ZLfGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtX36e396+FvjhbQGIZSef8xQWK/HnQv9b22IeAE3e7wIgU7d3RGX5pienTyQB0R7yEelofiOFjluDw1YmIMMaKZ8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.904-beta.tgz_1494534688617_0.19594943686388433"},"directories":{}},"1.0.905":{"name":"meetup-web-components","version":"1.0.905","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"a9360de8528e16563a7d011a05c41793efb2aa0c","_id":"meetup-web-components@1.0.905","_shasum":"58eb8462c00ecfbfbd8e16d099c9b8ebfbcf36fe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"58eb8462c00ecfbfbd8e16d099c9b8ebfbcf36fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.905.tgz","integrity":"sha512-hmCYQSxX6udbKrLkFJdjzzxLT30HT6aTLQPCCprzuxk5yIZklwrOJ731Os3OTcXqnF4tGPUlm8UrJL8zel9e3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtbfYi7nXf8vnhJl9D9TZTGdZ5OfO28gGfJx2NKUkYKQIhAKqYbYct86qKIW4Wopf30IEP2a8kBlF55pryilsMmw1R"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.905.tgz_1494536403959_0.9710023030638695"},"directories":{}},"1.0.906-beta":{"name":"meetup-web-components","version":"1.0.906-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"6cc76cab3cdf3c32176bc162be002de3e3ff0ae5","_id":"meetup-web-components@1.0.906-beta","_shasum":"726b16b1e105ba44ce75941ea186ce4b6bdbed38","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"726b16b1e105ba44ce75941ea186ce4b6bdbed38","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.906-beta.tgz","integrity":"sha512-HpzJ3ihYO1QVB4+4rMLsBFpI1w8thVTGEtzLyhzAvqW8XB8V6/Zc40r+x0xyNWvLYUHKro1+jdiofLLcTcLcCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/PAT9GxLyrUsastfgoc4pEESbXwRBxvhkg/kPLYHZNQIgbwY5T/ej5u6X8FZc5hVSJ3dJrr+78jhRPAlIsVohRJE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.906-beta.tgz_1494537291133_0.12526114960201085"},"directories":{}},"1.0.907":{"name":"meetup-web-components","version":"1.0.907","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"2687612ff137b016e4ae56fad1af24bbb5a73585","_id":"meetup-web-components@1.0.907","_shasum":"9e1714552a39d99794ab4d5a096fa555a90902b4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9e1714552a39d99794ab4d5a096fa555a90902b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.907.tgz","integrity":"sha512-R+/Ci7V7NmjdcWEKzvYCdMupu1+uFNKanoHZ9XNgSM7sdrJTSCLwlS7/JBUchtr6rdORKq6bgxCxUJwQmS+ctg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0SKFWd62ERFcAXuV8OwwQYE61EznIcp4NyqhqddedQgIhAKJZy43uMe5DoRrNyWdB4VJPu2uYEvodVDZrfOlVcZyl"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.907.tgz_1494539263894_0.43351414264179766"},"directories":{}},"1.0.908-beta":{"name":"meetup-web-components","version":"1.0.908-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"61ee02db81aab1eec69f20b531b0fc20e2c5e6e1","_id":"meetup-web-components@1.0.908-beta","_shasum":"cae03577c3288c10daca22e1c8cc251d09768251","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cae03577c3288c10daca22e1c8cc251d09768251","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.908-beta.tgz","integrity":"sha512-e01n9z7DQDh0GkbL3xYDWntoE/MFnIJZ+nzWJaSQGHqYmrE5+K+4emO0ZV41RrzvaZUvODaoAX/eMbsWCzJ5bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCy3B/5vLe9FwfTHCMWej3YKZyT3VgQCObqcm4yD/PUgQIhAKz3fgvOL1Ym1RK2iUJS9GO3y0G4Th5IGUyF5dgeURXr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.908-beta.tgz_1494605576243_0.6505924635566771"},"directories":{}},"1.0.909-beta":{"name":"meetup-web-components","version":"1.0.909-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"fd0fe992022352221e3a3b0378ccc185ce3c409a","_id":"meetup-web-components@1.0.909-beta","_shasum":"7a6c4929ac424a0edd1229f2473cf82bfa30fd2f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7a6c4929ac424a0edd1229f2473cf82bfa30fd2f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.909-beta.tgz","integrity":"sha512-Qq4KVfWVl6YYq3IsMQHWg/m3dT7CpTqUsF8kbLZFFu5bjo8tQ1hLzvoAhdhRgKFfGcd/HConJbJVr6VqLZLDcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2GlVZl3lInY8EkTBJAp4UQDyKmm4XGBhFzrFBMF/RTAiAgj8JrxX9ArhTjUl53u3INKA7AFyTe7FWOo5u7pV+WDw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.909-beta.tgz_1494872690788_0.3565511067863554"},"directories":{}},"1.0.910-beta":{"name":"meetup-web-components","version":"1.0.910-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"4d0dd2279f63f7f2580150a201fb208f4d703ac5","_id":"meetup-web-components@1.0.910-beta","_shasum":"5f591f314d769114056b73de8b1ad69d3df2950f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5f591f314d769114056b73de8b1ad69d3df2950f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.910-beta.tgz","integrity":"sha512-zDogc1f9P74DXC0LmbvVKXq4Tt4L3IBNtuQ2I3NswZEe8eTNKv35NFb97PV/BHrrIOPm2ymBYu2gfiUuBLTj/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDV3WvrXERHvgZIrvKKkehLCjLhP0Prja0oLC6nfd4oWAiApU1sc3JT3XBXvENY/G1YcsljrYjEzu+tAUNYwnqb15g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.910-beta.tgz_1494875997772_0.26699424581602216"},"directories":{}},"1.0.911-beta":{"name":"meetup-web-components","version":"1.0.911-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"b6a3adce1183e69a99cf91ad57d78b6cbc66580d","_id":"meetup-web-components@1.0.911-beta","_shasum":"187acd57d1e10b91dff845e568da6a3a24db3839","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"187acd57d1e10b91dff845e568da6a3a24db3839","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.911-beta.tgz","integrity":"sha512-/th9s+TGxNb2maGmMgOzz+j6z0fHM9pT1yE3DDzRV0jekw8Ho+RHdlqt5SplSbWfpnXsYsXQrITqyqswJKuD8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9ym9vuk8W/apjufQbF5fIKOBhRIbqUnsiXJNHodnf4gIhAOA7TigFEhgQfkAi6wDMaNAPNBD5fz147+GpgTD4H0po"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.911-beta.tgz_1494881223119_0.33910834020935"},"directories":{}},"1.0.912":{"name":"meetup-web-components","version":"1.0.912","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"c9de9f5c104950b8ff25f0ad450615b6d41df3f2","_id":"meetup-web-components@1.0.912","_shasum":"062dea8f823556d9dccf3e88c12fa73f311e7aac","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"062dea8f823556d9dccf3e88c12fa73f311e7aac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.912.tgz","integrity":"sha512-hSpoVYt2nFcopNtrIdzJQ+DZG5yhzMTqMr8vPQsIH9NIgb1FC5BhuaI785uXcIsnNB8WhZkrx3jAaIEnzUjy0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKh1VJI8gRha5XLDEFOJ4EcVSgFiOPT1K6p18BjwwmGgIhALxjp/sLQdamQKwkzjBjak5KKqB0gATmggswa4hARtKZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.912.tgz_1494974420806_0.874010754050687"},"directories":{}},"1.0.913-beta":{"name":"meetup-web-components","version":"1.0.913-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"3627a62cbf4608e7b4ffd0ebdabf087b8b9a11be","_id":"meetup-web-components@1.0.913-beta","_shasum":"425a5ea44c0e1fbbfde2c9d530a57b92beb7634a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"425a5ea44c0e1fbbfde2c9d530a57b92beb7634a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.913-beta.tgz","integrity":"sha512-qziWSbnqczqcQ/Fdh+lY1ty5svLzUdi4y5DiNHR/6qhdB4JrCi59TlYbYTYnY//lBQUCPql9DVqRyV57cHoCpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/Tm+1bOynpDWFzQdLUnmNl1JvAh7HMQ0dRF/HfZjsAAiAhuIoooCmqDupip27gnsJm5xudC8vzzb1kt8tMoTTYGQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.913-beta.tgz_1495048155695_0.8460284064058214"},"directories":{}},"1.0.914-beta":{"name":"meetup-web-components","version":"1.0.914-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"8c9a0b6d13e0beb5468d9304f204f0556e8b3b53","_id":"meetup-web-components@1.0.914-beta","_shasum":"a2c2cae3159271c976e71a5c58322ec7b9bca0c4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a2c2cae3159271c976e71a5c58322ec7b9bca0c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.914-beta.tgz","integrity":"sha512-48iw82KHcxdFL5aEF63VNdOzRgJsk8IEnOWGfJ2aMXbajUaqRJ/QzxOUXQn7jweg00gfjdYXJ6jxQHo/pIO3PQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/1iued+TMp0voZ5NSUGgrB8ICud7R2pcuLd7nv+pKEAiEAmPU6B5urWegjuXXspuebbBtjKXPJnJhBxd0UgPrAdbQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.914-beta.tgz_1495048943801_0.5183950229547918"},"directories":{}},"1.0.915-beta":{"name":"meetup-web-components","version":"1.0.915-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"1114a119288276d5600a78b473159e03a5662ca2","_id":"meetup-web-components@1.0.915-beta","_shasum":"fdf9edfa373a47cab2a2fd06c5393b1fab6f0048","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fdf9edfa373a47cab2a2fd06c5393b1fab6f0048","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.915-beta.tgz","integrity":"sha512-FihGvY/0AuxWQcYayFLVlhjbKQEqC3JfCGE6WPMsFlFJkbbLHTm7Ip/wCzqbHAlQV/P12lQGSvDtfgzFpbwDLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbVBZHL+7dniImGgKMctUYjOoSH/3BC00qJPzwqpy9VQIgInMCpeoGGm7Dp3iJdJJJj8vC8XYvovQAmchN4ByJ15w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.915-beta.tgz_1495054256732_0.923192779533565"},"directories":{}},"1.0.916-beta":{"name":"meetup-web-components","version":"1.0.916-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .out","gh-pages":"gh-pages -d .out -b gh-pages","deploy":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","gh-pages":"1.0.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"6358c43d778b2b9c6903a44c8263887a56548ee7","_id":"meetup-web-components@1.0.916-beta","_shasum":"2b28219029ee616ee7d857f192c1539e690e2256","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2b28219029ee616ee7d857f192c1539e690e2256","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.916-beta.tgz","integrity":"sha512-kBZfx5PhPLioMpEzlf0ro42+Eho3cTj31vL8v1q3OQZbEsxEaOtEgQff1pNXF3NA/7Ma2bx0oU5Hc9CnQ30DAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGPtsdM2ugAhGCpT97RJUi/Ww1NAZp2/4vvTLI/53icCAiEAgugXEWIAHforF52M7yXBiZuaZ8+Iz39WPjlIfZqwUn4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.916-beta.tgz_1495054930750_0.7157349793706089"},"directories":{}},"1.0.917-beta":{"name":"meetup-web-components","version":"1.0.917-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .out","gh-pages":"gh-pages -d .out -b gh-pages","deploy":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"e921bfbf59d7f50056d5d6d4c2b86ae74b807dc6","_id":"meetup-web-components@1.0.917-beta","_shasum":"d6394b509dcf12de8d1a18512df56db0ab62ffba","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d6394b509dcf12de8d1a18512df56db0ab62ffba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.917-beta.tgz","integrity":"sha512-yNwDf0DdybDioQpha6tnfbPp2s/HSkAuk2O2Tf+jtSBzQquFNpn+stOoJwWEoDK2WOBT+pganH2JJyVqz7anDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC19cOmTLr64s2RKPhduYlVZ1nxHYdKVvmcAiRDgOgD5gIhAMkGNWl5sQPXE9iGKf2ZOsDXLGNdo9FgdZ5hV/wp5+zk"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.917-beta.tgz_1495055132164_0.6336006037890911"},"directories":{}},"1.0.918-beta":{"name":"meetup-web-components","version":"1.0.918-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"9d03beb5faf3a517f2422115c8d779633c1194d7","_id":"meetup-web-components@1.0.918-beta","_shasum":"5343c26540e7561d9bfcb11ee6e41641992b972c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5343c26540e7561d9bfcb11ee6e41641992b972c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.918-beta.tgz","integrity":"sha512-4/aAE9IwwcoLcEjyjOG23L7nHgISpaoKHyKUG3dEcRA2KPya3g6dj+jMuSPf/UKVg+9ubZbzhnLtY5mUsNOZtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/FCr2TqAZ14WGOGmg1xT0v7tsf+PpyPzU3h2PoB3NjAIhANzCCwdcC0B470CkQQPCsvKhTJUCkLuKEYHI2A88Sg7G"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.0.918-beta.tgz_1495115390978_0.18465957837179303"},"directories":{}},"1.1.919-beta":{"name":"meetup-web-components","version":"1.1.919-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"a50cac9eb3379a66ec36d59aade702693d4c30cc","_id":"meetup-web-components@1.1.919-beta","_shasum":"c5b0d70499cd5928f49c431c208c24edf8be6748","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c5b0d70499cd5928f49c431c208c24edf8be6748","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.919-beta.tgz","integrity":"sha512-F43pXxlIcJ1fZ5XjEEatK8cTlmZEOSxwi94Laf4lzF+Pg0hQRldlLrXfMA5a2UIaB8ZF7etf9x9w2PApAoRMBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEZXfpgoL0uipXvdO3ZVL/Ydv04OOXod0TCXW0erCM2tAiEA7Woj6syyfctEosoW1J/ZM3pK1V/C/lI05YtGACkc8zo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/meetup-web-components-1.1.919-beta.tgz_1495138068705_0.2881647073663771"},"directories":{}},"1.1.920-beta":{"name":"meetup-web-components","version":"1.1.920-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"5ba635f3582feffed369e796d6e6aecf2e94bee1","_id":"meetup-web-components@1.1.920-beta","_shasum":"0670a4d44c0717146a4bdb4bb99b4648cec8bfa9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0670a4d44c0717146a4bdb4bb99b4648cec8bfa9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.920-beta.tgz","integrity":"sha512-7uoiopt3tj9v41Nd5CbjPaODLLYd/wLThVZfVlTLS+4PG9TGF4G0roxiWJKEGopX96UEvaZqXK2I+CWdoGpUIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBkjO+JnzCHweohvxkW+WCGOdf1ENrk9oV7+YGvLCo3lAiBQQEnb4NXneQHk/4mlcjKTipSvwFBpvSWTMxmLjNQZ5g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.920-beta.tgz_1495217897889_0.07099636970087886"},"directories":{}},"1.0.921-beta":{"name":"meetup-web-components","version":"1.0.921-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .out","gh-pages":"gh-pages -d .out -b gh-pages","deploy":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"9ceff92bc924f9509f95ad55d62386b1543afd79","_id":"meetup-web-components@1.0.921-beta","_shasum":"86a8930fe21beb7eb37798725008ca5a261bb173","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"86a8930fe21beb7eb37798725008ca5a261bb173","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.921-beta.tgz","integrity":"sha512-B0OLJcErZYizTqAjeDarSxI8ntDXbFHStNO9PTk0Z00GLLr4Yw0wzkO3oIz4Y1NgkfOiGcRX2373RSYcA8lu5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe9J4hi5SCJ6F2N/S+8yRZBuQTmf4WDIMFOSX5dR/H4AIhAKExtYKQVdlNz1vw0HIftSzxT3HicM6tdksv6Nc9QgH/"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.921-beta.tgz_1495402693386_0.7312308340333402"},"directories":{}},"1.0.922-beta":{"name":"meetup-web-components","version":"1.0.922-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"2.0.8-beta","webpack":"2.4.1"},"gitHead":"200edebc6791ee1e83df414d9555e0df419bb752","_id":"meetup-web-components@1.0.922-beta","_shasum":"c8b81212cdbab6b582305443504e3126da7e7ded","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c8b81212cdbab6b582305443504e3126da7e7ded","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.922-beta.tgz","integrity":"sha512-n1TJN9REFxQSpewFV5vEr5nOWnXPFb+kt4DWyh3h52a65qkTRlO+D0vh5iszRRZfvfIVwrR7iRPIDPncoOUevw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU5tsFyfKimXKf5USc+cPksgix8K2Ud5s0TSaPAeFJWgIhAKDr1KzFQtLkqNTU87yMkuYKgiN52/Wq0jWKR9jZdj4V"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.922-beta.tgz_1495487511330_0.7971472186036408"},"directories":{}},"1.0.923-beta":{"name":"meetup-web-components","version":"1.0.923-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"145811bd361460dc66e2c185309682eaa615e50d","_id":"meetup-web-components@1.0.923-beta","_shasum":"e30a0d77c063d6748ebba9a60e874349262d16d8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e30a0d77c063d6748ebba9a60e874349262d16d8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.923-beta.tgz","integrity":"sha512-mUDAWvejKtADAfHoGK1YlBLEgUX8dvqlNqhM47MeBRCN1+EDRrran5LuQeLWaay3wAYiZlaaqH2oebs/42F4LA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGuWDp7OhKhUQKRaS8OZ7TQJn6C7KB3DCmBEC++kVfsdAiAtjdQFq84oWG3LpCNxU0jxxT61W+H/YHIJWATM7t7XLw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.923-beta.tgz_1495489219003_0.09721115906722844"},"directories":{}},"1.0.924-beta":{"name":"meetup-web-components","version":"1.0.924-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"2.0.14-beta","webpack":"2.4.1"},"gitHead":"48e3225b88fd24c33e62f3fc810406bedf9230f1","_id":"meetup-web-components@1.0.924-beta","_shasum":"11c9aa0127a347f78a6b27035ab01128c5193832","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"11c9aa0127a347f78a6b27035ab01128c5193832","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.924-beta.tgz","integrity":"sha512-0ROspdy70er67NlpK2cCTPt4RAPq9pZbxqgZHxX1LqeqtF64vCJlin/QEDrTpf748AVJzrTTlEn9a/bq/QhGOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEAWEbRXhU82JEKwQVQdYcXXfENNqc+ohzq6Ta5a1cvgAiBxdMrdGx58AEzNgc+qt1O/u/ha53/hNSUaEL3WVrzJUw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.924-beta.tgz_1495490550226_0.016924850875511765"},"directories":{}},"1.0.925-beta":{"name":"meetup-web-components","version":"1.0.925-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"2d5ff76c9fe7a03dcf90bbbb059961eea8b84099","_id":"meetup-web-components@1.0.925-beta","_shasum":"e8d05e751a825715ad5790839617414a6e821462","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e8d05e751a825715ad5790839617414a6e821462","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.925-beta.tgz","integrity":"sha512-3b+Q8l2Z5Jgf0Y2bhN4pO+eA6AdDZsc0Cc3wMdxDx/7h6q6Lr6Xmq2pcGT8sToEhRTJjMIRkJkqHCg3lHwug3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwrd0qlPNIvdPZcXQ7haoMvqnCUiYJhlUKikjGwDoSkQIhAN7vH/LAgG+jLkopcdZOKBNtsmbK07JTV/BEnWYpeiT1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.925-beta.tgz_1495491909380_0.9359544180333614"},"directories":{}},"1.0.926-beta":{"name":"meetup-web-components","version":"1.0.926-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"121fd09face4830c05dc5a3cec52a96a9cb42dd7","_id":"meetup-web-components@1.0.926-beta","_shasum":"a445b5d297107192d598bc35774ed85dfad2f32a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a445b5d297107192d598bc35774ed85dfad2f32a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.926-beta.tgz","integrity":"sha512-j8TrlpcrMQ/JzVZkfMXZrvYA2PJ4TY01v4P5qfpgKXQrQ5zNOfNuBWNgCkRd++MONAsOa1yr8ZZ1UPo8Kd5IVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5MV522oRQShhNdJBdapRnvaO3P7l+aE3j1WsI5fjoMQIgYIH1CB267bVygEJqaVBVMzurQ1k4FXfdN/CeuDv0Y4w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.926-beta.tgz_1495497102987_0.024484097957611084"},"directories":{}},"1.0.927-beta":{"name":"meetup-web-components","version":"1.0.927-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.18","webpack":"2.4.1"},"gitHead":"56222b1373007dcc0f78d7c8dc20dbd6773a32e9","_id":"meetup-web-components@1.0.927-beta","_shasum":"a83e543c0b0a055339db34eea4657b131bfd1674","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a83e543c0b0a055339db34eea4657b131bfd1674","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.927-beta.tgz","integrity":"sha512-NVQEJgwfYTYsg9hzo6n3J8IDAzLJX4OjSX4EKuGD77tS5fbGK5d8qZv82knHRS72n9K2suQqg7MtEvokKb9yBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnYz2jf3GhwAMKs8xtAR7UBudAvwB00p6mgZFeEHU5jgIhAKqC756W406wxyDM6wVL5v9Y5tqzj6Ytza+6/7HECPXT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.927-beta.tgz_1495497330033_0.7786513401661068"},"directories":{}},"1.0.928-beta":{"name":"meetup-web-components","version":"1.0.928-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"4a2e09a9f499a2da95e915ebffc6e531c05fa2f2","_id":"meetup-web-components@1.0.928-beta","_shasum":"474c46f53ba0f498fb59f0130d03a8c46c022b7e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"474c46f53ba0f498fb59f0130d03a8c46c022b7e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.928-beta.tgz","integrity":"sha512-yCMwbK+YnHo8UGUbhA+BiGCaYi0xAdBvcaK3QHvIH8j+ZiBz0Ozr/e5500OCEEDuFrYMe8LuHEIlmtVsM1LqFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcdfe5+G6rJdDWMwqxTCrI2HWg2kH4GT/HYJ2DHy9wMAiB2pMyNqSdXxtIuGsl3DJXlsxc31YLtMqQ2zllg0E9NQw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.928-beta.tgz_1495497350737_0.8231024991255254"},"directories":{}},"1.0.929-beta":{"name":"meetup-web-components","version":"1.0.929-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"796f51a1d272a7bb6b278bc334aa04b5d7df6f55","_id":"meetup-web-components@1.0.929-beta","_shasum":"4923fb474b83eaa73555a97707c42237aa94afd8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4923fb474b83eaa73555a97707c42237aa94afd8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.929-beta.tgz","integrity":"sha512-XdZ8WHeMjjDPFqzX/G0yVXTIUeLWnOykvrXetAzhSzCKKMj/53aEQrLn7jZGzaXtEqbi2rI52PJYHOZGWkRfhw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpNbrKaYumpmUhcB9w6PBFRxR+CfDIyZC4RGZLHGCeDAiB5QvDmU6T5hNhe1VePW3ZmatVirsTXGHaJbcuU4nPRGg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.929-beta.tgz_1495497953695_0.3408729962538928"},"directories":{}},"1.0.930-beta":{"name":"meetup-web-components","version":"1.0.930-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"0e4cf5361dec3eb7d34fdae88fa70bf98f8114af","_id":"meetup-web-components@1.0.930-beta","_shasum":"394c7d8aae4ec66a81e3d9be591b5075ebc69813","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"394c7d8aae4ec66a81e3d9be591b5075ebc69813","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.930-beta.tgz","integrity":"sha512-mSAax6Yx+J3bLE3ii6gRFO7IwFrks+GIAi6ZrJT+wpR+z/pP2UvoWBOA0d3IDWVd/IhigPdn/BCaPuX9gEqz4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAefn509rkESkwzfv1KaG/JyzRJ4Hz9QpqFjmEqmtJu3AiEAx0ch8LdPghfc8C4kYBScTpjwFtxaJ3yGe0XKUhL8vvk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.930-beta.tgz_1495509402721_0.7633796888403594"},"directories":{}},"1.0.931-beta":{"name":"meetup-web-components","version":"1.0.931-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"d071603b5ec305a124644fb873e6851ede75feaa","_id":"meetup-web-components@1.0.931-beta","_shasum":"d2143d1f53e4c37c81ea8b0b0a3a1088873f115c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d2143d1f53e4c37c81ea8b0b0a3a1088873f115c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.931-beta.tgz","integrity":"sha512-ca6LGRjgVLCr3quA++M4XTxm2a/QnOoGTkKjTxsXXrGZIZLS2EvChUZ417llz+6DHSECrLqrWZlbFBU6sc8TEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+f9ooyxo+b/xA5cz4BF+L8zMkD1U213Urx0aorjvWvAIgIaFg9riNF7xJQYvdTYeAUcCyElzsEOla23klxAWUSrw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.931-beta.tgz_1495550132615_0.7868498598691076"},"directories":{}},"1.0.933":{"name":"meetup-web-components","version":"1.0.933","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"353628387b8fcc673805d1f9c258773842c32730","_id":"meetup-web-components@1.0.933","_shasum":"a923b8ad717b17ff366bbafe3c710f118bf6d33c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a923b8ad717b17ff366bbafe3c710f118bf6d33c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.933.tgz","integrity":"sha512-E0aLg4rOhS0Abt30T56R9VupVU4lKVwNOi4cAsm4+RgLnjMolxcJrewgVkqmIh+GsK6bVCzZ35AU0A1ssQ+cKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCof8JVsG/EIjmRot70El2SkYJ7ep5qacHuZrj8pvKI8QIhALNuBW0O6tElA1ifj5gmXBA+KhlHFyrXn0v/+/2n4LI8"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.933.tgz_1495550558566_0.3749580034054816"},"directories":{}},"1.0.932-beta":{"name":"meetup-web-components","version":"1.0.932-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.18","webpack":"2.4.1"},"gitHead":"41822c6b712bfa1f632335dc6329c1056ce451f8","_id":"meetup-web-components@1.0.932-beta","_shasum":"fcfe5846114275cfb3f7bda04142c2790883415d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fcfe5846114275cfb3f7bda04142c2790883415d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.932-beta.tgz","integrity":"sha512-KHGGlbNYcT+aXrJdzzLxzcLPAq3GqDeXw24XS6YI+k8gNGg7JAUSCZpJtOpirHH9V0oPnCFrMy0SOq2mCaSRTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHtS2XBBQirXDdptJ/m2oPNiXJ2LKAuKuKH0ckMeg15fAiEAgkDfSgiFwf/1l6ifNx1QTTWvmOR1Mz6h+1N+IhTFYno="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.932-beta.tgz_1495550563996_0.507094748551026"},"directories":{}},"1.0.934-beta":{"name":"meetup-web-components","version":"1.0.934-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"f1a30bbf410f03f9dc9fdb52b19b83d6c4e1b56e","_id":"meetup-web-components@1.0.934-beta","_shasum":"29190609f3cd4826b0ec644f671557506bbb5aee","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"29190609f3cd4826b0ec644f671557506bbb5aee","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.934-beta.tgz","integrity":"sha512-1BXXvgEMiZgwVtYUzeIV6LzJOocfu7xZPsIAVmzlNIjo6jvie6aOhzv++0wZBwoQ5CdrreTvdKStPTuEIAeqaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbMi33eA05CKBKphp0UcaGFBR0EynW6cReRN7yIecGaAiEAyOJzA7a8s2PxaEZ6ipMneXO4ghIuh85aLbYru1aUrgY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.934-beta.tgz_1495551088723_0.048534072702750564"},"directories":{}},"1.0.935-beta":{"name":"meetup-web-components","version":"1.0.935-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"334447f004da2c0679d5a038b1fdf4c034057926","_id":"meetup-web-components@1.0.935-beta","_shasum":"5ea2f73214ad14e8f82cb2272638f5aec85550c4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5ea2f73214ad14e8f82cb2272638f5aec85550c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.935-beta.tgz","integrity":"sha512-JKOzcQF255xOFEooenCt6FsGZWA4Gu+0Hqljo9ht543/D55eygZzPJqWvKA5TOszgovolFBc1eVaQjU44me+aA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDztbKlKNxDZFeuqwOlkFTRMpF2xcPbWA0etuW4DDvIdAIgLk/yz+5dqhAzSd7KUKAOQv7UmDYKfayRmupwPqAztSo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.935-beta.tgz_1495553233598_0.7615266507491469"},"directories":{}},"1.0.936-beta":{"name":"meetup-web-components","version":"1.0.936-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.18","webpack":"2.4.1"},"gitHead":"92a21a35e73c9d56c270c93039663f6794177b93","_id":"meetup-web-components@1.0.936-beta","_shasum":"84fbb5633b18e8dd3253687f02948ba7cf530cf8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"84fbb5633b18e8dd3253687f02948ba7cf530cf8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.936-beta.tgz","integrity":"sha512-kXJfl2i7Dgr9aY7/vG1lad/Rd+vBkEIBf7F44qqQ+HbKM6pScZt9MSLnpi4D0xW8GZR2BOKtbR741pY9KWDvsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDf+R8lU6eAM0fFkAtUnpEigjFR2jYcf19RdVlCXPBs3wIhAP44Bs9q+kv+cnnIWbQeL3Glg9iSHzmppsFncEmOoPdL"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.936-beta.tgz_1495553812661_0.40461841435171664"},"directories":{}},"1.0.937-beta":{"name":"meetup-web-components","version":"1.0.937-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"0eb61a56ef7cebebda5d51bca9e645ef7fb8691b","_id":"meetup-web-components@1.0.937-beta","_shasum":"9ff57e982714cd97186156a1b98bc597c6bed04d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9ff57e982714cd97186156a1b98bc597c6bed04d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.937-beta.tgz","integrity":"sha512-dGrVFNKN3bVB62jutMsuq3gyRVCDNR+BaC+iVV0YIHai4aaUxVlFPObt9JgqX6p9KWpwi1t+gerfzwkXFmC0ZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwJ5JyAvp4oIL9oQkATW5HgmB1NBu4wwviOXSnGHRqsAiEApUKUGD9ajKKO4ffSfdbwbIp/2n2UB4BhA2OM/eO/YdY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.937-beta.tgz_1495555109951_0.5551787470467389"},"directories":{}},"1.0.938":{"name":"meetup-web-components","version":"1.0.938","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"d90668c65d8dc53509b08f6ce73e17b1c737fb5f","_id":"meetup-web-components@1.0.938","_shasum":"b8d8f019a9fc6284f5f0a6549420ea8639b28e2a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b8d8f019a9fc6284f5f0a6549420ea8639b28e2a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.938.tgz","integrity":"sha512-o1xINBIAPM05aZW8fdhc+oLXW89Jk6ymJ7S4VUYpiGW8IXMj/6AgXy+8vCWwPJ+9yTarLWGIhmreDtT0B1zPhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2MnaVyBumZyj0X6MkcQ1S1kIUmQI9Bcp8mYHuJgIN7AiB2Wp7tNTODPFxo43dLsbII4T4pEyDHJ+vXSoza3vX63g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.938.tgz_1495555493310_0.9015500745736063"},"directories":{}},"1.0.939":{"name":"meetup-web-components","version":"1.0.939","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"945de893df26dc83e82417a0e5fd0172d41fd569","_id":"meetup-web-components@1.0.939","_shasum":"02c2c6075232737096a0fb19bd6459b7ecb79010","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"02c2c6075232737096a0fb19bd6459b7ecb79010","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.939.tgz","integrity":"sha512-6D10SIvUg95JDUmM7PvGTjZfs6RNouLhkVQH1vZu+h8eyXOntENRBMphe1sNXup3Pj6qAjdJXbXPlQKG+sK3IQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeIEQad9FWV1L5GSjVgH3e43S5RmvT/5dTieJ/3YqENAIhALwfPTJh94qpQIZNDII5f/ge1ZYg+i+SD8ThETuPuR3J"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.939.tgz_1495555502192_0.7909365221858025"},"directories":{}},"1.0.940-beta":{"name":"meetup-web-components","version":"1.0.940-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.4.15","webpack":"2.4.1"},"gitHead":"08a17a6f80ba4b994b398860cd0879b1add44c13","_id":"meetup-web-components@1.0.940-beta","_shasum":"1864b95092155043c33fc8fe02845aa922fe3483","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1864b95092155043c33fc8fe02845aa922fe3483","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.940-beta.tgz","integrity":"sha512-mIB+PtzWXusqKqSV9xHZi5x8Kj8vOZ3saH5G4IOK60xMFMvCvPfOIw6c0JOg/qZKSR+ihf+g+fPnNvJqaxxdVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeDo5BkMj63+0fNhtCFCYMQb93MhABbrblm7hgzew5bQIgB0iZ3j6zjusRQDMr8EQmpxY+AdP5K5C6snsDM3VqoBY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.940-beta.tgz_1495568688811_0.8250106361228973"},"directories":{}},"1.0.941-beta":{"name":"meetup-web-components","version":"1.0.941-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.18","webpack":"2.4.1"},"gitHead":"0c6169c339b5d2835f0c2569221973ee3a45d219","_id":"meetup-web-components@1.0.941-beta","_shasum":"90a7c324f282b58b68ed92ca68f17ccfcf405891","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"90a7c324f282b58b68ed92ca68f17ccfcf405891","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.941-beta.tgz","integrity":"sha512-bT3KkVe75JBkM6S9+Sx7agExQA2E+S504ppDlSoFzo7RYlwZiLcIUt0QEWL/YcTOtUZ3eh9n7Bh7h98jaMv8MA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbLDc6WMY4RsIqElrRGWylX64qm1e0PxJHvOgK4hLVQwIhANMb4r2KMJ+JGRuAeNbgxYEy224hxwosyLPjXkryR6C4"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.941-beta.tgz_1495572841676_0.29009046871215105"},"directories":{}},"1.0.943-beta":{"name":"meetup-web-components","version":"1.0.943-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.27","webpack":"2.4.1"},"gitHead":"11716762dbe799999cf7c233510ad8802e48c1a0","_id":"meetup-web-components@1.0.943-beta","_shasum":"e61b25f65e1699cc168ca9a06832a5cabb9eb477","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e61b25f65e1699cc168ca9a06832a5cabb9eb477","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.943-beta.tgz","integrity":"sha512-K8BHd56VN0WszSG7+V6G+oRd+/4t1MyhTt9Nb/1xhxttbvYEx4vYQYG5s5C8t9Hdy2d2jFZuFB27dswgBbAgCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6zVkZyx4L2FBxK+jeORu3rZjjUHMdlCr5UOlsZaBx9AiALibkSLRtFlRj9+jsmFERZjciDPpnVdGYGBwpiqt/UwA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.943-beta.tgz_1495637296369_0.5204392916057259"},"directories":{}},"1.0.944-beta":{"name":"meetup-web-components","version":"1.0.944-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"cc42b95e842ee6285c982abcab5da45cc4ae7b68","_id":"meetup-web-components@1.0.944-beta","_shasum":"ca836b7f21f285c52de4d0dd78aeb9ab6d820eab","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ca836b7f21f285c52de4d0dd78aeb9ab6d820eab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.944-beta.tgz","integrity":"sha512-F7bV7Ba+tY65z0jO06ebnzdLtLLtPWh+m1SiygKC9tjIRb03a+10o9aRdgMZQo1iKIwBqYLBJgCJR8yPm8YSQw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFH7OMEh9L+4hWzqMMvKKaNb2og0Kwm2KA4EDBVgeuWmAiEAjkcwNU5AGydA9ma93JzHit15//uFuKZ5DJB7IUqRygs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.944-beta.tgz_1495646501431_0.09353039716370404"},"directories":{}},"1.0.945":{"name":"meetup-web-components","version":"1.0.945","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"982864a34768377714cdb87d0649c436d4ff92a6","_id":"meetup-web-components@1.0.945","_shasum":"8d47dbe581c026cb6854c1f1f60354918c735dd4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8d47dbe581c026cb6854c1f1f60354918c735dd4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.945.tgz","integrity":"sha512-IC7nIXn6M+wbjW2x4wqsOhPkrwLr7lmdh3TpweEKqBAHY4dBOeVq1WShWZTiF8lJ07GWdeyBHPzQoYO3Vw8sPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG7w8hNuQOqvSYtlwfvvfwXNDxIVbYQETORzqS/dWzQGAiByli5Gh9zm51525tSqILQymPG/1bDyIinWGqNMz7ofkA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.945.tgz_1495648498756_0.9596860178280622"},"directories":{}},"1.0.946-beta":{"name":"meetup-web-components","version":"1.0.946-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"6011f75d35007dedbd22197f1e9934a8e187e6f3","_id":"meetup-web-components@1.0.946-beta","_shasum":"c5e27f324702599b2b97afa7e8aec4195ff060ae","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c5e27f324702599b2b97afa7e8aec4195ff060ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.946-beta.tgz","integrity":"sha512-ysquC98JUjasOI5nt/sv9Mgab7Ocfw6qvmBSa9jE+mbXS3sTFAXaTBdFyMfNkpWZuSe7Rev3BQ2iiNs42SfFlw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIGOGDQFqVXRKsVWmydX/5b4Z+lfUqw6rTM0lkFe4JVAIhAKkeuOovrh0YrW8yDyjAmeeUp42bCpfG5WeDZzcJCxdj"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.946-beta.tgz_1495658492575_0.004478822462260723"},"directories":{}},"1.0.947-beta":{"name":"meetup-web-components","version":"1.0.947-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"189221c9d586e60e0b2e149619bb2bd8ef4ba967","_id":"meetup-web-components@1.0.947-beta","_shasum":"eebdc2ca6ac928d6118cdbec65f6984f4b0a4836","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eebdc2ca6ac928d6118cdbec65f6984f4b0a4836","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.947-beta.tgz","integrity":"sha512-Red9X/qPScLY3yk2cikzVEArIibAfQuxvljcnPJ8/ZWliFy2NYuBqjJ8nd3yxIgGh+yYU9OcIlvBxbfz7HWKow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClb0gmLmNb217NCnmEr0YWV+ifzWJH3RiVhAZbLHQl3AIgDJN48fc016OGWfHPMNx68VKNYTClU2kYMjsnOUf6ri4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.947-beta.tgz_1495669472529_0.2618152857758105"},"directories":{}},"1.0.949-beta":{"name":"meetup-web-components","version":"1.0.949-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"2e032506d02786fe507aa13141337912fd5fb3a2","_id":"meetup-web-components@1.0.949-beta","_shasum":"3844f4e001b482e9440b86da46a9e3407bc1ca2a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3844f4e001b482e9440b86da46a9e3407bc1ca2a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.949-beta.tgz","integrity":"sha512-XSHnPUA/jXuh79G6NfLKC3L8tkmjMZ9kPUERUkKpYJRSDScQgRBTj1IPNZduWdBkMQEmPh3pzZv2uHL8pLEtFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHK6SplFA5hFQ009JccW3Epm+ksIYRDc3abFDCT7qgZpAiAECGQqa/aihAOct41ZQWYNtuqVSMpF+hVHJQzxhrt8YA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.949-beta.tgz_1495670971291_0.744746949756518"},"directories":{}},"1.0.950-beta":{"name":"meetup-web-components","version":"1.0.950-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"48aa77f8870bffde56deffacecd4ec6ac3995218","_id":"meetup-web-components@1.0.950-beta","_shasum":"5002f96494771abce61ae658b2932b4b17d08de8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5002f96494771abce61ae658b2932b4b17d08de8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.950-beta.tgz","integrity":"sha512-C8z5m9oy+5Z5emWjnacrPEPQEaToHQzz9MN2yb7ryGyGIgsm1MktU7ktArBB3LITouS56wN0hYOGguXZytH41A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvIeuuBV+uHcQ3aVZgmIF8cmZJvqbH4dEoni6Q4xoU+QIhANOqU4G3evbKqTcjVTs9y9IZ9Fg2fhaIhUnzPPmQaATS"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.950-beta.tgz_1495671210252_0.8829728008713573"},"directories":{}},"1.0.951-beta":{"name":"meetup-web-components","version":"1.0.951-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"5ae8fdf1a72a3842cbad17699deef5298defc701","_id":"meetup-web-components@1.0.951-beta","_shasum":"bc223f2fc57d726567fce4dd63aa8f3e29e05897","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bc223f2fc57d726567fce4dd63aa8f3e29e05897","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.951-beta.tgz","integrity":"sha512-9muTVnqeA1TBTU4btldWygkFzYYABb2ujnH8o5B4CNGOL6DB5buSSZ3KSRZ+wYL7ZlfhgGwUunaJlLIQTkRK3Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGImtR09BCbNQaUJyEZXOmpyK5aDchHNnyUQWpaGmQEAiAvDhjaNGQ8r513xlhgHyeBu3pNBnangkVFScRMzoDg2Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.951-beta.tgz_1495672071128_0.15780209540389478"},"directories":{}},"1.0.952-beta":{"name":"meetup-web-components","version":"1.0.952-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"0.2.2","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"8b3d4652ac5750740351f5a061c5206b1a868fec","_id":"meetup-web-components@1.0.952-beta","_shasum":"d329f6fe88e829f1a94692c05f7aa69c7bd26165","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d329f6fe88e829f1a94692c05f7aa69c7bd26165","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.0.952-beta.tgz","integrity":"sha512-esyAS0mYSbgDDljxWKfzIJzYDK/rAkN2HNYc8nRt57UdF+6FLh7a9MvX5duwcTK2OwryBA985sv8ELWGgDk3iA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSCMb+jG8Bdbqj00n5iGp059n7F1C5tCxfz7UeS7w8NAiEA/36ueQ4ICdWK55KgQkJNgszpuJnv4mrXas3SB+EyC2I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.0.952-beta.tgz_1495724362768_0.7894018113147467"},"directories":{}},"1.1.953-beta":{"name":"meetup-web-components","version":"1.1.953-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"c5d28a9a0fd716145fd9bfaaf329521d670bfe76","_id":"meetup-web-components@1.1.953-beta","_shasum":"da28851efb136c7718f6d22747e6f018453fc8f8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"da28851efb136c7718f6d22747e6f018453fc8f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.953-beta.tgz","integrity":"sha512-aDEky21VytTdovrHG6Y83V7MNAHOJNPnhvtXzUEmD5Aw2AxOJN42QjT24GA4pSijCxg89coT4PPhqDP6A+lhIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCAKAFrbUasy+biNlN3bGKhpwDZTsPlEywCAa31Q5Y0AiAv/3MH39mLQTfkKdOQMD/k7l1GKpnntAJGg2cMp/u//g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.953-beta.tgz_1495738159219_0.09557721321471035"},"directories":{}},"1.1.954":{"name":"meetup-web-components","version":"1.1.954","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"4cc40788161c79078737bc55c9c07c452e3b0f51","_id":"meetup-web-components@1.1.954","_shasum":"cfa83129b98716ee511393d63e994c2826a0ccfd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cfa83129b98716ee511393d63e994c2826a0ccfd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.954.tgz","integrity":"sha512-XuGbMD/YnyWERmMsxEyRZlXXY2k+kwepfZynaw3p/tUkjGMDWcSHijLJ1R1j3itA/yR8pUeVlPJNW0FKfWD41A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGtROx6YGgu9knoqBR5vrvi0HTpIBJQMeOBRIY4OH7kkAiEAhnpkx9SS9gMJJmh4Z+rZWwBmHJe2EKZNq8GukOuYFLw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.954.tgz_1495738407499_0.707216567825526"},"directories":{}},"1.1.956":{"name":"meetup-web-components","version":"1.1.956","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"f43042195eefde0652efb2755006f9e2b8d2414c","_id":"meetup-web-components@1.1.956","_shasum":"6ab0cf7e32f1e197279215a93c023de229e7ae42","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6ab0cf7e32f1e197279215a93c023de229e7ae42","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.956.tgz","integrity":"sha512-0SsFYuP8a2MMv9nxAEz/2K5p71lMrAo+05bK+FIP9h4Dejx99cJguw2afnGQeXE8IlnK4ea9s/FAiZ0m8HNPzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFOD2KtjqQlrqE/Ydy+pvnkk7G2weLEX3nIp751op0IAIhAIVc7yTt5rziPtb107Gww8YVE6ZKi59YzIqo0n0iJR1t"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.956.tgz_1495761448993_0.9881602565292269"},"directories":{}},"1.1.957-beta":{"name":"meetup-web-components","version":"1.1.957-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"b2a08227f12db37b7c17cb2f2d1a29f0e1c07b26","_id":"meetup-web-components@1.1.957-beta","_shasum":"96b050f6d107f9a84cf94aeb8824eedd5a659a51","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"96b050f6d107f9a84cf94aeb8824eedd5a659a51","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.957-beta.tgz","integrity":"sha512-yNyYreQpi0AYfzg9UwS6/7kRkEobu/yxtbZDNa9g9w4aq20N/PVl+oXauolzeOPpyTBjq1gDvapCrJzlaqR21Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbmC8pOBy4ao/lKyaQPAI+3AIHHRGRqHBnKyA4T5olowIgAtdYiPxuhBvFBf7g202HW0QXElzH4B0GbTYLlSiIbck="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.957-beta.tgz_1495808643380_0.1330575745087117"},"directories":{}},"1.1.958-beta":{"name":"meetup-web-components","version":"1.1.958-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"39aa47e74ecaf666724bda1aa0d7229527d31961","_id":"meetup-web-components@1.1.958-beta","_shasum":"b0ea39ecce1d23b9d92cc260833d78b88cd00850","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b0ea39ecce1d23b9d92cc260833d78b88cd00850","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.958-beta.tgz","integrity":"sha512-UoG5WwO/bXX0eRviroZ2maV1HuNyA05IxIAkmX6hvaweLocoCU2VwbTkra+eivuItPrLNP99rEGMMmJuPj1cyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHzNj+mu4ea2AY6PrxhncSDv6bUfJyOW5fgFy6JRQjYsAiEA+Dt3uX6Kl/Gj0I8s2SjHftUhMAtX58q5JKApN8ZWyVc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.958-beta.tgz_1495810799812_0.6461461347062141"},"directories":{}},"1.1.959-beta":{"name":"meetup-web-components","version":"1.1.959-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"59b6b18713465f797dac266ad2e8d23a39fc4182","_id":"meetup-web-components@1.1.959-beta","_shasum":"a98fde3c37540def81bc501c0b14e2f42df0070f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a98fde3c37540def81bc501c0b14e2f42df0070f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.959-beta.tgz","integrity":"sha512-dzN67Q0QvaHBf5DyBg0q8nboBKtuVayVE8h50t0rdjvjekd8mR9T7xBYXcjCpmVG1+vUFGO9CIh/Ry3rpvjbkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVWemvPLwuKukieB7BO4UTgLVY8cWcknaT3U6Vs5ImsAiB40vxPo72Kqpuc8EDJnggKQAIso0XYxCrrcYzf189KfA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.959-beta.tgz_1495813435296_0.5678570365998894"},"directories":{}},"1.1.960":{"name":"meetup-web-components","version":"1.1.960","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"5cc861cfef15f69f2042efe70afd0c1b84c6161c","_id":"meetup-web-components@1.1.960","_shasum":"77eadec14ced5c4765eb82511ccfce2f1bed8073","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"77eadec14ced5c4765eb82511ccfce2f1bed8073","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.960.tgz","integrity":"sha512-37Ig3L8YpYYXAwZHEmqmwvKpNk2UywhfLOVotcnL1JmvavZccQpetMe9dEmF4CW99ITAAQ8b2ib5cNkrnEBAYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC+8ptsvyYwSgRCrHpuanCGxnZF7nlZN+a1LS82QJz6yAiBZiX2vCn8EnsJedt41X1OqA0fs15xyQf4WoUyHewAO0A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.960.tgz_1495813516699_0.5156609988771379"},"directories":{}},"1.1.961-beta":{"name":"meetup-web-components","version":"1.1.961-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"19caff8c87babc7ad65125a0d8d4c3fd31fc688b","_id":"meetup-web-components@1.1.961-beta","_shasum":"2806b11b9f564c04112ae938ca8ed33c190956ed","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2806b11b9f564c04112ae938ca8ed33c190956ed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.961-beta.tgz","integrity":"sha512-o+DLc4Q2WEIvi4qp78JwcSkg073A7QjmCcXPKkESsR570Oi/JpZABVPjR/ffizEWmoRSZQhRfFVJ71PFLXHpXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtUONV1NKVn532UDYgl2DhpKESoUxYPfrpSb9ZEILiDwIgJGYOgPKb+wNCnDy11ierlyxcdEs3hwxNAbI0xFEzxcM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.961-beta.tgz_1495814756854_0.8056271050591022"},"directories":{}},"1.1.962-beta":{"name":"meetup-web-components","version":"1.1.962-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"fe7ab0c0d53003fc67369ce0afda97fa5b586dd6","_id":"meetup-web-components@1.1.962-beta","_shasum":"88d1ec53e913053e24ad20b819b78ede4341e4ea","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"88d1ec53e913053e24ad20b819b78ede4341e4ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.962-beta.tgz","integrity":"sha512-LI4uiDcmrEF73d/y1u0E5hOvE4Peu2HyaSAjQlKj++9x1vspd1BLASyMpChSCPe1cJ3u3RQ/RC04CXiBTn/imQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBAPcGSQeIEaIjJfhdQoRRTXVlr3T9T17YdB35lgJcdAiEA9Vp091fOldch033ueKqWImH9gZYFuSM7zjw7kHMXzQQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.962-beta.tgz_1495842677216_0.6257668719626963"},"directories":{}},"1.1.963-beta":{"name":"meetup-web-components","version":"1.1.963-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"7c0e3a3e182952c8b17054647cc56b0455eb306c","_id":"meetup-web-components@1.1.963-beta","_shasum":"8180780d12552f839d39a22fec7650e12fe2e8fa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8180780d12552f839d39a22fec7650e12fe2e8fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.963-beta.tgz","integrity":"sha512-cnf1PY1Weq16+Gk4XLnAok9jrQcrIaFU3AhzKoeIAfK0TH1IDadq+g+lH8X1AzgwfUqa5FT0s7DO09gsgtzhyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEakBT6TEqs49siPwTsGaZXRAhYHjGeJcA8Z2g9OAG5AIgRuoLe08h9q7jE7mZ7miGI9G7iDlZo/Mo239UdslRmEA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.963-beta.tgz_1496156260852_0.3746979250572622"},"directories":{}},"1.1.964":{"name":"meetup-web-components","version":"1.1.964","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"10d392d941c4ef0988f96d11edf4393ef98de732","_id":"meetup-web-components@1.1.964","_shasum":"8aa6ed3a09903bec7182e94a14386c2e1705a2bb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8aa6ed3a09903bec7182e94a14386c2e1705a2bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.964.tgz","integrity":"sha512-H2N/O3ZxXQIYsvteVkZ/s0v+nANxRwtqwzIH0t1nOTEe0/OBFRg8Yj2YVClXsmII1gc5F5/ki72SajhgNAWJfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6fGbek8nRKL0HarDrE4+6OYnZAb2ihAGYk7wK5eK4KAiEAkCG293eUA/RPfGZLClST6/FXY5ZsaqgyhK9oGr7toEM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.964.tgz_1496164815062_0.4301400757394731"},"directories":{}},"1.1.965-beta":{"name":"meetup-web-components","version":"1.1.965-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"c2f46b9674bb952756f64575c46704167182f508","_id":"meetup-web-components@1.1.965-beta","_shasum":"62dadd3eeb99c8666646d22a205718766fe3e917","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"62dadd3eeb99c8666646d22a205718766fe3e917","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.965-beta.tgz","integrity":"sha512-jLBHQQSNbIhXFujhR5lNeNOyIMKroHyXTuAuPgqXCZE4YIkcGyn/d/YM57d4wN2ZhX5VWozZyk264O1XN38vlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWG4MfljfmM/QSxnj3KkCzcqrQbqz8Ns1XIzEEF4AsBQIhAN32cEgqXQvUXeQv+JwL0ZU1/ck4TP7R/KQXXLaZJlEc"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.965-beta.tgz_1496256285809_0.6649447928648442"},"directories":{}},"1.1.966-beta":{"name":"meetup-web-components","version":"1.1.966-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"d5a44d3a9a01cddaf31f36f5dd9b5b6a56f46fce","_id":"meetup-web-components@1.1.966-beta","_shasum":"2bf284663639b7914a1ebdfcb448e28f5e0c2cd9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2bf284663639b7914a1ebdfcb448e28f5e0c2cd9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.966-beta.tgz","integrity":"sha512-8p+siFSEFr39m/LmNrrIg58KB524lOI6AmwGKxS+pDCJnBqb5YJqVsNnTJa40ZBvzFCLalq/INkSlSnkCRuJzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAtYNlLHpPyZrUrhRRZrn9INbQmaNfaZCsed6EROCYp6AiB1RFMmPDG4Z/nDQJuqqXVm+8AakzCjf5J+MYLFFwdQVg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.966-beta.tgz_1496268812616_0.004807834047824144"},"directories":{}},"1.1.967-beta":{"name":"meetup-web-components","version":"1.1.967-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-icons":"1.0.0","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"27bbfc57ddfdc282efe45e7071d1323b8c993712","_id":"meetup-web-components@1.1.967-beta","_shasum":"f5868d37eac980a96d2123ea91931ec5cce3cac2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f5868d37eac980a96d2123ea91931ec5cce3cac2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.967-beta.tgz","integrity":"sha512-Om+NmacqA97w1fvBBtXqYFRRyNh0+tml2F0VII6or6+TVBflG9ftc5fUOT9+jmADZMaeuHglD0nvYj/wzv5Zzw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEmOc5i5Vh5ahF4h/04Zk7wDxLY3u1pWlc2E7KF9jCXAIgcWqAj8KGrpvkY3bgVVF4MUh1BCuFCLd0WSxyQXpq8C0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.967-beta.tgz_1496282539259_0.09075492690317333"},"directories":{}},"1.1.968-beta":{"name":"meetup-web-components","version":"1.1.968-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"6e258bd56e200eff9f9984475ba1e18baad201cb","_id":"meetup-web-components@1.1.968-beta","_shasum":"fbc86003ea46a277bec4415f8e55eface041e6e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fbc86003ea46a277bec4415f8e55eface041e6e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.968-beta.tgz","integrity":"sha512-JCuzr4vquXvDAk+uAPc31onccunNFmq+mFDYs5ud3CKgQ2XkIm36Xqd4r7sgfVYv6xbGw1Vt7gXQn8tk/AcXpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqNJ+if+VTea4REt7eFYBWCCJKwgvplIWwJn+Bla5WDAIgYDKwTPotp7t5tbNPCPyM5dwdKmkAk5m+vf00CWKcBZA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.968-beta.tgz_1496288140369_0.12310329615138471"},"directories":{}},"1.1.969-beta":{"name":"meetup-web-components","version":"1.1.969-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"2fd491e2c96ed260024db5174810338e15c4fabd","_id":"meetup-web-components@1.1.969-beta","_shasum":"c46aa276a933dd1362c44cc0ef156fa18d61b104","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c46aa276a933dd1362c44cc0ef156fa18d61b104","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.969-beta.tgz","integrity":"sha512-j9YHcYwD6ug1XDgBMD9NGcGpl/7zyzVxMCTsy6pee5lQ/zPcUHOraPGqtskSXcfFccc5CcMhY9kd9f+Ovvx5xQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDT3FeVC8e9+YvgP4Fs87XbX7vY+/6xetapSLqfXVEjlAiArKKT24gkOzrIjo64V49NEQQROMsPV6D/y5yXEZu5bPg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.969-beta.tgz_1496288493925_0.9466956083197147"},"directories":{}},"1.1.970-beta":{"name":"meetup-web-components","version":"1.1.970-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"1886196fb03ff3d66f92839949f52e23274c0471","_id":"meetup-web-components@1.1.970-beta","_shasum":"1b0bb92554222cc6dc440e092d0a7d2d483ddbf0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1b0bb92554222cc6dc440e092d0a7d2d483ddbf0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.970-beta.tgz","integrity":"sha512-aU1o19lSevN+vw7J8ODlEh3OIzHY2tSCqBg2WJYvBQJb9i2xG97/HsTxYt4c+QKizeIWgZP1DfoVkLakH8aHng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDodWEiE73g/HAocLwCRx2hJ4pbNSGsMA9veFvD8BwHHQIhAMM+eddun8wSJP8s8bsge8dl5gnLKY6MhiV5tCD28rkF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.970-beta.tgz_1496292011449_0.6886750436387956"},"directories":{}},"1.1.971":{"name":"meetup-web-components","version":"1.1.971","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"b36a49e11a843e2b3eb116f48a4bea4a504832cd","_id":"meetup-web-components@1.1.971","_shasum":"56305313547dc119a61d35d1194bb135bc30e2f1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"56305313547dc119a61d35d1194bb135bc30e2f1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.971.tgz","integrity":"sha512-RujXHyNK9zgltImepa7jDQht5naSm+GVkKpKBadSliiXJHXF8+ZbLqK//0Ga/tABZjpqyaNtKpJ/Ku4hH+5kcw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3W3A6KtkQDJm2Bbe06uWMGESfi1DRizwQyctrh5B6rAiBBq4dCcw6xOnml2ojblLt1Ds8e1OjQ2DKaSwbwv3qDTA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.971.tgz_1496324918970_0.605668896343559"},"directories":{}},"1.1.972-beta":{"name":"meetup-web-components","version":"1.1.972-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"4ccd067cbca3fcce35d157aeb3b4293f324b8abd","_id":"meetup-web-components@1.1.972-beta","_shasum":"f90e6435c50f1251351b650aeff0dfe83d219d47","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f90e6435c50f1251351b650aeff0dfe83d219d47","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.972-beta.tgz","integrity":"sha512-tMLYj0QfbtyMRousqiKP3dA7xFleTlrySbX/RYddE2GQBhgn87IYy5UwbcyXoPNHSWFh234urhJ/xNGSfKD+MA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCizQ3S6mMtADOaZ9wdRksdYUUsOYOYXM3rMVNyYLDXIAIhAPjU7mfIHiw95uTyQjR5xUmLguzd065s6odKYs7RevMV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.972-beta.tgz_1496324973352_0.41660635685548186"},"directories":{}},"1.1.973-beta":{"name":"meetup-web-components","version":"1.1.973-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"fa18fb68794666cce86f89ca86317c3c9aabf4ac","_id":"meetup-web-components@1.1.973-beta","_shasum":"5dc3319b118fd2efc85fe2f3c568f81502d92ad7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5dc3319b118fd2efc85fe2f3c568f81502d92ad7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.973-beta.tgz","integrity":"sha512-tnmANEQhlyeyDSjquRYrij7/QsivkQP5Smhd0ROc5MnjUX5GG5iU19NEn4E1o+UkyIFd53Wd+HkRl39jN79IDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKJWn8XSc4ymLwln+TPocLN3WPlypPaMeSzPRJW1GqTAiEA3QDLTd/Qy/BtqpakJ/XhEBZt8VhcpO9DTsesUCLrRHM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.973-beta.tgz_1496325310136_0.9180979838129133"},"directories":{}},"1.1.974":{"name":"meetup-web-components","version":"1.1.974","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"58a66d29ac5ad528bd188da1cd7b94e5330ddc10","_id":"meetup-web-components@1.1.974","_shasum":"cfd3f4bd5aa7049f3c5148825c7e191d2b709c39","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cfd3f4bd5aa7049f3c5148825c7e191d2b709c39","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.974.tgz","integrity":"sha512-8bBalkHA4lJk4bxV9sCSoE2K8r5iPG8YNljf0w9F4oMTCr3iAX5ORG7glxVeemMdFEoM1ulIdF3XLQ4NfJLzTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEO/ccl+LuXDDjou129mP9od1az+aXuTtHinb/NUybbrAiBJw2Lola2ifAXaPHg66+vFXRq8URi7f6eaUdFcGxpTOw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.974.tgz_1496332670647_0.16990402527153492"},"directories":{}},"1.1.975-beta":{"name":"meetup-web-components","version":"1.1.975-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"65b159cb656bee31b020123dc726099c6ddb5bbb","_id":"meetup-web-components@1.1.975-beta","_shasum":"e9f66613baa3932a0173a8721fba43449c61de74","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e9f66613baa3932a0173a8721fba43449c61de74","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.975-beta.tgz","integrity":"sha512-v/Ps9WG97mhRdh0BCaSHqRGfrdO0IdOn7GBokVM5r2eYK6hCNUOePzjvS4YI3y/TtLHoRERwz8eLdelXsW/JPQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEHNf1bW+o8Q+88Yk4Ux9BYLXNz8ee5fEWtc3MVFLuCQAiBJRj5xfWQDRQUHV6iGXJsKPrNBvfC10Bf14YrMcp4wAg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.975-beta.tgz_1496333617266_0.7343735452741385"},"directories":{}},"1.1.976":{"name":"meetup-web-components","version":"1.1.976","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"eff5cf9e3991dc3fa7ea2e9e55e6af9bc3903cd7","_id":"meetup-web-components@1.1.976","_shasum":"33a9348128aa3548412c5e9228dc1b78f927c644","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"33a9348128aa3548412c5e9228dc1b78f927c644","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.976.tgz","integrity":"sha512-+BPHuNdKC3d7Gfr7OdiZi2ZbzR4/Lvl4DTka17ZaVnIWNBAUT1RZtuCxTkkk+UiHMOenhHATSL3FcME0H9SHlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf6BBQr5eI8Ug44f/YUMvwdR25mEv4WK50BCE5vLCBLQIhAJDZWGkAVtbb7zM7Mrwx59u5DatiRaQXuE1fuTnboSfO"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.976.tgz_1496359556511_0.5204379404895008"},"directories":{}},"1.1.977-beta":{"name":"meetup-web-components","version":"1.1.977-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"10db56c0c10c29858ad9a757cba949074fda2a4c","_id":"meetup-web-components@1.1.977-beta","_shasum":"0e12a7b325c93a2fd4a5d75136c545e8d3f5d6c5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0e12a7b325c93a2fd4a5d75136c545e8d3f5d6c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.977-beta.tgz","integrity":"sha512-7Nmn6xW6rVBIkenztUEK+dTEIBgwJ7y1BS8NmSAY55qJPsG90IszQ0xR8gfSo7t8lA/7OWWxy0e2qbx7Orpanw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF4SmigjnCnKs1rP3TWg/80yQZp5tFQV2lx6doO5dLVlAiB/c9TpbceeHyd3XRkS4F2uueeedK5hmE4huzYEcHzonw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.977-beta.tgz_1496421583971_0.3786487889010459"},"directories":{}},"1.1.978":{"name":"meetup-web-components","version":"1.1.978","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.20","base64-image-loader":"1.2.0","flatpickr":"2.5.8","prop-types":"15.5.10","swarm-icons":"1.1.48"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.0","css-loader":"0.28.0","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"6.10.3","gh-pages":"1.0.0","husky":"0.13.3","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.183","node-sass":"4.5.2","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.2.3","react-router":"3.0.2","sass-loader":"6.0.3","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.16.1","swarm-sasstools":"1.7.29","webpack":"2.4.1"},"gitHead":"4accb6a47b2b2ace3d626ddaf3c7ba95de1bb223","_id":"meetup-web-components@1.1.978","_shasum":"ffe09dbaa1f874e2729f244902ceac8e4ee17954","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ffe09dbaa1f874e2729f244902ceac8e4ee17954","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.978.tgz","integrity":"sha512-CCoyv8nasUursr+Cfg+LnPjjdWKwqRlv1Bi6fhCuTtEb6cSvCOjC6RrWIxkUPVmZVwCpixSk3kE4+d+QcudkPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICnSnRk+1v0J1UkHMelYKckD1//V2wwVpL8sEAabR0w0AiEA+PhjmsvO1C/w2BP5AHbL6qKZCUtjmxRO27TPxWiIAD0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.978.tgz_1496430315657_0.6233166689053178"},"directories":{}},"1.1.980-beta":{"name":"meetup-web-components","version":"1.1.980-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"20.0.3","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"20.0.4","meetup-web-mocks":"1.0.187","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"420f3f6304196e679c6ad2b50f4acd6d147f4511","_id":"meetup-web-components@1.1.980-beta","_shasum":"5f92b71a67980184da5491c825bf841ebec2b891","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5f92b71a67980184da5491c825bf841ebec2b891","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.980-beta.tgz","integrity":"sha512-T0UOlswNDWeaUrKs/6ICSyf9IYKHZKE9ov863nfznGVii4RvTdUSVJGCBZ0A1ar2gtOWyh1G7+K+H/ncOrOdbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxQp3Ieb2ILN1gE6ngUgZDuyrfqaq2xXCIYXSb8iY0hAIgJ1vpE5lmxHTij5KFvpKS2oCxaXmsWZIJR+qXLfq7DWs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.980-beta.tgz_1496669697714_0.6934027820825577"},"directories":{}},"1.1.981-beta":{"name":"meetup-web-components","version":"1.1.981-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"20.0.3","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"20.0.4","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"b53930b234e383cdb5520b1f5b0f6b1f93494869","_id":"meetup-web-components@1.1.981-beta","_shasum":"bc8a62a1f2b3629298b7fda8e960502d368474a3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bc8a62a1f2b3629298b7fda8e960502d368474a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.981-beta.tgz","integrity":"sha512-Dv3IonmXstNwNyb11xAPL3+Ofh0pRCXcD7Q1CzNtx4oHsAt/wM4h6dF/BceRQTf2aeIkGoa7MUhORwHJWszRpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHl79dMMNwCqgeSmnEsZdIF5JK+J7IsbS3C1psZliQWwAiEAoeYx147sD76iUL4XUPy6dPB9+MjEa+eNDOaSSWAhMLc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.981-beta.tgz_1496669864466_0.5195824494585395"},"directories":{}},"1.1.983-beta":{"name":"meetup-web-components","version":"1.1.983-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"6648593771f75d9e12bcb309048c5b130dc83cce","_id":"meetup-web-components@1.1.983-beta","_shasum":"3602e98ccf3ed7ad99cff514f2e58f5ed0b34561","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3602e98ccf3ed7ad99cff514f2e58f5ed0b34561","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.983-beta.tgz","integrity":"sha512-/hGQ9VcmzdwmPOc1+eeeD2u5mrfWV9G3Yko68Hk9BFMtRli9m8KjXpnvUO51VN/Mxm5eaoWP9wAdPp6kEC/akQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRgwTO5jiWEx7lPaQRhHGbn3wkNRvQT6XVB0rlzUyy1QIhAJGrOZXSuEEKg7h67rJTxIAYF6FvVHfi9ZWEnZpkT1XT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.983-beta.tgz_1496670655025_0.6503275721333921"},"directories":{}},"1.1.984":{"name":"meetup-web-components","version":"1.1.984","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"9f5cb6814973259419125f1a04ca3fc48c64e135","_id":"meetup-web-components@1.1.984","_shasum":"d8279bd35648be7d61611580ea85b116af72137d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d8279bd35648be7d61611580ea85b116af72137d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.984.tgz","integrity":"sha512-CA9fG98M7usy7D1VzX1e+g4/WeK+Ww2yGCx/GFk4Z+bOjYQH4ayCJG/XZhY6PoH5aVdxRdD4oV4f+vq+XnpGUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjDu/va2z+ShjqCSmnUgzZCD2OYOagYL1qdUltXzX7igIhAN8OOYKBFXA8z4Y8MC2+E7wXTuKi7/cODRX3TNjvI2j1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.984.tgz_1496670970213_0.576890405267477"},"directories":{}},"1.1.985":{"name":"meetup-web-components","version":"1.1.985","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.1.48"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"fe79073568ee1b65ec0834e77af0afe1871cf022","_id":"meetup-web-components@1.1.985","_shasum":"25f0eb758d6665b81e89c6bff3992119459dc2d3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"25f0eb758d6665b81e89c6bff3992119459dc2d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.985.tgz","integrity":"sha512-+IrM7EK5vxV9z9LzdCtir9qKAPBPR7o9mW1BLDR6wAPcf8+510XNKQ0lRLB2zYX/IfoO5tSTmxpWyHOH5bzqMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUEgTW2MJfT5FNUvdTciV1NYdOnozP+jBym6ti0rEO2QIgPepEFpg4l6B1KfEmD87tnPEZqdPKB77KU0jWmjtVC+0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.985.tgz_1496678912040_0.14787531760521233"},"directories":{}},"1.1.986-beta":{"name":"meetup-web-components","version":"1.1.986-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"26f51c1144258eef5d1653197eb1bc4711b5d9fa","_id":"meetup-web-components@1.1.986-beta","_shasum":"50fc75da4c55201e057ff54224f2006e6645515d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"50fc75da4c55201e057ff54224f2006e6645515d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.986-beta.tgz","integrity":"sha512-WzhH8QkQn0Moq4ik5Jxceob0ZvCFNFecCAPxAOdnicTXQZ8FPvdZCPBtjpcifsNVMqh549hpfnHCebup6GUhDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4RySWABLGnNlo0tQokaUn6kKVEU5beCjaguoGMSsuwAiBKaPitSg4jYcKpuuDwKq1dey0UqFCaQPwOONsQtTg59Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.986-beta.tgz_1496680603627_0.3379672644659877"},"directories":{}},"1.1.987":{"name":"meetup-web-components","version":"1.1.987","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"c8feab544a4fbe98dd2a8d0bacb2fb97962db628","_id":"meetup-web-components@1.1.987","_shasum":"9b9266b624636fae35068e0861e34b3bc69616ec","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9b9266b624636fae35068e0861e34b3bc69616ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.987.tgz","integrity":"sha512-LbgwUrZ+FJQlpavSiAaItu4zbGxWipi46lXYOSkiIM9vLoxsbsb58lSNYtay6WSjcSfdurSWipzhHY81GbSBNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBPjR+xL4IGupmS/VA0XaOagQE6XAbdX0BPDPiuQ4o62AiEAwYi5azTdehgjh2Mapnf+Q5M5/OAaMSr/EJYSFAq6r7s="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.987.tgz_1496680745490_0.49604601971805096"},"directories":{}},"1.1.988-beta":{"name":"meetup-web-components","version":"1.1.988-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"052db4d06cee21feb3dc905cd52b25ce671f65e0","_id":"meetup-web-components@1.1.988-beta","_shasum":"32c81d9fdf7cfade0ccb92ba188e1740df12f29d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"32c81d9fdf7cfade0ccb92ba188e1740df12f29d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.988-beta.tgz","integrity":"sha512-+uYXCBu9gE/QWI9ZTNg08BjKM8L+juIc4587KPf0lC98oJK2J525phSutklBtnPQtphS0oCGDvZVIAwLfiSRhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT0g4wBWNbt1/gxfSOH9yu7/0zJubHhvHl1eh41rDocwIhAKsjPsyHQBahzUyhhR/iJ2BGQRIOVN0r7fNr8Db9ENXF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.988-beta.tgz_1496772997221_0.9798592596780509"},"directories":{}},"1.1.989":{"name":"meetup-web-components","version":"1.1.989","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"a8e89be84f1e8e18afb3ff602f90ab0fff9ffbcf","_id":"meetup-web-components@1.1.989","_shasum":"193d85d9d5d345847bd0543c40241c80c7a6a708","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"193d85d9d5d345847bd0543c40241c80c7a6a708","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.989.tgz","integrity":"sha512-fxe5vwtRsk1hqMGgN2EuO+noioo7xKtO1WCVja6HuqqsU8DIW5SC8QD/a6i/4rQr4T0N6/C4I/16cfFVaeM3Cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE7TRdW2iL1qGtlWilB+uwvp4/T5IAOEWBiXOqbovIzvAiBSI8Tf46ac50Sc7o4tkLb0s8TbZuuJYeugM2MyZS2qGw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.989.tgz_1496774447490_0.06539100781083107"},"directories":{}},"1.1.990-beta":{"name":"meetup-web-components","version":"1.1.990-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"85794c1a49f9898022aea5654a3eb86beb21e3fa","_id":"meetup-web-components@1.1.990-beta","_shasum":"2069ea616cadfdad3789b2bb401dc7e18d6ebab2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2069ea616cadfdad3789b2bb401dc7e18d6ebab2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.990-beta.tgz","integrity":"sha512-eLAPt+7sclrjUpMxUkxm9+/lyWZ2YbFUcqt1prKK1geBM4q4Nq3TXqp1mvPE6BcXDnRgDobByBvs/ERa8qMnaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCr35/OqpbRrFx+aFY761Je8AdzfRKT3MFWxCscBT3n4QIgDNNpTGnp65GOMrFjb5LIW2cVH6BBZ09u6fsxC9kKmME="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.990-beta.tgz_1496778992885_0.0576336202211678"},"directories":{}},"1.1.991":{"name":"meetup-web-components","version":"1.1.991","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"bf31e5b70621bea45a32312ae36b18eb95a0d867","_id":"meetup-web-components@1.1.991","_shasum":"aaf8f967b953a9192face80c61877fed6247f611","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"aaf8f967b953a9192face80c61877fed6247f611","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.991.tgz","integrity":"sha512-KeSY74OK53qfRwo4tmuQMj8MPRuk62BQF+VnAZCFL38NDi46i6H9qRnZBKpX3EvfhSFmC3c6TFTeYHaXBISMyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbyHeLW3dxZb8kWW69N5EJ4c3i7RnAQFG1JOVNcrjcygIgX3Tifp2jcfhJJlC2kp48y3FrekRDQQGFE1jdOcqs9es="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.991.tgz_1496779108367_0.6504226312972605"},"directories":{}},"1.1.992-beta":{"name":"meetup-web-components","version":"1.1.992-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"86c2d5eb192883da925a34c61dbbc656f1d3375a","_id":"meetup-web-components@1.1.992-beta","_shasum":"afd40be97bb81cc6d2d9c24ad6b3e1a556635f29","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"afd40be97bb81cc6d2d9c24ad6b3e1a556635f29","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.992-beta.tgz","integrity":"sha512-dzcYdzYj+LBJNXxoY4Pg7FhAMi/VTdehwWf6pBE5/Eh/OL106/+eZ4LQNZUj4iUrz33RjQlEoICaWcLyYndbYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRor310QXNKBHlu5b0x6EJtLGUFBpqQnOTXMLQB1XMVgIhAP7D5wMcunxnjWssMYJ2qWqKl774/CXmd+ubAP5R0J55"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.992-beta.tgz_1496862832623_0.40339309885166585"},"directories":{}},"1.1.993-beta":{"name":"meetup-web-components","version":"1.1.993-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"37b7ca02ea681216f134fb3ddb373556d50bb1cc","_id":"meetup-web-components@1.1.993-beta","_shasum":"22628adfd4d0e8b2e62205ef30a9e04f1ae31906","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"22628adfd4d0e8b2e62205ef30a9e04f1ae31906","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.993-beta.tgz","integrity":"sha512-Ncjjd1mG5u+il8AyuXaZABEjAVMVTUtC7oteT8JaZe9YVKre1KfH9PAkdDV0Q9gQ6uWgPNASI7wkUSHfQ7oMyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCwAlV2Fu1dUTO8YAFNvmdM/7TEar3VX9NMo1bFJP9zpQIfGkRzWb96OqFxa6hY5kjyYcHVdRAQAPgFyGjs650ncg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.993-beta.tgz_1496862916728_0.8073466953355819"},"directories":{}},"1.1.994-beta":{"name":"meetup-web-components","version":"1.1.994-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"8ad8a4c1fef7854084bd3b8eb35384a9ab1842fa","_id":"meetup-web-components@1.1.994-beta","_shasum":"5ec5af91f0f6c2800a1a65130036dcf49b9f42be","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5ec5af91f0f6c2800a1a65130036dcf49b9f42be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.994-beta.tgz","integrity":"sha512-q8G56r7tmZwp50G9Bz4hoU6QdI67poNC3c9evYOjGWpGmac3Ejq6EQuo0eqzi7OPhewOea5veWru4C94pf2fwQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXxSlYJZxa1R6GGaFoaXq6ST+Vj/h6UV+/V0VVUAMtYgIhALtmOkI/AkPHC+rlr3d9yawwJX1pY6LcQP9ji0SIq3ag"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.994-beta.tgz_1496868602501_0.042905789567157626"},"directories":{}},"1.1.995":{"name":"meetup-web-components","version":"1.1.995","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"8b4c5f187b8eace84e716500f069198d5250d30c","_id":"meetup-web-components@1.1.995","_shasum":"7da3055a6b8cf161861ddfdd35944b66d87c0491","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7da3055a6b8cf161861ddfdd35944b66d87c0491","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.995.tgz","integrity":"sha512-EiQfT5sEIO1wpCKqje0lBaMJRGjuYIrlGb15PbjdfgskdqfRMmuog4SWir16HihIsJYpD7swwLIvObUfnkiGRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFdhYyIfK4Djadm4DxMW8wQTkmxCwFHOMDSbd/7Z9gUWAiAaKGT/8Iec3mlFNsIDnTr8HPBcRf8ZugjX6DwVIh9avQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.995.tgz_1496868952169_0.7647202834486961"},"directories":{}},"1.1.996-beta":{"name":"meetup-web-components","version":"1.1.996-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"^1.1.56"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.1.56"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"cb799b20ff871a9c924e4ac0f8f12dd939eb01dc","_id":"meetup-web-components@1.1.996-beta","_shasum":"8810cfe3357c6c0ce3830dd5a7638692d3c9d75b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8810cfe3357c6c0ce3830dd5a7638692d3c9d75b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.996-beta.tgz","integrity":"sha512-woW8T1lrpEsHx4NF4Ty5Nj0bWuKNeI1pR92LgmdzqiRnZKe55heHL1VVkcjkEWpQXvY7r1DYcu/7fiKXlH9iEA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbPRLZIl+dD/YwzEWB4/SxXTZWifqigT94C8gXBhCzVAIhAJRrUAoQxHUL6aud/X983ImH28tJiHNYXIqqdoKHYzZi"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.996-beta.tgz_1496871609441_0.19646489527076483"},"directories":{}},"1.1.998-beta":{"name":"meetup-web-components","version":"1.1.998-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"8ed665c2498b9686f7f3b873ff6f34375cb2549c","_id":"meetup-web-components@1.1.998-beta","_shasum":"366c2ac8c8526a376cd536091c3289db4e8d94fa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"366c2ac8c8526a376cd536091c3289db4e8d94fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.998-beta.tgz","integrity":"sha512-dk22MqeenmadZRKMDKJYce+puXOlF9Kfrq2634BXXp9tu5hz6jKHqn7s3JHrDsPJS4bjhqAyn3hS8ndaG1bqbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvW9SG3AJM6xuEIK06D7KvC0huiKbhvxwDlLPIR5nckwIhAPkC1zu6UCZ8+a9M4NciK3e85qjHukOZ4TEu/qAz5Mff"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.998-beta.tgz_1496945768667_0.1233414753805846"},"directories":{}},"1.1.999":{"name":"meetup-web-components","version":"1.1.999","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"b2ec28f72e23681fed465c67d6eef51ff8b5a27c","_id":"meetup-web-components@1.1.999","_shasum":"b2c9a73d258598f78b9c36d89eecf547bed61624","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b2c9a73d258598f78b9c36d89eecf547bed61624","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.999.tgz","integrity":"sha512-VYG18beIaK15mEMqKMAyKQi5SDW92xIe8lwna+q6Ouz+eV/OlyQO6beRPKk9fSsPAl+b1CItj9Z1D0BpSzHcnA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGnWYG85P0rLCAN+6TPjru0RzAkuCr8kDP31+5aye/1AAiAYdEBHPzmloMJ+Z4vEDv/JzE54cNsLT4YfA4Ro+BxKZA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.999.tgz_1496947922014_0.32367125945165753"},"directories":{}},"1.1.1000-beta":{"name":"meetup-web-components","version":"1.1.1000-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"2348abe6c74441baddae65bab02603473ad3fe47","_id":"meetup-web-components@1.1.1000-beta","_shasum":"b4f73fa452696c44d5ee67ccd26cc73fe1f5911f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b4f73fa452696c44d5ee67ccd26cc73fe1f5911f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1000-beta.tgz","integrity":"sha512-x/v74gg7jyJY2i6pM7G0ce2RMUEZsto/RnbjUm04Rifwva+lVluXPTQMjHbHRjSzzj0UPiTEYHU/z48XtCgnxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6CaSP518UrAb7uIl1+GV23ipkIM1wTFqDwnyH2InwYAiBKB8SwGbUpSYGUv6k00FJh2REjeZbMTa3IKnvZHgz9yQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1000-beta.tgz_1496951076234_0.5848788102157414"},"directories":{}},"1.1.1001-beta":{"name":"meetup-web-components","version":"1.1.1001-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"6fcf7439c18f1eaf0e505a4bdba5fc37b366e71d","_id":"meetup-web-components@1.1.1001-beta","_shasum":"cab97a1588ac23b804ab3fbfd54eba3c83917103","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cab97a1588ac23b804ab3fbfd54eba3c83917103","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1001-beta.tgz","integrity":"sha512-+8GLNnPTthoe5llR+296PUwxzuwnnAFJcXrLKJdLW4zdqKiZgMX1zcSF5nbcB2TbtgAs1zwA2SyoAVbx4u9Qow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt+lEfoBLaEGSUPdua4BSHDao7ORC78t6S27k7ammpDgIgQ8WgFAqJRVHO57ii5zSsLArjJLHS3lqg/e8uO7bDPTo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1001-beta.tgz_1496951330960_0.3538066332694143"},"directories":{}},"1.1.1002-beta":{"name":"meetup-web-components","version":"1.1.1002-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"2dd55c86558773cdc7ee7d25a3553987c1230f18","_id":"meetup-web-components@1.1.1002-beta","_shasum":"212fe30278a7a74acdc3b6495321a8ea8ff2f1e0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"212fe30278a7a74acdc3b6495321a8ea8ff2f1e0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1002-beta.tgz","integrity":"sha512-DfAmkvkE7Uqglz1cz4MC4AiYOY4UOdEFd2vqxTpXa7Ar4IAYnADcRtcF2CSWVTaQuDNKPcOfscC08i5XJuso5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbiFfZWDLzzRKsBJcydARlh9Hryzdt5auhPnQUpANoowIgKEB2IFAayhMZwDYgzseXl+HrKQNiKmRUsJ8KgYffiIs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1002-beta.tgz_1496961394952_0.9996205708011985"},"directories":{}},"1.1.1003-beta":{"name":"meetup-web-components","version":"1.1.1003-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"846348a11613c233020a95aa3955df5112578afb","_id":"meetup-web-components@1.1.1003-beta","_shasum":"35ec2765266c28220aff69b27caf01e3a4b7b16f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"35ec2765266c28220aff69b27caf01e3a4b7b16f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1003-beta.tgz","integrity":"sha512-k9QhRzBQZjffpMKtaDKRmKTTpwoplShXTWvL7GnVR8YDdnDZKTy0hIPnUzklDsARybRJGLjQUbWUCANcOKHItw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBR7bOSiG2QjEnfOMVjeQUpnGf68+MmgzF/vYxTtkr7ZAiEA2b68drPG2I0bnDBA3KorvRi1uWXvEEALs0lTbBquqc0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1003-beta.tgz_1496962366848_0.7213547648862004"},"directories":{}},"1.1.1004-beta":{"name":"meetup-web-components","version":"1.1.1004-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"3aaa57820f135044df805342cceb6002ccfae418","_id":"meetup-web-components@1.1.1004-beta","_shasum":"d6d47cecd23d8ebdd0d97594a8fcf99079bb3d93","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d6d47cecd23d8ebdd0d97594a8fcf99079bb3d93","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1004-beta.tgz","integrity":"sha512-ltU4Facwl/n0a5Fz7axLjghwyuyTmqDDhRk8zZ5+FawHZodPrnX9As9oBvWujU7DVf1mE5HNGTlZLUqqp9sD3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2NRNMEQjpcM6IRInbjCASjGb2kvj6Sd5V90nPVaZCOQIhAOPegWHUhl5VaO9wUOQHC1z4TfF7Twj+yRvMhSUAfr4I"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1004-beta.tgz_1496963056253_0.5994008395355195"},"directories":{}},"1.1.1005-beta":{"name":"meetup-web-components","version":"1.1.1005-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"959adc33c24144c1687e048c38350153c55a36e5","_id":"meetup-web-components@1.1.1005-beta","_shasum":"fc1e044e14b720365c6ff1507628ea484fdf7ba0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fc1e044e14b720365c6ff1507628ea484fdf7ba0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1005-beta.tgz","integrity":"sha512-ZELr4J+bfSIz/UnpkIhPdbOiJbAnJVY0bdNvljdtkllHnwvPPvfG7TrbaRjOUUd4EQKoo52ypoYW7zQ4IFsjSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDr1l7hyhKG7B3na9vsw+aMBEZfAtttf0viDM/jH5kfPgIhAI59dCt0zfc7h4F9Bj/4hVTUwnX/VJc1IXzjEmVUd1PO"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1005-beta.tgz_1496963298821_0.010698627447709441"},"directories":{}},"1.1.1006-beta":{"name":"meetup-web-components","version":"1.1.1006-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"5e4b80514e01fc9a068394d4857e7f4e5b5b1db5","_id":"meetup-web-components@1.1.1006-beta","_shasum":"a77d1404413c536f060ad115f8d586c58fa6d235","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a77d1404413c536f060ad115f8d586c58fa6d235","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1006-beta.tgz","integrity":"sha512-e9p/S+xZPLyF/ABVATT4QuE3h/j2jft1QIS70ucGkPkdda0vy1rGjGDjtoJH9rqvjGjF3zaTGFniv6owj5rFFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAEwNgHHAOwIRnefyL+HLAWWSkeQ4b02nxlxnxi2FIYHAiEAqxTx3b55G08ppoSUV3iYn3ANwvwVPsTv+v1Imo2EHFc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1006-beta.tgz_1497026720134_0.14683191454969347"},"directories":{}},"1.1.1007":{"name":"meetup-web-components","version":"1.1.1007","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10","swarm-icons":"1.2.76"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"780e40fe98dfdf08434b246e54cff2e86f04bdb9","_id":"meetup-web-components@1.1.1007","_shasum":"894635f85a65077e1717eeb32c32b5f33b438ea9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"894635f85a65077e1717eeb32c32b5f33b438ea9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1007.tgz","integrity":"sha512-iWpj0lOfv+pYRtWH9zyGithX492tSSqTrYj5es9y8Y+4cj6T8LRy7fm4FItFKJzsJL1I0t21cMUazDtuDVkB7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIELCKrkxDRS5FwWdVoIWF1Rk0fUdbzpsweROgoZLHk6aAiA04Ohm6O4usWEPz/+DtEkDgHq5rpYL+Zf/VmA3pqUQYA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1007.tgz_1497026860474_0.9632147122174501"},"directories":{}},"1.1.1008":{"name":"meetup-web-components","version":"1.1.1008","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"a832235d7e226d0419079de8c62f96a66dcd69e8","_id":"meetup-web-components@1.1.1008","_shasum":"996dd98a6499b6a8e4b5e5f9d56f9c541935d509","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"996dd98a6499b6a8e4b5e5f9d56f9c541935d509","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1008.tgz","integrity":"sha512-f0HVEGMHCV+8HwvnO070O45R9/gIb/z5C4byF8+F6rTLg4ALnlfn1g8AbLnMsFjyCdIZPsxZrrpHCdQn12eJXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDA8jW6zEsPmKXToUiPfYZWrqGAZV1AM8teLxJqoJjt4QIgQ6M5Y83RNO0mPZkdk8+9Mp3fwIr/751RIl0DvrbZXiw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1008.tgz_1497280798360_0.7201693211682141"},"directories":{}},"1.1.1009-beta":{"name":"meetup-web-components","version":"1.1.1009-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"3df53285f3071fe3f2c9ded3c21db6db836da142","_id":"meetup-web-components@1.1.1009-beta","_shasum":"81a2b438a9f93971d51451aa2f8bbb3cfe2babd2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"81a2b438a9f93971d51451aa2f8bbb3cfe2babd2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1009-beta.tgz","integrity":"sha512-g4h/DEqaGOV/mqraJ07yCSgMpby/YFIVy40rS1XVCyMssttPogzB5xpV+jfEjxJAHIwEWkxfyvdSTFbW0s7H6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJYY+b7JAY1mCNliWZlmuxEW2Cryl329J5yrIXnQW3iwIgRRi0VD//1g/GkbPO5wD9a1hZ8nN6M2V0prInzUiGbsg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1009-beta.tgz_1497281504696_0.4106079733464867"},"directories":{}},"1.1.1010-beta":{"name":"meetup-web-components","version":"1.1.1010-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"7a6951855767375876dbf37e53dd1b025b7f98b1","_id":"meetup-web-components@1.1.1010-beta","_shasum":"fdce0efb9bfa0434ba63d96346a5a9809bd96b77","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fdce0efb9bfa0434ba63d96346a5a9809bd96b77","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1010-beta.tgz","integrity":"sha512-MAyCHiTiat16K0pDbZCn6Vd7Uycr7cqFTJ2ls0LLWFpf4My56ZBhwF2crAAOrmuR7E8/qK16eyK36d14Jlajjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+4tqF5EosLDi8FgOgCWrRjbKRIzC2lJ8Ht5Paos+dwAiBAc4MRFRf/Wc8J3tjyAqN+SVSqoMcJQAY45bFlhnn2nQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1010-beta.tgz_1497284454490_0.9327793347183615"},"directories":{}},"1.1.1011-beta":{"name":"meetup-web-components","version":"1.1.1011-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"0d5325a02e13ab7f891b7a908d61bce0e72241af","_id":"meetup-web-components@1.1.1011-beta","_shasum":"2d3185ca1420c537d771f8906bd0cf1c4dee0e8e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2d3185ca1420c537d771f8906bd0cf1c4dee0e8e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1011-beta.tgz","integrity":"sha512-hh4aD7SazrU4KnPWhha6cB9rQAAoICUgB/M0vuivCYurSkBMZbHIovCzDaFoO4jE9MkXjmhaRv5bSIWkmtqigQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQ9dvLyR5NYcMFsB/I1/MZxkJmEuoRaRCBvKKb779xlAiEAyCil65nK/3KOr+smPWtErCAibp0najxocYpY1KYEyuY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1011-beta.tgz_1497284702669_0.7616236740723252"},"directories":{}},"1.1.1012":{"name":"meetup-web-components","version":"1.1.1012","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"254ed3710848884ddd880d13902f4a07fd5c5586","_id":"meetup-web-components@1.1.1012","_shasum":"e6f7c9c9bc8ea560c67d7af8ad04fc15ebb3ba26","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e6f7c9c9bc8ea560c67d7af8ad04fc15ebb3ba26","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1012.tgz","integrity":"sha512-H/fcTJyN+8FMWvoOoOLNFUJXS4XvYOVngZoRbDEY1qQX74DIqEJ1kslp4LhvmBfpOdGPq6GKCTyrTmj1Tr0Xdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDcZhUrT5YhXrnwjrmcOOD57V23JJhZV8IGqWPKJUdteAiEA8kf/Is/oHA6Sz5Fo7cJhokA5SzCqJljxcDAE7pXKKgw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1012.tgz_1497295159855_0.8861896577291191"},"directories":{}},"1.1.1013-beta":{"name":"meetup-web-components","version":"1.1.1013-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"d9c9b2e5dfe68f14b59b43385bb97545dbb0427c","_id":"meetup-web-components@1.1.1013-beta","_shasum":"2e5a16caed507c1421d14c48de982fd7f9534256","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2e5a16caed507c1421d14c48de982fd7f9534256","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1013-beta.tgz","integrity":"sha512-3HXx7lUQzi36owZbjNBdKFowHgcZM+bNMO6yAeGvH7WCOo3LyzvLuNckZ0hlQ+ipK3AUTdT4Uuc8gtFhC1YpAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEwrY1K7zxHzDvZ/l4WKJUN4M7drgVckf9VVkOAj37cgIgV2jJ+dN/roo6AncVk7bnqqiScZKy8reGTsmkkBL90uI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1013-beta.tgz_1497304286624_0.1831620391458273"},"directories":{}},"1.1.1014-beta":{"name":"meetup-web-components","version":"1.1.1014-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"cdfea6154b0bbdd622c5bb2b61b5115d8d14829b","_id":"meetup-web-components@1.1.1014-beta","_shasum":"4b2f8e98ca5342e58474663142110f3c08ffb204","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4b2f8e98ca5342e58474663142110f3c08ffb204","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1014-beta.tgz","integrity":"sha512-Taaqb81Uf2Nj4kgA12vSuw3n+48MfbWFCt+ght0rM/lmlgjVvwlhl5d4buKAftr5WFllA2YRGrcUhiOpd8ENUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4RZ+u4nhBnYkVFM3l59U8pQ+YnxVJK5yf9XTNQqYU6QIgb3HXeysso62h70ZY5kU7EI2VK3SbznyehYGZdhpyhhY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1014-beta.tgz_1497383686522_0.7281454568728805"},"directories":{}},"1.1.1015":{"name":"meetup-web-components","version":"1.1.1015","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"27d51a8da81ac0ee38fa3a07dd00a2884345cd00","_id":"meetup-web-components@1.1.1015","_shasum":"1d7d7943c9f4c3c346c3bac73d68cdb004fdef62","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1d7d7943c9f4c3c346c3bac73d68cdb004fdef62","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1015.tgz","integrity":"sha512-oFTcYIg9qWJFwjS4NDIoWx7+OJHU6Jm5B6cowcWAqWEkwAWfJzZ0GLH7VQopxxOuTMs1FgN79OpmUTnW4g1M5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3RRZcTR93XdNc9RSUU2e3bgFq/bRAumcpIhOCxIraAAiAZfc2+FjLAQV2WyINrkI1xuVYIuuHWek+mruck1hfLfg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1015.tgz_1497447794686_0.9996198371518403"},"directories":{}},"1.1.1016":{"name":"meetup-web-components","version":"1.1.1016","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"cec0ad0c01b186a619f7d9e1630738f88be88179","_id":"meetup-web-components@1.1.1016","_shasum":"7bdebfce59b3f27a3ddab7ceb5b4a549d88030b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7bdebfce59b3f27a3ddab7ceb5b4a549d88030b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1016.tgz","integrity":"sha512-NVp71dnqtKI8GDe8/VsyVFWxvSs8C9QuBXATfWVZaMsMoNGKRNsKjFbshje35czASxoStKnd33GIkJiPeCec7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGnG5MR9AEzPVO6mpljJHLIbZ2xUE9fUQNLIM9ONpwvBAiEA/5grdCsdXu5V1fA0e0HNB96kixRkhU60mL57M6B78p4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1016.tgz_1497455219530_0.27428662311285734"},"directories":{}},"1.1.1017-beta":{"name":"meetup-web-components","version":"1.1.1017-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"919fd3145b7bf6b7fe6389750c616aa359d550ac","_id":"meetup-web-components@1.1.1017-beta","_shasum":"17fb02c03b2014fbf5d69430a863d3f91d2d9e23","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"17fb02c03b2014fbf5d69430a863d3f91d2d9e23","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1017-beta.tgz","integrity":"sha512-sovmiK0LwC1dONMMSYZAFqq8luLBlzAL68y7bRC6puPeymdOqN4D+ZNwwNwtzQv59/BvsFjJGS8SlO/71+dfWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN43MlPHo/4CAWssaUj7Ib/MyrEXRs8CF6aW9FehJ0dwIhAPociQm2Kwpyy9E558jB6qmCN/C4zSBj1vqxlDFCQPqi"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1017-beta.tgz_1497544142629_0.795351350447163"},"directories":{}},"1.1.1018-beta":{"name":"meetup-web-components","version":"1.1.1018-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.76"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"e0a2784d33c8e4c39ae8540564db69c44350bc56","_id":"meetup-web-components@1.1.1018-beta","_shasum":"e1bee7ad1ced463e7a053531a9f0044ed29c034e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e1bee7ad1ced463e7a053531a9f0044ed29c034e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1018-beta.tgz","integrity":"sha512-YuLSGxyQWdLmmHuKcr7FRDhWYbfQ9w4GKTLtXuU43C6ITLyOd7DV2ftqP2TZ1VhHRSAUEPfk1gbSXtKSIGaWJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7Dc+PdUGllW2Y3Z0k91b/Rcslh4rWiIwxODjEhae78AiAfemldt1qgp05/dYQNH6B37/O6TZhnYPlye3lenWUqpg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1018-beta.tgz_1497560477535_0.7066352753899992"},"directories":{}},"1.1.1019-beta":{"name":"meetup-web-components","version":"1.1.1019-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"c089b31f7c31a45ae84c5460fdf7d89495c04430","_id":"meetup-web-components@1.1.1019-beta","_shasum":"0995aa9bdc9cddedfbe217bdf3d38e72568a10b4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0995aa9bdc9cddedfbe217bdf3d38e72568a10b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1019-beta.tgz","integrity":"sha512-eAwf2oQFwORGwhgs3y+MnPvjOArMKjQCPBsx59wWn5BNPveDTCg5xlGYfEzVKi4NFhXnXN93F82bGwLcuu8shQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICPo2bkVL3W6i//BAwk6qR7C0FdDUb8XZ6WJeV5fNy8LAiEAtwTXeNOtOjovPC2uCb+Zx7G1rPrdeF7B6vES9+svGbg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1019-beta.tgz_1497653089894_0.8360471106134355"},"directories":{}},"1.1.1020":{"name":"meetup-web-components","version":"1.1.1020","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"823f939b0ea282b2c6ee3ca5f3e431a080c3a12a","_id":"meetup-web-components@1.1.1020","_shasum":"2df10c93aed214e01b012e6fac8a274d790aba20","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2df10c93aed214e01b012e6fac8a274d790aba20","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1020.tgz","integrity":"sha512-PLyg3XjymBX9Le8MMdW1S8ZhhsEsGc+RoyaMnZFpCnA77uFOI1eANRx/wr3/uoXAe+JGvUiaptcKC69E60MfhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6Ta6kfri72MpGhvXUU5XnaFpdRL4sISFegMMDzSpqtAiEAhZ704aNnlt7BYELcSHvK32kPyG4gJGlvXyIzdVYRaBA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1020.tgz_1497653479348_0.06696388963609934"},"directories":{}},"1.1.1021-beta":{"name":"meetup-web-components","version":"1.1.1021-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"114e7bb705a2e3dbd36041b9ef7905db40fd6272","_id":"meetup-web-components@1.1.1021-beta","_shasum":"f81f799123a769c50518937bee6cd01b2144d074","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f81f799123a769c50518937bee6cd01b2144d074","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1021-beta.tgz","integrity":"sha512-2ZRsch8L6JtNCv292vZSUOPjuIbrf/bmXZAo6KPu8EqsskjYy8ls5DI24RMpzY2hXrmJKcXsrBOnnMB/nQ3FQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy3di8woOwDFpW0kHVZT/b+pD/SCC6WebEgPmSLhMPbgIhALaR9jsYcbm6KJ96YKHxfWvSrUxtu2he0B+qbAD+rbUM"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1021-beta.tgz_1497896680006_0.8893480077385902"},"directories":{}},"1.1.1022-beta":{"name":"meetup-web-components","version":"1.1.1022-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"6aea8a30f53c8e3096d9b9599fdf4133c515b576","_id":"meetup-web-components@1.1.1022-beta","_shasum":"cd9ee9004ef5dc96c6390620af9328e98a8890fd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cd9ee9004ef5dc96c6390620af9328e98a8890fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1022-beta.tgz","integrity":"sha512-YUHzoma4anP0aQJdlbfzC/h45KJgi5f66vzfJilLpPZ9CMRFoWV9ntAj2EelstxgkfdudgP7oCR043E/c7zY1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHriDjzJ8k2YyQSV7edjxTYgN3lkgy2oLXlcF0fTnkOKAiABx7U42jr2FTEEsu1dWUWRueHEYweakJhIpnTMB9tb6Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1022-beta.tgz_1497900466651_0.5798059497028589"},"directories":{}},"1.1.1023-beta":{"name":"meetup-web-components","version":"1.1.1023-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"e12c573259c7580a4705fa199e662f1c1d97bc65","_id":"meetup-web-components@1.1.1023-beta","_shasum":"196699c565e3f0399c9fde972bdd94a0eea5d8bb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"196699c565e3f0399c9fde972bdd94a0eea5d8bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1023-beta.tgz","integrity":"sha512-pYnyvoSKZ6FtOgjvsQ5J6694M6jX4pd0abK2Y0WsQVns4W1Nfw8ar9lIz4wTgMU0j8nF/AoqqCqYIlFX839yBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwlPis4VI/44C9bzZFYWy0sjG7hRGCHlkHXeuKgmg3HQIhAKWEL9ln7MHHLWcPoPBZBx2FSAVpsDsOtIeIg1+/UW61"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1023-beta.tgz_1497902483602_0.5823747522663325"},"directories":{}},"1.1.1024":{"name":"meetup-web-components","version":"1.1.1024","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"d4f80b29c93f1fe5bdf917fca7777a8e6c3f5257","_id":"meetup-web-components@1.1.1024","_shasum":"cdd3bd2fe5ead01e8c3e8ff22902a95d1a8fec2e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cdd3bd2fe5ead01e8c3e8ff22902a95d1a8fec2e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1024.tgz","integrity":"sha512-iI6GgIqnZp21CD4HrB5mi5Z4sLes7sbXgPyzRETzPRMS3j4Q2QmHU/lLjJ5VUGCaDyij8kYA4N1XMr9gZoyYyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9X7Yrp2K1nYNrt50lq3hHqzlFR+PK7bXWQAD65KPRJAiEAtVBYO9SKUPsWskp0kkxcdj2t20ybbo/ePefilVWkb3Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1024.tgz_1497973073533_0.04749262426048517"},"directories":{}},"1.1.1025":{"name":"meetup-web-components","version":"1.1.1025","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"fd4f6e9b278cea4efca4a7be164b08c84a4ec639","_id":"meetup-web-components@1.1.1025","_shasum":"0706ccc8700f81d277d2bf74cf92c24b88b80d97","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0706ccc8700f81d277d2bf74cf92c24b88b80d97","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1025.tgz","integrity":"sha512-4HovJ8nzC3kQJ78ZiZSNw5fChbzmfP5e+TdwPCHWiBIUlsN8LxCgQSOjaldbWVyngHg0OP0aVmMCMNgfc1zH5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICdNdtauzU4Fy/sgJD05pQO3Ts77mKK1wtYd6dfc3A/uAiEAi+RjEv19RYjBsv6dC06OpgzopGY9efhwrnMNombeA7g="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1025.tgz_1498079027695_0.6638840506784618"},"directories":{}},"1.1.1026-beta":{"name":"meetup-web-components","version":"1.1.1026-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"63dd74b00a8aa20bd13632a477e03d4d16b391c7","_id":"meetup-web-components@1.1.1026-beta","_shasum":"bb0d694cadf6ee017088bf411c898ef3bec5072a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bb0d694cadf6ee017088bf411c898ef3bec5072a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1026-beta.tgz","integrity":"sha512-CRMbVZq75/weak3PfRiyWmxFby846Gif7qLYbFMIV89lgkCcXTyqBjNI8Tt2hbJgTob+rijapOzRcvtO/wPc9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPhtcYtvvP2XtegsJNxkpIRH8piUf16wZSwZMZOWydiAiBDIc1mZemAo+NnWWGURxS+lv4NAMJAWOHk7eMvYaIy9w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1026-beta.tgz_1498079136898_0.7215556856244802"},"directories":{}},"1.1.1027-beta":{"name":"meetup-web-components","version":"1.1.1027-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"87807f737b4b4fed2f2ae72275147e837891838e","_id":"meetup-web-components@1.1.1027-beta","_shasum":"be503999e45916932896b5827be5335c35082a76","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"be503999e45916932896b5827be5335c35082a76","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1027-beta.tgz","integrity":"sha512-QzQpaFkwCs13hQ67LvOeb1yaN/Um7BSG+ekTqRa3bpJjopj1uDLPUn9CUX844tPZHqE07jrPRDXKGfgolYy5YA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdn12aRHaUF7X6f3J4zOdfLGqr3nh8D4QcEK1iGK9IjwIgePYvfGsTgIxPfsitz9tQUXOPPFWqQcUS03MQpe+VaJM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1027-beta.tgz_1498169641202_0.1165365104097873"},"directories":{}},"1.1.1029-beta":{"name":"meetup-web-components","version":"1.1.1029-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"65b2bad33e2dd613ac4aae6aefec7b48aef27bec","_id":"meetup-web-components@1.1.1029-beta","_shasum":"cc7e88fff9d2ec8c57bb156318d5cc8a2d24c65b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cc7e88fff9d2ec8c57bb156318d5cc8a2d24c65b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1029-beta.tgz","integrity":"sha512-Sp6SoXhX8BgOTrAK/AD2cnrKRZIR7t739H2pcvatBuM6ZU3m5y6vD2yL6pvjHzhjOcd9F0TvmhDx1uFKdHLPwQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4OdhJ0i+uApr6g4DC/+tJuks0VJ74vSH2Y1X24JRf6AIgGt7iZP0HYd0ZkzulOPE/IIWeRzXcxKpiySYjFwKsxEk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1029-beta.tgz_1498169736742_0.3732008852530271"},"directories":{}},"1.1.1028-beta":{"name":"meetup-web-components","version":"1.1.1028-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"2c1ea5f9be683ed7c6def0d10cf620a574c26549","_id":"meetup-web-components@1.1.1028-beta","_shasum":"10699672456da82a213e7ed70c86719d57df6d77","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"10699672456da82a213e7ed70c86719d57df6d77","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1028-beta.tgz","integrity":"sha512-XwhruLOhv4MxxVgroHjz3O8XUhuj3AJkQewQydb2aUstEyqUpzp9SaqW9prlNjN/Wpfnbws/pwCyEsuiG5TZJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+j7lNt5+pnhpxVhZ/C1UwyPhlzf+wO3ZbreJgV/VeUAIgfXkW9EsQFObdqda6dYPm8vfjysSh8hN0ptq6/QAimiw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1028-beta.tgz_1498169785097_0.08359918929636478"},"directories":{}},"1.1.1030-beta":{"name":"meetup-web-components","version":"1.1.1030-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"2cf7a03b7ead21de81e50fc4ad17a48cc69ac9b4","_id":"meetup-web-components@1.1.1030-beta","_shasum":"67f4fa96d8a6ef17c3acf11b3830a008a3ed815b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"67f4fa96d8a6ef17c3acf11b3830a008a3ed815b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1030-beta.tgz","integrity":"sha512-AbVlswDizdJzCO/5p1AKkVoEo0Et9oUXt4/QLBPoyxGPYOlTFc8/3T1AZf5kEa6/MWP5D9zu9YOBdoIfcxgekw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAmnTAQcbOlSNkgf1thYDgovImBW3Tf4+8vk1vK+drRiAiAjQSY8uJaJ3QLdJzxB1RppfD7HEN07YxLseQpzak5FMQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1030-beta.tgz_1498169924984_0.5139717671554536"},"directories":{}},"1.1.1031-beta":{"name":"meetup-web-components","version":"1.1.1031-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"00a6f19e6134f73622c8bba0857bce7cbddfbbed","_id":"meetup-web-components@1.1.1031-beta","_shasum":"c2e65754806cba796a56ff8168cb6d8aaabf6369","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c2e65754806cba796a56ff8168cb6d8aaabf6369","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1031-beta.tgz","integrity":"sha512-OdvkziOQ05NHtn+9lYBumttD3JJnWTQyb7A+GSxu+silv4ikQg6o9YJnvEJpCUdmdmXLbB58F5HCHD4132R+yQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDK3u+lxNbUYvCtyTY2PtEFj33VuGSGfg/x5pXD5/+2YAIgb6bSjSEfb+VWOAdJWQRy/5EhlwzsuO1b4EYIsvyYOe0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1031-beta.tgz_1498170135746_0.3061194596812129"},"directories":{}},"1.1.1032-beta":{"name":"meetup-web-components","version":"1.1.1032-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest-cli":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"039fd010b8e24ebfa03decc200e1f6e21c3ce287","_id":"meetup-web-components@1.1.1032-beta","_shasum":"57fc441747dd6e29dd28c349fdcd3b369c604e3b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"57fc441747dd6e29dd28c349fdcd3b369c604e3b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1032-beta.tgz","integrity":"sha512-3zr+idSTKUtPk6ObXQRwCcJgNjX85jpapHU2zwIIa68rZTxttgoPhWzXNIj5KbFD+6pU3FRX2DvPpOnlRwYWQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGWHZCxj7/rXPOEXcnw8YuEY7ARDriI3MNNr+cF1na1ZAiEAguesTfb37zFBuldwyV97Ny0WgAXW1/I5DedwrOckUcA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1032-beta.tgz_1498241664741_0.9808688010089099"},"directories":{}},"1.1.1033":{"name":"meetup-web-components","version":"1.1.1033","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"fc013212e1af16045ebc9e230455e2027879e611","_id":"meetup-web-components@1.1.1033","_shasum":"63876be6ef37786b6618e944462ae70cc32175f7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"63876be6ef37786b6618e944462ae70cc32175f7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1033.tgz","integrity":"sha512-UGF+tLtz4nHS+CHxA9+N9k3tkB+LLzM8TxNq29d5HgPnpnhUw+eCdslsrxVaHIi2rxC+QMtwlTWJD+tCbnfIew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkmKk5AXcSTm+qzAEg5KI6I/GX57WP3Ipcm2raoUuLiAIhAO125zFZZRQwUSZ44XeTjHkCNkPK6U3FegrS8NehPNnS"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1033.tgz_1498870980579_0.8858281981665641"},"directories":{}},"1.1.1034":{"name":"meetup-web-components","version":"1.1.1034","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"3be312e8f5c708fdaadc308a5e525bf2597b8ff5","_id":"meetup-web-components@1.1.1034","_shasum":"b643609a9a29fc1c1298aff5aaef02986900da61","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b643609a9a29fc1c1298aff5aaef02986900da61","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1034.tgz","integrity":"sha512-jgjZU13iuNniaJs+/fn7Si5w/9TVYLu19Tm7LHzyqLNg71aqznyfG6aryHBia6mG4IKZSMWIcMJ3x0kAbmuZPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIY/uedL76BATth6D9j9/zGu6NcBOQ+LytCYPTrJoM+gIhAPqfPlJHekm0F7+ajmCCNhSy99C1wec67g15FLbg2jqZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1034.tgz_1498871080823_0.1919726482592523"},"directories":{}},"1.1.1035-beta":{"name":"meetup-web-components","version":"1.1.1035-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"28cd71103e592965b36fb2829bf35710fd825d78","_id":"meetup-web-components@1.1.1035-beta","_shasum":"7d043a59a7a906905974418f801cc15ecf212224","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7d043a59a7a906905974418f801cc15ecf212224","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1035-beta.tgz","integrity":"sha512-MO6N6uf5WVc+qGHDsrjccbteFyOjsHQmLW+cFnX9OasTdXR33IZsogOlNO1Rk+bgU1mts1l1M0v0QOhCxPOGig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3ddyYszfuq9hEknttkgk+V1JRM/S4cOBEmH4LxOafEAiBs0aTI/4zzHKrMOQUKztIUFUfrBEJLNwPcGWSxLTdrCg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1035-beta.tgz_1498871566258_0.4440596781205386"},"directories":{}},"1.1.1036":{"name":"meetup-web-components","version":"1.1.1036","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"8f2d80618a8582ece50c0297372858ebab2b7427","_id":"meetup-web-components@1.1.1036","_shasum":"dba7639da856bf4fb228735c843f3036bcbbbed3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dba7639da856bf4fb228735c843f3036bcbbbed3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1036.tgz","integrity":"sha512-9EKyIIF+5x824oH7Z1l07VaptA8IDNLdvWIt8IWhZGBlJAJ9M4lpfr7lXa23lf7lWnMHZZhcS9ET6jA1shBS/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+9h3Q9vBGH6O/nu1QQzW92QH4h8mjOpcMJpTT+PIbWQIhAMXIjVLrFALzbdeB9UyZCqczMlH8hsKyexjG/b8YWWnR"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1036.tgz_1499298506052_0.9372745617292821"},"directories":{}},"1.1.1037-beta":{"name":"meetup-web-components","version":"1.1.1037-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"80fcf8a98bec80f92592919836faa90da942e1f6","_id":"meetup-web-components@1.1.1037-beta","_shasum":"f464b3c939aac19346a70b80f3c55ce96bfed5e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f464b3c939aac19346a70b80f3c55ce96bfed5e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1037-beta.tgz","integrity":"sha512-gObc6SzyGHafmyDXQGBXzQpnaWgr2uHR8RlAm5WqMqKvg4G8ygycSGLhFpUqYvqN8khEjAj4XEcpShKTDmI9zQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJym5uWuEC51NFgsr8CVJIhZTQA0lDVxa1dmnNOlwBsgIhAKxbAGmyUi1HLQJuI03pz6LVn7wPt9c1fF3jsELO/uZZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1037-beta.tgz_1499351428275_0.5815596668981016"},"directories":{}},"1.1.1038-beta":{"name":"meetup-web-components","version":"1.1.1038-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"e6ac5811bf43fc9ffcdda6df19d60e05b09fd09d","_id":"meetup-web-components@1.1.1038-beta","_shasum":"bd84f0e8552de26384da394b5664d6b0f6a6d218","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bd84f0e8552de26384da394b5664d6b0f6a6d218","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1038-beta.tgz","integrity":"sha512-M3HeEvcySEneEYpoSacaE0anxV05vpmB7nEiTVNBaseCi2zd5MZIrwEx9RtoH38bdqG97/ZzkaKA5sJQCKFukg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdr0IamYA3iRNB/CPOLvxrSUI0zr/jmL52A+ISQ2nUHAiEAgZXNKLxtfxarKxB49uMf8WHaeBp6FzrqFnKSdlM+zFY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1038-beta.tgz_1499355893812_0.8787357250694185"},"directories":{}},"1.1.1039-beta":{"name":"meetup-web-components","version":"1.1.1039-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"a32077b95bfa0971e7718d10e84e01f33c633322","_id":"meetup-web-components@1.1.1039-beta","_shasum":"5b6e9530624b5adc329ef5a1a8ddd61f61d4b4a5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5b6e9530624b5adc329ef5a1a8ddd61f61d4b4a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1039-beta.tgz","integrity":"sha512-SZ4jKb0VnUSE2LVm1VV7u9Fa4jJ/+ydJZHvfrMAl18kLjrrCsi/V+pSAA2mybuM5VhI4h4EdZV1HITVUFHDrjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPRz1knHs8cSxpl/9Ul8Dw3z5K7cTDcNhFOuPqdYPMlgIhAPYfI6xX9OPL9L7fzGpTu3R2tD1/J836TcMcO8KraOAJ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1039-beta.tgz_1499360239530_0.5058871773071587"},"directories":{}},"1.1.1040-beta":{"name":"meetup-web-components","version":"1.1.1040-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"811e63db6fef2463027b19d5917dd08eba66dafd","_id":"meetup-web-components@1.1.1040-beta","_shasum":"2ce124fc1796aa165d1e58637e6b6737feab0bfe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2ce124fc1796aa165d1e58637e6b6737feab0bfe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1040-beta.tgz","integrity":"sha512-G1UKt3dACWm8q+77dSvPqdkAwYYGtjHFT7EHWeqyyM2HWpIpRs2J7VdTL+cHme/xQgMh+2T1tR9c9LNR0GRCeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDBbFBQdRYY4uvrZb71f3EbxvZVqY2gLxS0WIKDBfB+mAiEAzjAHr+3at6RZimsjMB28FOkz+S0UJrgLtkKnuKX0LrQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1040-beta.tgz_1499361388426_0.8903647556435317"},"directories":{}},"1.1.1041-beta":{"name":"meetup-web-components","version":"1.1.1041-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"476d7797a4627e7f3156fabee098dbcdc457495a","_id":"meetup-web-components@1.1.1041-beta","_shasum":"6b988a094b6f33176c2f92dbcf7eecd395c3cae3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6b988a094b6f33176c2f92dbcf7eecd395c3cae3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1041-beta.tgz","integrity":"sha512-85nf/kQKuutxouS3cG6bIVa8i2450mhwoNM85nkgIay0iOKWhsfVGep6XmKicdWamZQYXAUz/xnIIUQ/uc5aWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWxWiJMYFgkxbhNfoAXXi3Ff7x3K1RYBF0KPVXfOR2bwIgYGQOEQ/lXy3jX1vZh3GaBLNYDYc6qAmEQrY62ffR9T4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1041-beta.tgz_1499364970026_0.2322565601207316"},"directories":{}},"1.1.1042-beta":{"name":"meetup-web-components","version":"1.1.1042-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"6e530d0c6743075f95230cbea7f4253bc1638522","_id":"meetup-web-components@1.1.1042-beta","_shasum":"7aaf770e16e6bcb70c1ec7c6ba9794b467fb4cfd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7aaf770e16e6bcb70c1ec7c6ba9794b467fb4cfd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1042-beta.tgz","integrity":"sha512-5E2fq6K/0oP+vGO6o2ZQcK7wzBfJPQM6qidQS0IWRyhOmp4WbvNhFIa7frCZxbFYNIkrR2VmNsvZP6hBeww2pQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8GhNnqXIITVO+slqa0OcHRRX8GlLTZNmPgp4VJIvaOAiAUwUS/iTxXckFBs8GgOs/fSqTTvn1IL/vw7TvCy5KkrA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1042-beta.tgz_1499365557091_0.8278483180329204"},"directories":{}},"1.1.1043":{"name":"meetup-web-components","version":"1.1.1043","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"784931d53a118e535956153f66b7743cbb687bef","_id":"meetup-web-components@1.1.1043","_shasum":"9f22e6d4ea914e550eb88b61de7b2a679ccfdcf3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9f22e6d4ea914e550eb88b61de7b2a679ccfdcf3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1043.tgz","integrity":"sha512-lLfaHTsxpanoWQSRCg20hUgUzUjWU/UGmdk0JtNW5Jn3iRhVbrj2+RuXRjebQXGuJmMr6DpHQl7oEFXZgKPYig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG+02zgJPd8wTvOtSJm633zyy6bbFQTCuNIrSZMJqmhrAiB8APZUcXp4mfAgIjXbX3bjt+3zqDzamm4nS9WRiodxBw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1043.tgz_1499370498812_0.6611830480396748"},"directories":{}},"1.1.1044-beta":{"name":"meetup-web-components","version":"1.1.1044-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"0b25bd64fd62ff7c587728b2cd6835de344b7885","_id":"meetup-web-components@1.1.1044-beta","_shasum":"dd3ce0382ab3b92b3165d4f3d527949df73a62cb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dd3ce0382ab3b92b3165d4f3d527949df73a62cb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1044-beta.tgz","integrity":"sha512-4jhYEuzHWCoZTQ0Mkg9QRiB4r5tEsMOXtPHA01fMOiKz4pCsdHDEPNSza9qcgbAyz631OmOgMkIfL34mJJCiIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZN778fsyrO2tNhzfv1RfwFeLkz0x13aD75bSvuGvPzAiEAm1+N2kpU+a8yZxaVmJBLswWXPkIbiGC8CEQNdT4+kJY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1044-beta.tgz_1499371973770_0.9186291403602809"},"directories":{}},"1.1.1045-beta":{"name":"meetup-web-components","version":"1.1.1045-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"f30383db7b801c6f5637d7753f6bd209e6d44af7","_id":"meetup-web-components@1.1.1045-beta","_shasum":"8536c40f1a130f6666f92bf60b0d50b13d19c78e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8536c40f1a130f6666f92bf60b0d50b13d19c78e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1045-beta.tgz","integrity":"sha512-taqLTpz/oxDEs5BWnNCQSqCuzuC3Jxm8471EBdCUIGJiDpFsgqzcOKQhAlIZ/0nEFhkAIJ4eLWlxI/6jtj9AhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYMtUAUAdPthR7OGaUKo7i9STCyybC46K9JCB0I7OLTgIhANZJbnxxGdgTHdkx6qZmKSzPZSQCY5pFtBm3DKTdPHdU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1045-beta.tgz_1499374221710_0.5824407564941794"},"directories":{}},"1.1.1046-beta":{"name":"meetup-web-components","version":"1.1.1046-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"69ea498b1f0c6ba8593df134329629d17ef07bce","_id":"meetup-web-components@1.1.1046-beta","_shasum":"34acf8a20de49b2bbd6d21d2169cc337e1bc1dd0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"34acf8a20de49b2bbd6d21d2169cc337e1bc1dd0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1046-beta.tgz","integrity":"sha512-93LZVtgMEG3hEDNI6j3uDb47Ayee0WzP6dNYvQgqi8ay+DdIWV7oYNtFxfrG1w63BFmRLeCbNZaGdmFONanVOA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHWrbweYxn5hN0aYznLRlyEPuzmMM308U2oIzpNz/jiQIgdVm91KCVZ8qN9523w4WOMgs7gsviuEryqfdUBv6DspI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1046-beta.tgz_1499377786252_0.3180227014236152"},"directories":{}},"1.1.1047-beta":{"name":"meetup-web-components","version":"1.1.1047-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"9ca427d433b6302a0c0e01c02b20b90fb9c143a0","_id":"meetup-web-components@1.1.1047-beta","_shasum":"b003f22270c973f1d2e887a8d36a8dc9eb39e083","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b003f22270c973f1d2e887a8d36a8dc9eb39e083","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1047-beta.tgz","integrity":"sha512-IrHcmBv7dWdaSfcgxfFqABaUeqwBhue1wg7ZZEXzw9faWjyjg45Cg6CBGjfIIatBee+eWUONpg04Y1/4dlWQJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCINAWc2MEVe2EpvYVn6pTd/Mkq1QjwL5iZABXwdRSjrwIgZoCVeUKYf8x6iID97a9rzR+v3GfoIHXzqxqmS4eMHBY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1047-beta.tgz_1499442299022_0.2358824540860951"},"directories":{}},"1.1.1048":{"name":"meetup-web-components","version":"1.1.1048","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"70d85e7907ded735e8b6e2fb7e2da088e9f1c218","_id":"meetup-web-components@1.1.1048","_shasum":"520c6b2a6b528f1bc4318d53edcb094711a70ab3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"520c6b2a6b528f1bc4318d53edcb094711a70ab3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1048.tgz","integrity":"sha512-/gyGZvWKcf4zzyXP+MZvDnosUh9hOz41vO0wcXoX79gG8iDx4Zgir545+9YBJRjS9Idw+DauQV2nb3z4Z58qhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJ1MxZyF7ImEs19IpaHE87PiVcTykScd1wfNtpXw3LdAIhAJA8fFoboEPZvfQAAHlRi1II5xHUN6ZGgFyxkKA+rfT6"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1048.tgz_1499442429648_0.7021603083703667"},"directories":{}},"1.1.1049-beta":{"name":"meetup-web-components","version":"1.1.1049-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"6f42edd7dcfc457c684b0f728c438d100c6650a2","_id":"meetup-web-components@1.1.1049-beta","_shasum":"083667435d2c2c69c13e57b4ff8801f3f6a6ab9d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"083667435d2c2c69c13e57b4ff8801f3f6a6ab9d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1049-beta.tgz","integrity":"sha512-JAXSMr0r+7YxOXc/dOaQhnJhUOjBk7pkRk3smMiF4Jgf07/cvnONo6OXXB8xJXAOypmMT7JVmes4pD2PRcDctg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDowlHsL7VJfgvvHp76XjKxejPUot34oOwBNVy5UXEs1QIgHWV5GT8kELSzBs+DdUx4XChmy7VAhwicfPvBv03WlZ8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1049-beta.tgz_1499454430119_0.8035435262136161"},"directories":{}},"1.1.1050-beta":{"name":"meetup-web-components","version":"1.1.1050-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"4bb436e470dc9a59111701f0f255fb9852800814","_id":"meetup-web-components@1.1.1050-beta","_shasum":"55787b50005136c7fc557f461aaa23e850e81077","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"55787b50005136c7fc557f461aaa23e850e81077","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1050-beta.tgz","integrity":"sha512-YHY7K69+0LcfhwyHtBzPPaAwUaCh7EA+YX3Ud0bUm/iWJ7fQYsNYyIABfycP+2xf6K7BmayqLKGot+y2zKKADA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCoh8lrDznP1TDYOoEZuzExZFzad65tVU5HIOaf1J88wIhAKQLS56hhb8aUxtBU1KGURUA1fLbwrAhPl0wbA9GzhV1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1050-beta.tgz_1499623526381_0.7074588560499251"},"directories":{}},"1.1.1051":{"name":"meetup-web-components","version":"1.1.1051","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"b83358289e72ecfeda3c57bf754aaed26e7f789c","_id":"meetup-web-components@1.1.1051","_shasum":"e874342a42d59553e2cedc09456a4c42aaf46edf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e874342a42d59553e2cedc09456a4c42aaf46edf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1051.tgz","integrity":"sha512-5vDk1Uf5D4RzgkQagD4L3WN7gla7JYH+OSHPmuu0/5bfIi7bewX6qwr0dHZcy+qsGWa1bCOoAYVlYXYTNl4Tzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAPaKTATqO9M16PXoHpJEY40rPU9sy4e3zoPo39RUh/AIgX8ahsimfsGoTePC57WUUavGNsGBi0MaPEgjnM8tKc8k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1051.tgz_1499623856316_0.6735450853593647"},"directories":{}},"1.1.1052-beta":{"name":"meetup-web-components","version":"1.1.1052-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"efc5eadbdbb7e72c0a0cffe1af1999267bf4a0ba","_id":"meetup-web-components@1.1.1052-beta","_shasum":"07a41aeb7281bfa5ddada39973c3fe640eef8dec","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"07a41aeb7281bfa5ddada39973c3fe640eef8dec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1052-beta.tgz","integrity":"sha512-1aMOhBgvVzifueOw/FjHMRvCReazOiGhjW1te8dXW3Y7mzq1O3zBwlRA3wERZn1I970XEKBBOKSyjJhWfV7L1g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG+O0i2KsBp1nvE7t7F6sA5OOi1F7dxs1+ALsfmEHpDnAiEAiXdmnaKLnYK9Ni0abrtijL8bs4iuVHHx9YOMGO2BOoA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1052-beta.tgz_1499695242128_0.3235304586123675"},"directories":{}},"1.1.1053-beta":{"name":"meetup-web-components","version":"1.1.1053-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"0b14dd8b5c5f8d26fb0199870a09b5ff6cc852b2","_id":"meetup-web-components@1.1.1053-beta","_shasum":"df5aba59751c3477a65b9702e1096039c5db3e32","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"df5aba59751c3477a65b9702e1096039c5db3e32","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1053-beta.tgz","integrity":"sha512-bHhB8HRNNpSnptsVzOSTqtZNLbvOqowOcPkSQaJmyT8LqhLBpE4k0OK9469UU0DmW7Dl60oBi8YRFhTLRV2hZg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC5lmmlSXha+TS97yZw2XSiHhEZHAhx6J6NLYaRlisIeAiEA0hx20XmWg2HsepscEEhqvy2kiuC0L/j2r5DRcfmHgPQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1053-beta.tgz_1499696001579_0.02024612156674266"},"directories":{}},"1.1.1054-beta":{"name":"meetup-web-components","version":"1.1.1054-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"d9c22ba65e69920c5377b7e1100a287870183938","_id":"meetup-web-components@1.1.1054-beta","_shasum":"32379420c3b7b855752a266173cac4ed57dc62e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"32379420c3b7b855752a266173cac4ed57dc62e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1054-beta.tgz","integrity":"sha512-6TqK0XdzORuVygAMgAEUzXwkFWVFSoC0Qki0N5OQgLtpjeD+GSP4nbkyH8cEQ8h8Ohn4udxDAROvEJrWw41IIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQMzDYgp8Hx2XR+bgtBhhRr5Z2R2ecDiyfZW5Rf8czcAiAS2ziNv4Tc0+mB8/qTEHeWEFIytHeoj+KUwLyhEw2aZw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1054-beta.tgz_1499697405579_0.11502617597579956"},"directories":{}},"1.1.1055-beta":{"name":"meetup-web-components","version":"1.1.1055-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"32ee8b186feb5813a73a9d0d424a1e992783e4f4","_id":"meetup-web-components@1.1.1055-beta","_shasum":"84a3ac428799a03285f1a0fa3aa980120d449f17","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"84a3ac428799a03285f1a0fa3aa980120d449f17","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1055-beta.tgz","integrity":"sha512-XImUesraJ2zbl9kSVyLuL4etZzxgr7IhzLLrN8MM53/cI45ZxEU1RkoWtrAZAGcbbv3SrF3AYpHJgG70Hn0YbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3hOZDBppvh95wW1wfNIEKAJ/ZFHMGhLvghyHyIdmSEAiEA/qYpPcmt1F1e9CXEV0ZHJR90+w9xMVDBiU2FAWTzEkI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1055-beta.tgz_1499701029579_0.8569380522239953"},"directories":{}},"1.1.1056-beta":{"name":"meetup-web-components","version":"1.1.1056-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"c78db73a409eb425576d0fcf8330e2f6c1237e21","_id":"meetup-web-components@1.1.1056-beta","_shasum":"b8a0ed2ea44356816d8a129b6a2a6f026a397d23","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b8a0ed2ea44356816d8a129b6a2a6f026a397d23","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1056-beta.tgz","integrity":"sha512-T/3Crzwq38nfPBZdTw/BLpWDXJN+aoAOH1Nm2CY+FciaeNAFey9kg/ywddqliyR5WpdTu9G4wCijOzZuReGP0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEWg6RPUxd7GLLkYAGOs+lE5ahwKBT3GVzV2PTFJGALwIgaBKYZXg3C4PNiRyUQpGLuXrvDkOxsufpZKVPc6G4OPU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1056-beta.tgz_1499704542403_0.1723193940706551"},"directories":{}},"1.1.1057-beta":{"name":"meetup-web-components","version":"1.1.1057-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"f4a9a852f5f28f86ee5edd1517ec3ceaacb31685","_id":"meetup-web-components@1.1.1057-beta","_shasum":"ec30447468f9301aea1b875f65a6d42b76daf88c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ec30447468f9301aea1b875f65a6d42b76daf88c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1057-beta.tgz","integrity":"sha512-D2pTuaiTyfeS0TrvFmhZYTg2CsNGMmMGfyBB3zKysgeuaXyOTQspVK7VM1kLdA5SXljB6OaWS1XJqpCwnUpS0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDURPMiMY/usvb3EwqnGEffZlRv7RLJUA6wehsP3SJPzAiEAziZ/OX90cKuRhJ9QBkh0PobqvQkefe09/GnRmCTZuGs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1057-beta.tgz_1499704741596_0.34917743783444166"},"directories":{}},"1.1.1058-beta":{"name":"meetup-web-components","version":"1.1.1058-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"f0328ff0c29ffa63b0e1429a2509f4500d3f4c07","_id":"meetup-web-components@1.1.1058-beta","_shasum":"a32aa1938f83b11fd99f334966aecba80a01a513","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a32aa1938f83b11fd99f334966aecba80a01a513","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1058-beta.tgz","integrity":"sha512-YslCX953/ljRns8kpjwMjL3stBOIWAV3dkKmNgrWgK5vCyqoc0oCANY3mwJfcfN/D+4pIhI6fZFSwPD6XXhMiQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5Z9YjPJF9jIpuAIIam0pM1zSQp3yT2T8/gJ6ZKKKMswIhAPS4Mp9UnaPzlU8pCrA78mrLx1YO1bGMh23TggRCuJzz"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1058-beta.tgz_1499705655959_0.7159913904033601"},"directories":{}},"1.1.1059-beta":{"name":"meetup-web-components","version":"1.1.1059-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"02a04ca4e86df6827ec7abb87cfddd14eb9c62e4","_id":"meetup-web-components@1.1.1059-beta","_shasum":"67b07e3c0c9a9fcbbf104fe2b005c698e4d9c138","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"67b07e3c0c9a9fcbbf104fe2b005c698e4d9c138","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1059-beta.tgz","integrity":"sha512-MPkfSI64AZthoaX6XzINyie7jz6iM4+jnsOt24aBiZ41598H77rOv2LrCVk1ZXwsXbdYT+VzEwSz3pKvTP72Zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjuLQMb0C9JhWXgDHXve5eYEVBNM9TraL7VnIAzN0I6AiAYrqFHX2RLRHrA0JtaCVVPcA/8Gxn9CQobu1JrBZr8Dg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1059-beta.tgz_1499706310650_0.4552835014183074"},"directories":{}},"1.1.1060-beta":{"name":"meetup-web-components","version":"1.1.1060-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"e67328a289ebb8df5549847148fc1fc17f001a5b","_id":"meetup-web-components@1.1.1060-beta","_shasum":"5d0f581def7783d49ffa070ab0d425421a9ee382","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5d0f581def7783d49ffa070ab0d425421a9ee382","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1060-beta.tgz","integrity":"sha512-AjipnhBB16/sbsifOdtRPuZuaXqXwuCZv2MgmrHxMQ6WzXj0LFkVjwptaD6lpXYBudPl5vlOCcTIImpiljsZxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG3onMf01ozYyRn4GOI/1O8XUACR5ten0TMnO01oLy+AIhAM2pNJQJpNyFEkaMMarNTLYSxCESrZ28DrnJlkfkZ3oN"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1060-beta.tgz_1499713295333_0.8878887814935297"},"directories":{}},"1.1.1061":{"name":"meetup-web-components","version":"1.1.1061","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"2ef015a793c9b35d705945283d4840e74d7420be","_id":"meetup-web-components@1.1.1061","_shasum":"a8c158660dd4b48dd3c94ab4ee37160915a6e922","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a8c158660dd4b48dd3c94ab4ee37160915a6e922","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1061.tgz","integrity":"sha512-gmX87CPBiwgpHcoViL8e6qwNkD+9V3EyDnZDiqJf7oCkfmVcPEImrJwRD5JujGI96cM7Kga6jDBNaHyv/HB+Dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFhR+fSZZ9q9v68hyGcJ1rxYqGXUwMTx9M4M6JEoJIHLAiEA4AbK/CJtyhpjaNIzeuqCZQyiHPCHimrjntBWiDykLDY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1061.tgz_1499714575138_0.9464496744330972"},"directories":{}},"1.1.1062":{"name":"meetup-web-components","version":"1.1.1062","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"2.6.3","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.24.1","babel-jest":"19.0.0","babel-loader":"7.0.0","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"3.19.0","eslint-loader":"1.7.1","eslint-plugin-react":"7.0.1","gh-pages":"1.0.0","husky":"0.13.4","inquirer":"3.0.6","jest":"19.0.2","meetup-web-mocks":"1.0.190","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.5.4","react-addons-test-utils":"15.5.1","react-dom":"15.5.4","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.5","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.2.76","swarm-sasstools":"1.7.29","webpack":"2.6.1"},"gitHead":"5a55a54734b81158766e1cb51c7bd45f63535574","_id":"meetup-web-components@1.1.1062","_shasum":"355a299fe31527a9ae323f196746f8867c737e95","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"355a299fe31527a9ae323f196746f8867c737e95","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1062.tgz","integrity":"sha512-jpU1HnH1Q6kx4XxVU77idZp8eDQ4n7BOt7FqbeW/toAARZM/XKgJOtas56GqdJ5pHIJZ23VdNUGGu99pHxlZVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFD9QWXuXB3Kn8DVFvwq5DMvyQ9dsPAA/m1XCGwHtMLfAiEA16ZNShiwUvmenjZFisPnw/Tai+aozXRLCoIiK7r+VcE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1062.tgz_1499716166962_0.8921084459871054"},"directories":{}},"1.1.1063-beta":{"name":"meetup-web-components","version":"1.1.1063-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"ff60218f977837a07e2121cdf94cf7ea27262cae","_id":"meetup-web-components@1.1.1063-beta","_shasum":"bc1107728815e463447bbbbb5aefe166f5a81864","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bc1107728815e463447bbbbb5aefe166f5a81864","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1063-beta.tgz","integrity":"sha512-aUC9nZGPMOOjCmxV6yJsMLn98dJR5aal1q0kECafqS1kEHK2NzQbwHpOAd1XOY+PzBCREj7FXDSgsZXThBkFXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT56zZQ0nBvRgBGI0WaXtm/keZNTzYiHrzDT2E5bO5AAIgPmr/mh/i8LZCfZOhnILWWk9n/tUEwu5ErwaN8K/40FI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1063-beta.tgz_1499721250903_0.2762542765121907"},"directories":{}},"1.1.1064-beta":{"name":"meetup-web-components","version":"1.1.1064-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"ec8443c418a03b683bb2738c9842035688bd7495","_id":"meetup-web-components@1.1.1064-beta","_shasum":"e087467246e5cc256445f35654ad3aa88fb42186","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e087467246e5cc256445f35654ad3aa88fb42186","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1064-beta.tgz","integrity":"sha512-kg5er41B3vNK89elMC8/a3/p8L96u7876BKWrnyUhvSyrN19cm/yc9xPN9gVnHkJaCutD8/jzeoVRkMLRy2hZg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8f5bQ50Iv7XrAiCjQscnjCDb/CMI4zaVHuiAleZwxBAiEAxq1y0MYN0mb8T9bD4C0OwH116RVi1qMAi1C54yCMcy4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1064-beta.tgz_1499721626874_0.7328277109190822"},"directories":{}},"1.1.1065":{"name":"meetup-web-components","version":"1.1.1065","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"adc3ff0eaf8411ed9fb6a45fe2d18139e30b543e","_id":"meetup-web-components@1.1.1065","_shasum":"38cb774b250a5cd6bd050e433669a5ae919e60cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"38cb774b250a5cd6bd050e433669a5ae919e60cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1065.tgz","integrity":"sha512-sHnjb6zX8prfmhhKf1gyY8cXU37GedepigLEqHCr8Wo3NWF7e1ATuEACkK7icuAEHq2pikZTpPwR+sGdKDk1Ow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5/NZp7fJBi4I9ZXkwhhr+HnhwAjdZxioG2Ms2tBUIPgIhAK6OWF3ts5N5g0O0iBxMVqhIxuDFsxPM26glG/H14yY1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1065.tgz_1499721905547_0.09776373161002994"},"directories":{}},"1.1.1066-beta":{"name":"meetup-web-components","version":"1.1.1066-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.2.110"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","jest-enzyme":"3.4.0","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"5d98aca216980948238ab0511e19b8e529c7df1e","_id":"meetup-web-components@1.1.1066-beta","_shasum":"119dc536517ccabe77766425f120599cde3ee19c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"119dc536517ccabe77766425f120599cde3ee19c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1066-beta.tgz","integrity":"sha512-Cxtg2UfrcJztJSSFQL+9D0n20dvaqRINQnUroq6Tgq9rIuq7WwDd2yTKVqxvHbsQsIWx5kZcS4dgMIRvsa3LlQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKtytlIXk7rnvz18sOraBupQ2A8/rCARnA92WL8OovyAiBey4McxQ9RHlhDHf0I7fCf1t2rZ2dxsgxktQzE47Morw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1066-beta.tgz_1499787475229_0.19734373642131686"},"directories":{}},"1.1.1067":{"name":"meetup-web-components","version":"1.1.1067","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"d720404a7ca6824beaf75628f3075907a8f082d7","_id":"meetup-web-components@1.1.1067","_shasum":"19e6dd2ebae0f2be568da7b0761fb34b230c3526","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"19e6dd2ebae0f2be568da7b0761fb34b230c3526","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1067.tgz","integrity":"sha512-RiqiAUw9qMKeihsuc20cl+iRMZzF64ZoTIAJgwa6QbZzzF10enQZBRLWgNJ9KaXkfVcpv2HI4t+nwoGfXVzWOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDgj5VxtKrzrix4klJyFhLyOFIrgkua5NMNjUaWflHdNAiA9TJyNp7u/NFj7yH4Gd80JkPNXvYIK12agUn5Ytg/Gtw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1067.tgz_1499791986557_0.7528644662816077"},"directories":{}},"1.1.1068-beta":{"name":"meetup-web-components","version":"1.1.1068-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","jest-enzyme":"3.4.0","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"b84c72a8994482f791be5a5d20d4efea060f69d4","_id":"meetup-web-components@1.1.1068-beta","_shasum":"8e5311522fffbd6ddc7a18f95c69378a379e9524","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8e5311522fffbd6ddc7a18f95c69378a379e9524","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1068-beta.tgz","integrity":"sha512-/rKcD6iQiyySXiivLuKLJA8kxPmAwiblIkDJihZCLcN4W3yLqTD66hamki8rjLyvfhC8oiSMn+IHWqIfRIGmaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjw36aoQDVAFEQKEZia5ZD0SbmwHU2oRyuht5JAArWZwIgL42j7FMm6/5bVwd30lsN3KHWcce7zSOv2FlNciZGhdE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1068-beta.tgz_1499801265904_0.040143175749108195"},"directories":{}},"1.1.1069-beta":{"name":"meetup-web-components","version":"1.1.1069-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","jest-enzyme":"3.4.0","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"cec86ea7b15f1119f9124b6e5b283ed3fda4625d","_id":"meetup-web-components@1.1.1069-beta","_shasum":"1061223355837458f8002104b92f69dde53825cb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1061223355837458f8002104b92f69dde53825cb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1069-beta.tgz","integrity":"sha512-olBQ8ghWm0yipN2Xnsq71DL+mDILLcruMpbxjX59U/kLAeAnTG6u4FF37yFFJtvw1BchFY8R+7yTJ+F999uLpQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBvGbplYKrpKJL2ywzT5cTu5zCC3XZNg/le6op3k/7xmAiAw5USpQZL/Z5us99g7mabdmxpPFDY6g599CSU+jlO6mQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1069-beta.tgz_1499801551489_0.4326911892276257"},"directories":{}},"1.1.1070-beta":{"name":"meetup-web-components","version":"1.1.1070-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"7d6bd8b8e56fd9ee3ecced13f8391244efa9d3c6","_id":"meetup-web-components@1.1.1070-beta","_shasum":"054409e80fb7980072569ff34e05a40b3930e99d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"054409e80fb7980072569ff34e05a40b3930e99d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1070-beta.tgz","integrity":"sha512-ljKbHVcUdnNvypjGtd9zuvQS02PB1cit2Im4mn/ReCsBzz7+P9xlVh+ddrJjvBkPTl5fooqrGsrXC6ljFhPvVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDb2N2/RupKhsxPlewttYNqwCLRngRb2eSsEPpQkCVa4wIhAMlYI5C7FptJDj3IolYx3FPA5bWsn/0ssbDZ4gv5cAaO"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1070-beta.tgz_1499802050350_0.5989849166944623"},"directories":{}},"1.1.1071-beta":{"name":"meetup-web-components","version":"1.1.1071-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"b6e42f5dd56c4faa867ae9cf28eaad270752fe6a","_id":"meetup-web-components@1.1.1071-beta","_shasum":"914eebeba9c155c1515ab8cabe5cf32b94e40452","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"914eebeba9c155c1515ab8cabe5cf32b94e40452","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1071-beta.tgz","integrity":"sha512-oI/w3hdrW/Bx/Zqw3S8U+C9+YUsjmeLzP3Y3P6DJOA0e8lWWGAnq+WjUcO7uyWJ6SKhxEuyeQ76M6rWE+MbYXg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJz1o9kjq5Aek62N3SxTJt5G9hToyYmYnoi9OM+UlbHgIgU8J+VXVyl2O94u2H8PNLZ7BRH1Toioec4f2GneR6MmM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1071-beta.tgz_1499802703850_0.2952920198440552"},"directories":{}},"1.1.1072-beta":{"name":"meetup-web-components","version":"1.1.1072-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"3d8fd9b6c511fc9577e32f5797f6119d56706567","_id":"meetup-web-components@1.1.1072-beta","_shasum":"dff4b800a42eef15ba842a548d8e4fee4e2dd4bd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dff4b800a42eef15ba842a548d8e4fee4e2dd4bd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1072-beta.tgz","integrity":"sha512-rjgBEoJokZNq9C3MScbv4X9xsuJ78qTr1da4XRhA9P07pv05QINOT8BkAk32VnHXnRWMAOXls7Z8NRg0EBJOSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDGgYpqJHl+zQRhQHWO+Nx9JaWuTucFEzvsWny7sN4mSAiEA3T7BKN4p8VJiX/sugQUXJmvs5QtC+J2eNOeeLX0E9rY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1072-beta.tgz_1499867438294_0.8578072474338114"},"directories":{}},"1.1.1073":{"name":"meetup-web-components","version":"1.1.1073","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"609e5f5da05e6042441bd4723ce1804b99b57b48","_id":"meetup-web-components@1.1.1073","_shasum":"e351a933acc97363107b4ed5f0897bac5cbf9128","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e351a933acc97363107b4ed5f0897bac5cbf9128","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1073.tgz","integrity":"sha512-A0HbWM6fd2q1/iuwLXphtXctXAmi8qXKmYShtnEoc0Myk474zFR3HpcxMF+AUoQ7A9aTzOI2U6RMpNpNQ6kk5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICiGLF5j//FHPjrkUKvtGf4W7x5HsviOpQ/F14p4syfoAiEAuil6xsuneO6fqYv3KBSG0sWmUR6YlxD1uAZJQiI61bw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1073.tgz_1499867623842_0.3506854292936623"},"directories":{}},"1.1.1074-beta":{"name":"meetup-web-components","version":"1.1.1074-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"8046360a216568708852d6949c0cf4228b8ce0e9","_id":"meetup-web-components@1.1.1074-beta","_shasum":"32d5b9b5afcffca8250267c6c1b99da6e6a138f1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"32d5b9b5afcffca8250267c6c1b99da6e6a138f1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1074-beta.tgz","integrity":"sha512-wosx8eo2Ogc9wdqfGD72xahVVJBo2H0zLpEVylB89xPYbmKc9/9RTyPSW6yWVN3PSjFsqVPu3yDX7OP2FSJbag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8q4w27OODlcdjbQDOoPR7ahUgweP7aGTJGVRaTnv2vQIhAMteAgF/y9tEAHDPrbfpVYh2u4q1B9aMNyoq+OS5TBZg"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1074-beta.tgz_1499867846672_0.21754116262309253"},"directories":{}},"1.1.1075-beta":{"name":"meetup-web-components","version":"1.1.1075-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"0fc81806645ba404ff0b193688c40ba0a190be7d","_id":"meetup-web-components@1.1.1075-beta","_shasum":"1b31b50029a62df5c6b4f7673be93e0aee7dcb07","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1b31b50029a62df5c6b4f7673be93e0aee7dcb07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1075-beta.tgz","integrity":"sha512-rYRJY2fO/22VM1qnmO47OGNufOSThSyeg7Num39dxxRSS14nYSH86DNGxW3M5p2zrMyro1eMZ0C3cItGH41HOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWzFRxR9AIzuSIQmMOYsP4gbL5POIWw6UQMSWhSBtRpQIhAPmQ7to3qbE+MO3Tc6wfKtXyTWB68kTemwf33nmanUoU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1075-beta.tgz_1499868264387_0.26406923262402415"},"directories":{}},"1.1.1076-beta":{"name":"meetup-web-components","version":"1.1.1076-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"2b755e8bd42f9182b100b3a20b9972087a156bec","_id":"meetup-web-components@1.1.1076-beta","_shasum":"6a776ee812e25650db8358f0c3e9fc5e20ffbf2b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a776ee812e25650db8358f0c3e9fc5e20ffbf2b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1076-beta.tgz","integrity":"sha512-J3abKJSbhgcTf4RAw/xnjax8dQZqlFyEDeyj8Jl8R0b6UntTPjAhgmUMQjvmBobh4g1gQabMdZgL5RHfGVUtjg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjz4oB6zmN1NoI2sCuNI+kp0AVS/xFjRT3+PVpYMiRKwIhAIHIbWT4UjclLGZ8MFqhxoM13BsBIL2VzVSBoCxit6Sq"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1076-beta.tgz_1499868707805_0.31525127100758255"},"directories":{}},"1.1.1077-beta":{"name":"meetup-web-components","version":"1.1.1077-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"b4c76052012532baab64f473a11c5e3b59a6296d","_id":"meetup-web-components@1.1.1077-beta","_shasum":"a3aa4ffc40c218a8567832d4d234ec86c8082172","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a3aa4ffc40c218a8567832d4d234ec86c8082172","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1077-beta.tgz","integrity":"sha512-YzGqaFmTOr0sCfEX2XmLaG7K2VqOZfP00yT9tHMkIGzPbwOtcwQBEXtG7EKhUfJQRKguO0n/2QvmMBiIEDtFnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVGLeUCIHIh34kGS394+FcyqQfbEDTzMaS35o65A58/gIgJjayHs9f7oGO0b70Y6If1KfHowFaH/wdT0qz+jdI9Y4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1077-beta.tgz_1499869334623_0.04020977532491088"},"directories":{}},"1.1.1078-beta":{"name":"meetup-web-components","version":"1.1.1078-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"93b347c6a23d03f024c46f78b9c3ad51ffad9130","_id":"meetup-web-components@1.1.1078-beta","_shasum":"f7744f5259a80407f03d42eb7d75b6b238067859","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f7744f5259a80407f03d42eb7d75b6b238067859","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1078-beta.tgz","integrity":"sha512-p+NnZj/JZL90vdsnS+cvVzRYJjohLWXItJBjOxvT4Q+/FFvkA6eqq71tn/TUUxtC/L9otNdzdeEs8tLxs862Pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDgrfQjvCt2FNfWf62cqUo7+sQmeZjeHIggWwlFNA0qAiEAvh3Y4wuilP9iluMMLbEaba3Oele+yM7xA7Td8R4voFI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1078-beta.tgz_1499869391454_0.46686985972337425"},"directories":{}},"1.1.1079":{"name":"meetup-web-components","version":"1.1.1079","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"0183f83535236d1c446cd77195c1da88f9893365","_id":"meetup-web-components@1.1.1079","_shasum":"6353911bf42b00a81f4df4d423a44d2e7d25f5be","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6353911bf42b00a81f4df4d423a44d2e7d25f5be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1079.tgz","integrity":"sha512-kzgrZ6NPTKiZYTyv2//L0vlwZyetsjcfOxeKD5Vnwi7BYXdm7JHF+o5hvaPML27H7zIwspglQd+eOki0dTyNsg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHv3xdgJqLu/x0/p37ZCci7nhvGGav2UBHPTIs1G+L00AiAfYONvsA6R+6p8EPDtK1svZWleho7Pk8j+1HX1r4MKqQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1079.tgz_1499869426043_0.9194850160274655"},"directories":{}},"1.1.1080":{"name":"meetup-web-components","version":"1.1.1080","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"accecc0c21cdae4894fab1a7936f44737240635a","_id":"meetup-web-components@1.1.1080","_shasum":"47862b48e9d8b3f8980975be885379e32b0ad73e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"47862b48e9d8b3f8980975be885379e32b0ad73e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1080.tgz","integrity":"sha512-p6aHy78FOIJuy706fU6ylqTY6fuffdwGAM5tozNqYHWcoRrNwldHLlueXFkXtChP8SRJvZD1fDOqXO2CO4M1KA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGXPFcfcom46TBMiui8llp8mrvR8E1bCHuwPhe1eeYiTAiAiOGySiWDrN6YBmgAgkvbKxy80dIpyjclQ3jtXjCeKjg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1080.tgz_1499869734632_0.7816249374300241"},"directories":{}},"1.1.1081-beta":{"name":"meetup-web-components","version":"1.1.1081-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"d7617c470f30458b6800e0993a7445e977942f6c","_id":"meetup-web-components@1.1.1081-beta","_shasum":"0d102701b138834136a7aeb07e5b1d49bdfe4be3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0d102701b138834136a7aeb07e5b1d49bdfe4be3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1081-beta.tgz","integrity":"sha512-HQnXqHTxyjDvlfMwpicXuQJ7YXSjGxYZx2tg7WDjYvdaIszC/E1mRNQ4LSPnadl9l228lYxz7s+xKCR/1xNwRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmCqvXWzw2F+WvUX7RCv/0X10ePUumbxQfCoUvcvj25AIgZVnZnBjyWPrKpT/H84EiAtsJ8W13SqUCt00aeGhnNb0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1081-beta.tgz_1499870001168_0.8437267681583762"},"directories":{}},"1.1.1082-beta":{"name":"meetup-web-components","version":"1.1.1082-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"537749ab83e112c2b8e96a31c19ef38d9e96cf46","_id":"meetup-web-components@1.1.1082-beta","_shasum":"cff872adc3b724c06c54c432bca108fe5c3b3e75","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cff872adc3b724c06c54c432bca108fe5c3b3e75","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1082-beta.tgz","integrity":"sha512-XHl2jxD0bWmTxNfXPkHBZikVdZoXdzSRXdObLAN2rQvTBHBIF5GFTIw0c35qXG9K72b1ocd1jLxvDSital6l1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCySGzt7ZGIip7kXoTcbC6NWrWTY5JfHmIYTZLfdj3AFQIhAMpda0feJ/8YY1bi03v5C30xGRuzw4Uk3iImU+3SDvQb"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1082-beta.tgz_1499895472664_0.9540562154725194"},"directories":{}},"1.1.1083-beta":{"name":"meetup-web-components","version":"1.1.1083-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"8baa0e3c195ae4b50e5573e1c42e042eecbd7f32","_id":"meetup-web-components@1.1.1083-beta","_shasum":"50cb01c0c6e8e4b554311bd5ca00053a03a47ac8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"50cb01c0c6e8e4b554311bd5ca00053a03a47ac8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1083-beta.tgz","integrity":"sha512-3kp7nXF0G6Ke685qr6TP7+JhrGc75DetZ9iwp5dgJacA8+rS1WMX1z8MzokQ9SJeDSZ8ITOVBXn46wefqSZD8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAaTzbXr++bOTouGHabdUUoMyL97A9qxu4FWP+4zAYfQAiEA9dQBTfFsn3fxZic10ihC8gzauwT9ONvXuMJJyRig398="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1083-beta.tgz_1500049735461_0.8790866227354854"},"directories":{}},"1.1.1084":{"name":"meetup-web-components","version":"1.1.1084","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"b1c1a12bc298596e76d66f983fb0f0857e94dc70","_id":"meetup-web-components@1.1.1084","_shasum":"0f950ea6442fdc1bb9b79517a0864e9d6104a3dd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0f950ea6442fdc1bb9b79517a0864e9d6104a3dd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1084.tgz","integrity":"sha512-cvqHV1PHP5PJUZ43//Yh2tP1vGfc6Pf713+/QR9NrhYAFv2oli05Hw4l2OFQIU1KG57QhevBh15vlDf0z9EQkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDefk3ppjyBqmuv3f6A/929NbJ78Jp66IA7oNlQ90ZqdQIgf9fZwibItbG1svPTPOmWR/Ga9lJdvsjf9qfbtCkya1o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1084.tgz_1500053382325_0.006510476116091013"},"directories":{}},"1.1.1085":{"name":"meetup-web-components","version":"1.1.1085","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"562d793e728ac2d07704452cba4809bcd7af0f06","_id":"meetup-web-components@1.1.1085","_shasum":"fb8a5470c8934840886ea0caf5dc46199712765e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fb8a5470c8934840886ea0caf5dc46199712765e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1085.tgz","integrity":"sha512-Smh2ZVjt1sbpMOBtPI0iiDKcFXkqZBfWLC2LkTOZ6wE+/aN+TQkcZC8A6cN7sspDJBgr1BeIHXuhZoESj74EXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLjE/eJ5YKAlqrb0Wi2WB+Ci7GEFpkAVy5h076FjMFTQIhAObL2+Bk0/tNiIYgMNcKpPStwY/u348+PC2z7cYsnJcf"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1085.tgz_1500069116383_0.09169308771379292"},"directories":{}},"1.1.1086-beta":{"name":"meetup-web-components","version":"1.1.1086-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"1750c8e5146c949671c0e5436564c8cfd11d6a4d","_id":"meetup-web-components@1.1.1086-beta","_shasum":"45afe020a9c590b70c01d8a15adf01396ca00df4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"45afe020a9c590b70c01d8a15adf01396ca00df4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1086-beta.tgz","integrity":"sha512-YJe/s8aYZBLCPZjGFmZbqOxjROYV0xlZ7Ucyt0e4RBByQit4Ns+KgITRx1Q2D3thg8liw4iQkbcl6kZdBXxdTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHHTfOIoDLouciNBbfmUlqo6kqnJqY43Ipd13EkXPCE0AiEAtQ81Fv90r5Z2r4ZBkjg77E2kLESRJnwrDD17z+syHGs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1086-beta.tgz_1500308623734_0.11986032803542912"},"directories":{}},"1.1.1087-beta":{"name":"meetup-web-components","version":"1.1.1087-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"788c034a2fe82c96da2231c6492ef73fe6f11fb6","_id":"meetup-web-components@1.1.1087-beta","_shasum":"02049dca0570dc50a8453e8cfa063aed226bf7ae","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"02049dca0570dc50a8453e8cfa063aed226bf7ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1087-beta.tgz","integrity":"sha512-E3TnSSLYAQ3l4GydbvRaoRsW8sg7m1lIh+V1D8kvIo9qKeALZhM8dpkUBNJgjEQjfYYxWt4HYrEqFF2HHqpOYw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsGpsxRL6CDQqWmVif413AZK6SjKc5IPx9ie0gDUFatwIgNrEehT7TGxuCKBf6yhHfSN/Ji49xEU9zm3JO89QjL14="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1087-beta.tgz_1500316136046_0.8411433144938201"},"directories":{}},"1.1.1088-beta":{"name":"meetup-web-components","version":"1.1.1088-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"55cd98d3726ac3862a66b8dc5fa3d36addece194","_id":"meetup-web-components@1.1.1088-beta","_shasum":"d5986827464e5e85e7e184d159263dd7130db442","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d5986827464e5e85e7e184d159263dd7130db442","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1088-beta.tgz","integrity":"sha512-LIkkkH6iWDklbvovg2r5+qtepNPKkVtkKO4JOczFdr4KoIAO+0+7Q/U4STtYS8m0fdckgtblptgxLBiJ4bHtDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbyBpwVasvFSMZtGYePYDHYBonKQuZNKE39EXhqazYHwIhAK8acxUyb2kNqUrlZ5yY8Wdaopmuk8qCwhj4bYJQAest"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1088-beta.tgz_1500318790428_0.9497450650669634"},"directories":{}},"1.1.1089-beta":{"name":"meetup-web-components","version":"1.1.1089-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"ebe4b7406fa4dcb92825531a2e311adce98811f8","_id":"meetup-web-components@1.1.1089-beta","_shasum":"981237d6ad334d490aa710e5abbc262ac663bff9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"981237d6ad334d490aa710e5abbc262ac663bff9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1089-beta.tgz","integrity":"sha512-uQSZ6ONN4NXZBF3Dxl4ne7neSOOi55qP3V7ApZioGcudMg31w/zdAJ1RsboDX3AQo2tEOlOVxaX9Oa/r9CbMuA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8hpPZg4AmCU2fL5zw8bUiYnV58hJMOMdB5lXhLIJPWAiADd3g7CsWNlWb3WfTjdibFTIw0389MxomZqOS/O2/mHw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1089-beta.tgz_1500407246093_0.02181722642853856"},"directories":{}},"1.1.1090-beta":{"name":"meetup-web-components","version":"1.1.1090-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"0922022790dff46adcbf69c87fb519ba02ba86ff","_id":"meetup-web-components@1.1.1090-beta","_shasum":"626343aa6da82c5920c09f60953e4dd93e546886","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"626343aa6da82c5920c09f60953e4dd93e546886","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1090-beta.tgz","integrity":"sha512-T8nrFC3VVPIXncWgLCf9ZymHq0nIrMNcFhCKI9YqMNPcj8aCfDGnAchMlEbcJMGbdMs4lFCgU8D4l0VogUkD3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/ZWU6d8//p4UCQ7P9TsEx58mqOeUL7XKkRNvYzKLgpQIgHR+Pzl488sm/jueQgfKSyh6ahmvLH+wWDhWzgS85icQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1090-beta.tgz_1500503617124_0.7138999085873365"},"directories":{}},"1.1.1091":{"name":"meetup-web-components","version":"1.1.1091","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"f0bba95c57bba9e2e429f8c287bc4e2be6bd0ea9","_id":"meetup-web-components@1.1.1091","_shasum":"54c2fe3ea1928c132c7e042bc96221dd99a3d008","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"54c2fe3ea1928c132c7e042bc96221dd99a3d008","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1091.tgz","integrity":"sha512-qMFtMyL10PwhU9yaR7YLn50T7lUbagDMloIxDYVpHw+nCZE9UkQ+cOzkU/RPFoFluN49S0kUQrkYyrrBPxgr4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKkmqXFO3LZ8WkGHBDK6/BeFoaPVt/yI3ybuEYNXAZ4wIgZybSRPJk2SO9nNrH8ZeoUvOcYaopdPZFKYkhmHojW04="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1091.tgz_1500565615044_0.7235094157513231"},"directories":{}},"1.1.1092-beta":{"name":"meetup-web-components","version":"1.1.1092-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"f363e726608a3e4000519c05556657618a113638","_id":"meetup-web-components@1.1.1092-beta","_shasum":"740d932aa267302e965b30fbd2e82b7067df3b9c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"740d932aa267302e965b30fbd2e82b7067df3b9c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1092-beta.tgz","integrity":"sha512-oMsd/gipqeWLxt03YlO9uaQDEXFh9oRXLKz32A1WvNjkgtaRgj505WvFh1bzH8g48J960zRM4FjiQa5iwajaBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfuDr304sUYDOOixAPtI0lbsBRfD3DpfN3hFLC5WLH3wIhAK8jdYu7x7eh39TDE1t1Yn0/9Pqsk3TIawzWKWJyzbPO"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1092-beta.tgz_1500565881584_0.8930515258107334"},"directories":{}},"1.1.1093-beta":{"name":"meetup-web-components","version":"1.1.1093-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"fea1b502bb359a0036ba02547551bb4cf14f85fe","_id":"meetup-web-components@1.1.1093-beta","_shasum":"30c1c8a63846ba532cc9822208e251ba70dee9cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"30c1c8a63846ba532cc9822208e251ba70dee9cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1093-beta.tgz","integrity":"sha512-dB8Ip1PCGFm1PkE6bB9G9HFLToPhog3xCLCs9AczMUOCpxZJpGtpA79vh1fOe5buTvsqyrIqljwA58TOI+fJ1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrK9XIrGjE0k/IXlLaXllDJz3xJimYAZ5bsqf5mV4O9wIgd1Y95vriU+qqgM+NYnkEkD3a7xlVta6kIRVI75VN6kw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1093-beta.tgz_1500568143055_0.09909950429573655"},"directories":{}},"1.1.1094-beta":{"name":"meetup-web-components","version":"1.1.1094-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"dae5990cba7cf90770903a9dfbed833f483da607","_id":"meetup-web-components@1.1.1094-beta","_shasum":"3352cc647f49c48eb193d1fc22492c4fdbd141cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3352cc647f49c48eb193d1fc22492c4fdbd141cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1094-beta.tgz","integrity":"sha512-TUUS1gUy1TYqxP1Cx93Ix7UQl+CzuGRNttDy2TFpmCz/EARPdBBZDQBdGm9wyPQ3MLflLnOq8FPNGvXeXNd70Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtqQoDX8GFXePtyU64kej6yp6t3XZBIWlTNr1yxGbjCAiBfoxlIIGAuYQAHgElIKwSc1kwXLPfyHjKmUI01Z54ngg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1094-beta.tgz_1500580042156_0.86396613297984"},"directories":{}},"1.1.1095-beta":{"name":"meetup-web-components","version":"1.1.1095-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"80553d9c794d9ed5faa17960f8c32c44ed81030c","_id":"meetup-web-components@1.1.1095-beta","_shasum":"eca203b1a2cf86a9e36cf96fb21c319becfe3ed8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eca203b1a2cf86a9e36cf96fb21c319becfe3ed8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1095-beta.tgz","integrity":"sha512-vNi6/z2xGLq8VLJpSsBXpAyvUiSsLwQsndpVzyI+Nxl+3AieVOCSRQoEZM0IsxTORkHUGE4Z9Ga8qbDJhqWC1w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/wY5sea6rvo4WJ9JtAY2ed1JWY71iDBGZ0DrVDwMadAiAfWejZZ6Ub9Dz0V/sZSCzjZT8LkOAy/LoXJIoeW2/NWA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1095-beta.tgz_1500581366448_0.10110967326909304"},"directories":{}},"1.1.1096-beta":{"name":"meetup-web-components","version":"1.1.1096-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"af648de17651fc39c35ef7e7cc3593bd88b84646","_id":"meetup-web-components@1.1.1096-beta","_shasum":"e1e902977bacac39d06435d4e4ca2a9ae5472905","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e1e902977bacac39d06435d4e4ca2a9ae5472905","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1096-beta.tgz","integrity":"sha512-SG0kDlIVNTag3h+0xqZokgEQi4R6282vZFO/CXVarunXgH8gFYtim6QEDqKuv6uDXqtqC8CyRoEN7vrFoK9pxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBrUFp9cQMcWTHtUtwhVIL1RgESNnZpUl99Blab/dvqQIgb0iKjGhyL9FN3Zz4W5laEOe7LAOVpk22UeXo2Qrw49w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1096-beta.tgz_1500586783958_0.23323561809957027"},"directories":{}},"1.1.1097-beta":{"name":"meetup-web-components","version":"1.1.1097-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-storybook":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"3ee8c97da555531bdabe40fc700eb5f44e3af374","_id":"meetup-web-components@1.1.1097-beta","_shasum":"904de594032362a34ef0aca093c9131238b2f688","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"904de594032362a34ef0aca093c9131238b2f688","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1097-beta.tgz","integrity":"sha512-kjroMOIwEHZ2w8xh/RHXL3UK4dTF3HXOkVikp278Cog23tQQZ4vvr4c+/rEcfLhivO99A9gTpNpC8jo4GXAkKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDqSR7NGRPU4sR6d3gxw4kSKD/TkFKUR4wv1G5ufCtbpAiBICDypxGRrB9z5emCoqCXPAlO6wgovwgrC1h7Pucnclg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1097-beta.tgz_1500590707698_0.07031061919406056"},"directories":{}},"1.1.1098":{"name":"meetup-web-components","version":"1.1.1098","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"ce4d818b273fb48eb03339ab26bbe56289643cd3","_id":"meetup-web-components@1.1.1098","_shasum":"69d09211d2a27d70151b0ea25048e056c1001dc0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"69d09211d2a27d70151b0ea25048e056c1001dc0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1098.tgz","integrity":"sha512-aH9tBic98jny0AnStYd1e9lNNmrgpZ0c6LvJsbTF6VowTidmoQfboMUotMgpMzQ4rXWFw5UX9w9NrwTtja0Ijw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCadeeUGXQLdwMob2PGDllP8VHXt3Ag7eQ3Tv9pqXJzOQIhAIihGC9jgLzUcCUeSF277Kxa3aIeRDTPtpCeup2nJxcF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1098.tgz_1501004667287_0.6666511094663292"},"directories":{}},"1.1.1099":{"name":"meetup-web-components","version":"1.1.1099","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.56","webpack":"2.6.1"},"gitHead":"001a9fc3533b0a4f7171a55621dae27af332fde4","_id":"meetup-web-components@1.1.1099","_shasum":"ac595ff276e4b8a4698b1c8783e8a3f82c5ab2ab","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ac595ff276e4b8a4698b1c8783e8a3f82c5ab2ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1099.tgz","integrity":"sha512-oPHy49PIKBdZpbJwsKm3FMlM9S0WeuHvtYKLBYdXm4xDp+a9l1qALTyREbFMN+KDTYKDFBGabW8iVU6K268siw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZJPah625FsqvGb/+QASxmAZxWcJlnodM5GDuZfrDSKwIhALXUNSXgIIM2whGxyBZpLZaAzYBY4D/kUSpZPL7gG59W"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1099.tgz_1501021990524_0.5711407451890409"},"directories":{}},"1.1.1100":{"name":"meetup-web-components","version":"1.1.1100","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"6c6662cb829424899c4832da4b8742b4263bd645","_id":"meetup-web-components@1.1.1100","_shasum":"a3d6e561fd79a39f29e90673e8310c687b0bf571","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a3d6e561fd79a39f29e90673e8310c687b0bf571","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1100.tgz","integrity":"sha512-mjYDA5WQ1W5NsmYwLGQsJlmcYOCIL9yu9ylMUen4XWgih0Xwj4dGUwFwkU9XncnhLyX6OLjYhOx8VMHHak7FVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAaGhj1M+mh/1tehSNFk+Kx5XUv2nL80mIlNNIfyOmbnAiEA15RNWpHKJRjyyjlQP6ajK813NHBwxQSzcyAZxiWonW4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1100.tgz_1501176709615_0.7007800603751093"},"directories":{}},"1.1.1101-beta":{"name":"meetup-web-components","version":"1.1.1101-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"14c2859e78545ddb0ce61bc488999ba4efc2aba3","_id":"meetup-web-components@1.1.1101-beta","_shasum":"e3351522aa562f75c3362fc0a24b88a709ca7149","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e3351522aa562f75c3362fc0a24b88a709ca7149","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1101-beta.tgz","integrity":"sha512-lyXL6lDk2u4ZyO0iDxB7AYEJC43KNQAJW9eiWEY/TrJoBlikcC23O8UPDW8n6L2Q7TpoFIxyhHCeG1z1dCdrDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSSs/Wr1GaJWo4Jbh3NplQNL5sEGviUbtI3p1GCai1zwIhAMk+SS6ONrtxCdWjyD4BeVhyjjXfD6/lIXqtNfiRvt9i"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1101-beta.tgz_1501257759913_0.26208931650035083"},"directories":{}},"1.1.1102-beta":{"name":"meetup-web-components","version":"1.1.1102-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"b17b3e98f577d4ce56f5d4c269d92803ee961c53","_id":"meetup-web-components@1.1.1102-beta","_shasum":"9d3a69945e0db2f0246cb23d9add1e6c9c8c12b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9d3a69945e0db2f0246cb23d9add1e6c9c8c12b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1102-beta.tgz","integrity":"sha512-iLChjGn5xIaDk8UGS/stSygUox+RxG4l4PiT/+bFirlmJJNvpHWCYSCVeH2FFO3mBB/mBfBPW5hwNatdVQKx+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwGnYC1oB1msNaw5CkAzuVX66Zk4xCoTSd7unqXdluHAiEAtmGzkaoqbF0sFZarB6fN2FPAD3YAUr5Kztv96R+MwZA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1102-beta.tgz_1501257800574_0.03654765407554805"},"directories":{}},"1.1.1103":{"name":"meetup-web-components","version":"1.1.1103","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"e21aeb2c439fbdf2f4543ff288c3f6f98b4b6229","_id":"meetup-web-components@1.1.1103","_shasum":"385830ad0d6e206f6346c98205e7580eed498787","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"385830ad0d6e206f6346c98205e7580eed498787","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1103.tgz","integrity":"sha512-F1/srHKqCpAteDtiiKOFGef74El+vNKj7JkRB1RwYFyOkejH6HPUSOYH1j+L97wnv1LW2KpOdzCMqz8Aa6XVBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9sC9+sMZvqRW8KAe5xtmnGthmfpvbGw4yGbdir+j9cgIhALxQry9ZL+JxEbhE/RlD3TD9BT7eBkYnJe1L9K7YhFeJ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1103.tgz_1501260581924_0.05864281579852104"},"directories":{}},"1.1.1104-beta":{"name":"meetup-web-components","version":"1.1.1104-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"029a9bcfccbc075daa2bd1541ccfef2329130702","_id":"meetup-web-components@1.1.1104-beta","_shasum":"4c73b0132a7bac5477f5eac388481d12518fad28","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4c73b0132a7bac5477f5eac388481d12518fad28","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1104-beta.tgz","integrity":"sha512-O2BqGLCbgUYnoxTDkkONUWQgzSyFYG5S+L9KY7pTIGq+SbQ03gMTrZT2ejN76UFF4zF+FRyHkzph1FqPHi3xrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWcwsLhQ7+TgWwFHgMw+5jmCY6f7vokOjOdLTMyNdyEQIgMVeST/9dcIM8zMWzc3TrzmTj70HrqqtsUPym1BE6N3I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1104-beta.tgz_1501274819649_0.39746008161455393"},"directories":{}},"1.1.1105-beta":{"name":"meetup-web-components","version":"1.1.1105-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"a2f7c44da7cb951733832d4a69ec95568fa393d7","_id":"meetup-web-components@1.1.1105-beta","_shasum":"f856b5e46e95a2d10d64aec551d63a7a14ab7a9f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f856b5e46e95a2d10d64aec551d63a7a14ab7a9f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1105-beta.tgz","integrity":"sha512-6R2KkwtP5CdSgzeUbWi5E63dsIJ3UxbNngt8oD8B8XyrrJbZBC14wRFPntDdEUaqffcL2PzNxR2OaslEUTizBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRi93+2A7nyHNNYaYdVl98WxgK+ahyU1sSEKyoQH7z+AiBxnCmUM6Niy3IIXTeDjwhW0KEILW27JWPR8zaxHpKJCQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1105-beta.tgz_1501509450488_0.1513819086831063"},"directories":{}},"1.1.1106-beta":{"name":"meetup-web-components","version":"1.1.1106-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"b58daa3bb875579dd5bb090c22092849013c1791","_id":"meetup-web-components@1.1.1106-beta","_shasum":"f45adf8c13234d376e9655aa7f0608e3dcd0b8b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f45adf8c13234d376e9655aa7f0608e3dcd0b8b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1106-beta.tgz","integrity":"sha512-s+aHrHGORYdDovgEmb3q20o3L1lKknKb9KQvkTI9N+EuCW6SwDQm+nfVkbm2zBWKeumqCs1g3wGg+sAu+hoSJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHMlhSBhAng+sN/306G4S8wyvHGutYuddQJCXyA9oiMAiEAx0q5RuX9/KTiQp73RnO3rNAFNga9htRnz2WlVIwCJKY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1106-beta.tgz_1501509497014_0.7104875175282359"},"directories":{}},"1.1.1107-beta":{"name":"meetup-web-components","version":"1.1.1107-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"a9851236b91a577aa70fc602319c4a2893677f6e","_id":"meetup-web-components@1.1.1107-beta","_shasum":"e6a5032ba97e63cb332abf1b56c9782dedf01968","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e6a5032ba97e63cb332abf1b56c9782dedf01968","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1107-beta.tgz","integrity":"sha512-FN9F1nrrAVGR3k0V/GiWLS2yp38mDsv18i39huZDos85ZWS9qPbBcpp9rw132RBY3NiRXaWI47zvrF5HZN1ImA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRqwl2nYllMrcbjY21VypA5BHSqTvPIfNZ9R+EMGyzGgIhAJZzF4rPD9biHzvUp4DCSl8B4kTc+ddITYAmcylk4/Ku"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1107-beta.tgz_1501509981965_0.1080949769821018"},"directories":{}},"1.1.1108-beta":{"name":"meetup-web-components","version":"1.1.1108-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"1b23cb53a224e39a48de5865b727166efd50bbd3","_id":"meetup-web-components@1.1.1108-beta","_shasum":"a400cc381472f7f80c43ed92811a33354f8f60b2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a400cc381472f7f80c43ed92811a33354f8f60b2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1108-beta.tgz","integrity":"sha512-VI+LVyJWCet7yQkMz3JEEmQomPzO5gM69+089d/01AdaHSDLBENegK2Hevm/W11lGpLUuBkEzw+DesYhTgOWWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWCluehuq7GWKZOKYhm2/ZSJP1+zQKodB48fYk81jOdAIgCQhKwxnUMbTqzbEXLpyLNKS1awHqM+AY9YEKDk8M/AA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1108-beta.tgz_1501512471731_0.18432328873313963"},"directories":{}},"1.1.1109-beta":{"name":"meetup-web-components","version":"1.1.1109-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"dd1bb3e68e117aa28557a14ed721269bb0d24dc5","_id":"meetup-web-components@1.1.1109-beta","_shasum":"674ba98c3c3ab1e494137d55f043de58209fed94","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"674ba98c3c3ab1e494137d55f043de58209fed94","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1109-beta.tgz","integrity":"sha512-3JvXEgTpD9qTIbA410PJln1jhR2dFO0KWk1tUAJnCfNgVQREpo/f5dZFsYCmhMvhNr+lT0EUZkgGe067jXoL/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICFA5z2f4qSzW+lCIW7mFZWmYnBYNLoDEO6lJB2j20wWAiEAmh+lo+JLmx9/Y92Pc3HhK/8allMD0fjReyJSiFdCecs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1109-beta.tgz_1501513021673_0.6210921418387443"},"directories":{}},"1.1.1110-beta":{"name":"meetup-web-components","version":"1.1.1110-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"b6e8a797339ae45bf1ac83adbfef0c0ee867f3d1","_id":"meetup-web-components@1.1.1110-beta","_shasum":"34a691813162c9c945a7c2aad435147f2dcf7b9f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"34a691813162c9c945a7c2aad435147f2dcf7b9f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1110-beta.tgz","integrity":"sha512-DMhsPomMHqpvMceCah0vahfHf/Uitbd83BB2nI5aWSyuciKs0fz8sUztA8axqAtNp9H72jf7cn+Ax4oV+9GI+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr+sAqMGT6StJxvPydwVUbCsEM0b+jvPpikksdGmqI2QIhALWl9lqxR41IcTi43UBweGGPSuXlbZo/e+h0nszepniW"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1110-beta.tgz_1501624732672_0.6762694821227342"},"directories":{}},"1.1.1111-beta":{"name":"meetup-web-components","version":"1.1.1111-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"c3042007a661aac7b14a6e4981b2a44627a05a35","_id":"meetup-web-components@1.1.1111-beta","_shasum":"4eab5bbd885164e5e1520abc5ffe37a896af88f8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4eab5bbd885164e5e1520abc5ffe37a896af88f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1111-beta.tgz","integrity":"sha512-dphO2vxBlZfXd1WhEsWGabVhBoS2qo07wxcAp+/yqisz07k5udx6z1gBglWIToOctP3SP4WIEFguSUK535oaJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCx8O01S/90+I93jOIqDpl00iAYoIEG/US9mqoJ9yK30gIhAIP9adNKUpRuBu7Y+70McZlqVKQl1YifVg4FzNy/AHSv"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1111-beta.tgz_1501681235781_0.9169085843022913"},"directories":{}},"1.1.1112-beta":{"name":"meetup-web-components","version":"1.1.1112-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"cdea9a887c4f96fb4d61e8b9abd47a93841ed229","_id":"meetup-web-components@1.1.1112-beta","_shasum":"8126fc1bb2a20e96c7133ed82e675adbed620720","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8126fc1bb2a20e96c7133ed82e675adbed620720","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1112-beta.tgz","integrity":"sha512-J3gW3mYSSB8kzhEt3QlFEC4yDTjwMF2fJUbyAFG8qWhnE90tf0uurPgOxDs+IW6on7Kt74L4W9c6hSJhVl9slQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7WTgBD1Rb0LnOYa19gB56+RJxiRRlDCClrZAHaflKKAiEA2ArdLdJZxiUjJeFuM85D/Y8zX4SiSW2MNlL3KiBAQlo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1112-beta.tgz_1501682931666_0.42523480276577175"},"directories":{}},"1.1.1113-beta":{"name":"meetup-web-components","version":"1.1.1113-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"4a895b12f478abd3c5cfcc9a051079487eb02430","_id":"meetup-web-components@1.1.1113-beta","_shasum":"62259305c1ea7990ed4242f7b8becdfce48bf881","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"62259305c1ea7990ed4242f7b8becdfce48bf881","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1113-beta.tgz","integrity":"sha512-3CfXm4y2eQtsEvT3t7X/pjX5YkOHvVWxmxBhOa7D4qxgPwdI/KEY0qhs3GCaWf6R7w9vCXot6U1En23TT7+RrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCALLf3RVAhtzL9RN5o/FyIxAwvjNEgxwdkL1nHPwh8cgIgEjBIwqYH3vLAnrpsN/CTUgBGVk/rauK8TFbcuJS9Q0E="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1113-beta.tgz_1501690038810_0.5903141091112047"},"directories":{}},"1.1.1114-beta":{"name":"meetup-web-components","version":"1.1.1114-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"2696ed8a42539f79cc22c6eb52434dbfefbcc1c9","_id":"meetup-web-components@1.1.1114-beta","_shasum":"924f12ba235bc94efefacbb3605b58f3092ae208","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"924f12ba235bc94efefacbb3605b58f3092ae208","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1114-beta.tgz","integrity":"sha512-VUXd4WPCcMf1jMiTBGj2nrlwNA+P91r5jZ5qvpoFcsn4+auzMAtIEoQTxAWYn66F81bcGcqDSFb2dARylcS8Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0EEElx3wJVJiOEJpwb7OrbG1xejXCRRiDrRVWKrGMcAiAcSYnls2MEbiGk5APquL+/1/clCD0JIpKiH3o2ILjUXw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1114-beta.tgz_1501691166067_0.09165407344698906"},"directories":{}},"1.1.1115-beta":{"name":"meetup-web-components","version":"1.1.1115-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"a0996b5ab9a84ed920504eb145f130037909f336","_id":"meetup-web-components@1.1.1115-beta","_shasum":"eae33fce54895ba3aeee5b1c9dd95d83948f2679","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eae33fce54895ba3aeee5b1c9dd95d83948f2679","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1115-beta.tgz","integrity":"sha512-bHp4tG2VqrAKAU67s3GqTI1JIbrE3V+ZKhJdKbjNCZD4Y3qi+RdL8vq6ZzW3KqFVp1VUauMABfPbuOllCKhG7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNT/eDG8BbzRUXVzAJva2RXGTU04bHkc74RDXGlLN18AiEAtMA4ff6O+IIBio7912YXdZ5WRnRv/ufIJ6CzuMf1cAM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1115-beta.tgz_1501691543239_0.5367706581018865"},"directories":{}},"1.1.1116-beta":{"name":"meetup-web-components","version":"1.1.1116-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"15ca2139b352567121676699265e519a9535aae0","_id":"meetup-web-components@1.1.1116-beta","_shasum":"b019d176c6c5ae6f7a6e024f6c7b8e0709c8687b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b019d176c6c5ae6f7a6e024f6c7b8e0709c8687b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1116-beta.tgz","integrity":"sha512-yJcZWhbqB/94t/EOcr/YhQnJK/tU4IAATBWnWlygYcvKMB6qV670MjF1LGZsJ2K3V3ibffICAmE/iY4Yq3MWQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFglWCHbp8d7wvrmVU5CRAbjbeHe6ATF56onNU4CVPeKAiA8RNBxo62AgUUswuZSO9IkrXboe8mbI6tb0bdrdmtoUw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1116-beta.tgz_1501696703027_0.8068475190084428"},"directories":{}},"1.1.1117-beta":{"name":"meetup-web-components","version":"1.1.1117-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"6e348b52d596858e4ce5069cf97c8eeb09e348a7","_id":"meetup-web-components@1.1.1117-beta","_shasum":"b52703dbc256c718b00903a0f0c49ae9e68dc41a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b52703dbc256c718b00903a0f0c49ae9e68dc41a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1117-beta.tgz","integrity":"sha512-l2tIYCJf8SEDEapMq4YhEVBvT2+r8qJwsqBbFfJsDxTdd9JRg68vIZQSroBGXYhhgQNMxrE/n/hE2OoE9DnJHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMXvaXdGEE9ycXBnDXiuY3tu6EGN5mhlmWk6FqMlv2igIhAMfBxSbx3OKsE4f/GfOQYXQBTO9IGCLBRdLnMc8hnnjo"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1117-beta.tgz_1501706288649_0.6298150038346648"},"directories":{}},"1.1.1118-beta":{"name":"meetup-web-components","version":"1.1.1118-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"06a33a2e05cac80d959e148983a5ccffe8e7c23f","_id":"meetup-web-components@1.1.1118-beta","_shasum":"28b9d1184bff5e5bdeffc207a326ce1fb07fb374","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"28b9d1184bff5e5bdeffc207a326ce1fb07fb374","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1118-beta.tgz","integrity":"sha512-xdbIxa0TkyzRUapmjanCd3o1bLGxq7shiwtDdlGFc13coiQxMBdDoFl0+dNlwGN03F6Hc5bqw8ek4HEPap97dQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDb65laoZcRtCjtsj/tAnVKuQkP5WB18XwDhG3Me9U1TwIhAN3fMIfrUU/DzzfFWWlitSsS026pqF41/xJF8cu9FtWU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1118-beta.tgz_1501713321392_0.6984652518294752"},"directories":{}},"1.1.1119":{"name":"meetup-web-components","version":"1.1.1119","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"8c62ed12dced46ee48c5b277629d623b5792493d","_id":"meetup-web-components@1.1.1119","_shasum":"a3ccd409caca0900960ec44046106b4f4403a2b9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a3ccd409caca0900960ec44046106b4f4403a2b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1119.tgz","integrity":"sha512-N10WDTHNvOyO2Ck7jRcYA8T9CxpJmTRx9S9G+TH83rMc5N2QR/A5hOK+npl22W33vltbY4720yBmZVk83quPRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp3ulYuS03ZQOgsGCvN//F/m5IxuTB9hCgz5AKP2yz6gIhAL1LpQ2Uwa19LS0jSg6v94V2pauIS6ImVM3dheJ7FgZj"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1119.tgz_1501864419357_0.38368544913828373"},"directories":{}},"2.0.1120-beta":{"name":"meetup-web-components","version":"2.0.1120-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.78","webpack":"2.6.1"},"gitHead":"9817c5ad27339db5db39cb3b7ee6832ef2ffc55f","_id":"meetup-web-components@2.0.1120-beta","_shasum":"95b60be03f07fa22ab3263b84df46f8762f9fc6b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"95b60be03f07fa22ab3263b84df46f8762f9fc6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1120-beta.tgz","integrity":"sha512-xI2loRzwqcL7JGgIpOqYoGi8D3SmRw1hnDUTkrgREsCjnJvuX1vHHXstpQRBtI9UO0kUMbrY4PJAvWe9BP7vDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBuzPvxy/Bg+m/J9gRJjIhN9PPW2eX/grhqXn7VmvQPSAiBJ42sClEoTTLQeYVH6o2kHA2bn0J0tkzP8VLGQW608Ww=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1120-beta.tgz_1502061875339_0.3228492883499712"},"directories":{}},"1.1.1125":{"name":"meetup-web-components","version":"1.1.1125","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"b9af51fecff75d415c450112114e191d5c7fe32f","_id":"meetup-web-components@1.1.1125","_shasum":"21427b69eb3e8f58025e96420f7b32448ba92607","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"21427b69eb3e8f58025e96420f7b32448ba92607","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1125.tgz","integrity":"sha512-6hanY7jzVFmTHh71bR1HmIaRyl68zPx3gRqdCprEgXte2E37mftC6eFut9EdpNHAfztbl7YW50PB0XQLyB0NoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDtnWG+YrLMf11GDw7TGOMxr75bBurVkO2JLalmXYUOAiEApz06m+dO8ZewCkk2bwrUoMZ3dd93HlelnyVPIA3hWY8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1125.tgz_1502109189461_0.8349715434014797"},"directories":{}},"1.1.1122":{"name":"meetup-web-components","version":"1.1.1122","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"1c17228b32ece22f3bec03d061b88f552f699445","_id":"meetup-web-components@1.1.1122","_shasum":"d5051a2ff7c383b18381634c5784782707f4e17a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d5051a2ff7c383b18381634c5784782707f4e17a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1122.tgz","integrity":"sha512-34YbHq0IvHbCWwM1tA+9KUNdyBRzUBH+o1uf39882B1fTowyrAl6pcvsH5gIIlcwNoxCR8f39BU4iXLwgZ9uHA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHehqcLSrv30Ed67usWvrYqn8jW/Y8hmrAKP0JfG4RSuAiB91Ga9Il9or1oeDIWW1z3OW8C0B7blemWSr49uzciOZA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1122.tgz_1502109266286_0.3106438806280494"},"directories":{}},"1.1.1121":{"name":"meetup-web-components","version":"1.1.1121","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"69c7739bc8ced016d16f4dd378d523a224b10502","_id":"meetup-web-components@1.1.1121","_shasum":"cddb03aeb0409143e8d638dc34265160865c55fd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cddb03aeb0409143e8d638dc34265160865c55fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1121.tgz","integrity":"sha512-+U7Q1wLcT23/7FbBNGNeGocdfAPFACRpP4ph0Nj4HNxiVO4nT8BeR/K+vd858zyO8hj4Q1dSR32WyKW2o4s7cA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCahRto4jbvZIf8RGMXe78EuYnu3Y4KCJCIYpzHSQ6b6gIgfwdgrdnBWovvGH55CnfRighc0V2eM0/64TvyFKbfo14="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1121.tgz_1502109423284_0.012922016205266118"},"directories":{}},"1.1.1127":{"name":"meetup-web-components","version":"1.1.1127","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"debba06182a40057d04081b73152bb6456f85fe8","_id":"meetup-web-components@1.1.1127","_shasum":"3c71d221c40e4fa3502b4f89da54b144304dde92","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3c71d221c40e4fa3502b4f89da54b144304dde92","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1127.tgz","integrity":"sha512-fqz7dh4AKYG/QXp1XKJ9rDbGaPzXt5xRNz+gPrAb43W5l+gFbxMJVjR7ysjvOZOJeihFjOGceJf+3EYCFhUPZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/m53nRTCPrm5muWa7lTxF9Z+wqwtymkJqaLT50qbgCQIgJWf+0sVPH/0XAE1WgbsTEczT7H/0sbNqx2D4z0R22N0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1127.tgz_1502109453004_0.9165385505184531"},"directories":{}},"1.1.1123":{"name":"meetup-web-components","version":"1.1.1123","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"642a9c87e961799fce9cddcfe31ff4ee02fa1008","_id":"meetup-web-components@1.1.1123","_shasum":"ac7813c1e8fd8537ad932afc61bb74779e63f646","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ac7813c1e8fd8537ad932afc61bb74779e63f646","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1123.tgz","integrity":"sha512-u2TziRklD0upFh8mqGR6zo7mndYFqcYdxxibJcF5+NJ9Q08XpIJ+wPB62KG0EZVQ8NojAE8tuUcpMCmg4hGoAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaMtH2se7xTDdn5gRUsYqdSFbwoElafyJGDkPKBI82bwIgECq7WNORFzr8Hle1cWA6cTQM/hMy0x1BuX8spSeYzBQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1123.tgz_1502109652346_0.6132328344974667"},"directories":{}},"1.1.1126":{"name":"meetup-web-components","version":"1.1.1126","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.62","webpack":"2.6.1"},"gitHead":"d1bdcbe3d84b9f82646b418003f6eaa13ab5ec8f","_id":"meetup-web-components@1.1.1126","_shasum":"310d42b318bf4ca05c590598d53235286e78ddd8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"310d42b318bf4ca05c590598d53235286e78ddd8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-1.1.1126.tgz","integrity":"sha512-1c67BCOaoo00fFdALS4o0/U7ZSmC3REnDEY9WV+FFu9zCVCYEjdKVENsClH0BVZwmYOFJrtA836XgFoxZr2/Zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBCaaKqMTEwnUeDJVsck3z499dnqtpPGASxpRhBHvBKAIgNKyReJBcDq7aHylBVHUu3N2SiSY1gp9l+dVN2ldvG64="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-1.1.1126.tgz_1502109897605_0.6623265019152313"},"directories":{}},"2.0.1128-beta":{"name":"meetup-web-components","version":"2.0.1128-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.80","webpack":"2.6.1"},"gitHead":"53d5b2e41c2e64b3497790edf291cbf27b1bb861","_id":"meetup-web-components@2.0.1128-beta","_shasum":"5de3fa3d729d3e3f364c742018be906f45dc3f65","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5de3fa3d729d3e3f364c742018be906f45dc3f65","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1128-beta.tgz","integrity":"sha512-hSbCtUFEscc1uofngq+JjILqTkHsx32P9hrt6WMCJvfvXHiQzLfCzshFuH+fzh7yZlICHUZuhhYysJGxfWg8nQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFMxbap5x+/4z2oj5Pk1nB4DxzLRTQo5fteVUtiFe3J9AiEA2nOOmgnCCimFCw55dlRaCcUOhemslJ1DnWHm2nkEDY4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1128-beta.tgz_1502127850433_0.6090002441778779"},"directories":{}},"2.0.1129":{"name":"meetup-web-components","version":"2.0.1129","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.80","webpack":"2.6.1"},"gitHead":"f530abf6caf9fd341be41c0f5a2cf60651090234","_id":"meetup-web-components@2.0.1129","_shasum":"3e5913c498f3fc180010abc573bb15f0baeb4f97","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3e5913c498f3fc180010abc573bb15f0baeb4f97","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1129.tgz","integrity":"sha512-zl5XhHfBT7kdtYjLM9bAjtUT4cr5/YENpyZLQ3vHNEjxFRrFCkJkdU/DwZhW5KNA+qcjwotoDdVM0OPQCyJCmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKIVaa5ljIiukKTX4Xx44CqlljwFIX5gnscJhbEKeN6AiEAi7d6yRBQucLrOtZwMMtLLTjbRy7RAiIuw6xIsRZdiM0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1129.tgz_1502128351353_0.48330545821227133"},"directories":{}},"2.0.1130-beta":{"name":"meetup-web-components","version":"2.0.1130-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.80","webpack":"2.6.1"},"gitHead":"af7cd9c576a94b54b421c6f872e090c70864165f","_id":"meetup-web-components@2.0.1130-beta","_shasum":"1412c7eb86ddb5bd26f1aee153a6c4d28a73b49b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1412c7eb86ddb5bd26f1aee153a6c4d28a73b49b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1130-beta.tgz","integrity":"sha512-ut38kfS6In9I6hF5SILtRdA7C9zPiDdCTFEZOsYCBX94IVSvXzZmYTlQOKX7hZbTV2aCk1gr7Bhrdjus23VVNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC0EsJVc3syu/1AVrpsKjCBfZqSyOBJwvZmPUsZTKzWXAiBkqGYzpk+m6ZbwuLWpyr9VQnaWc2O/sCwdDheWd9t/Ew=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1130-beta.tgz_1502133077454_0.3327712353784591"},"directories":{}},"2.0.1131-beta":{"name":"meetup-web-components","version":"2.0.1131-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.80","webpack":"2.6.1"},"gitHead":"a2d78ca6c65a758dc807adf9f6cab1d77445e21f","_id":"meetup-web-components@2.0.1131-beta","_shasum":"de84f207c6835b4ac217831ec1971ad836165bce","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"de84f207c6835b4ac217831ec1971ad836165bce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1131-beta.tgz","integrity":"sha512-jwI1qOTwy/mecAY6ZJK4DfNgDUZmdM2Fjzfdw3dJRdvcKDa18qV9WwlvEjbRzKliP3YDs6A81cL4tmrYnM5uKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICg/LBw3+g0LMQOmzPV7t9TwMpIahJtQIgw2A6zPyiCgAiALicIn8m8Bnyl/DlXx+hVIYtqO12Ry9h9BqPmd8D4QdA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1131-beta.tgz_1502134817138_0.00001715240068733692"},"directories":{}},"2.0.1132-beta":{"name":"meetup-web-components","version":"2.0.1132-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"4092cacc35726a2f0eb26329dd5deef879e47d31","_id":"meetup-web-components@2.0.1132-beta","_shasum":"a60f393bd49135937184cde4314893e123e524ea","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a60f393bd49135937184cde4314893e123e524ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1132-beta.tgz","integrity":"sha512-x4x/INcyJJI2aziLIr586+CmF2Mgj+B90jaEI1ZQwNrWxZIA4P7ymep9K+imfSq4H3b2rO8fVv7Vqmf+GN+OKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEZK9dBfNsFykTMtExcfOY94U/Z5iMOIwTsJ4SZBPy0TAiEAhIJ8fgRWza4xFFe4ZCQpKHLyczfoN7um9EoJ9tlG2jY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1132-beta.tgz_1502206262434_0.8598337271250784"},"directories":{}},"2.0.1133":{"name":"meetup-web-components","version":"2.0.1133","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"34fc9d13cf8fd74e4df0aa2dedfb63e85e0a38e9","_id":"meetup-web-components@2.0.1133","_shasum":"85d6c0e9431e1984582a9fd70aaaac9af068a0c7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"85d6c0e9431e1984582a9fd70aaaac9af068a0c7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1133.tgz","integrity":"sha512-Gh+y5VU7cA46m4JUkp1Web+C502kWoGLrelrro1bjHlzOu0mptQKzyfEQwhhIdk8sMI737hZcrtfvHj7/fW6Xw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHkHHoBNJXFmSZRajpws66zu6N1+IQxKooC+41U1domXAiAU2uT6Z5RbzloNe8FFbu7ItT9ekqf59cASSaqmaWFWLQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1133.tgz_1502206573101_0.36759738391265273"},"directories":{}},"2.0.1134-beta":{"name":"meetup-web-components","version":"2.0.1134-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"5206112c06740fe470bb03e85fc49d6f0e9ebce4","_id":"meetup-web-components@2.0.1134-beta","_shasum":"d9712c084b27ad68fbca9067be012a7f0bf08d30","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d9712c084b27ad68fbca9067be012a7f0bf08d30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1134-beta.tgz","integrity":"sha512-CLwg3SmFdTKcPwAATbTcd7iIS2cd+ryWgn1JCcqU8R6boRy8j3s/5Clq8Z1J2hxzH92wNuPE3WHeD/FwsgoHag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID6CbMiqP/x/qWJeLxkVS95UhNmz7Y6PFH2D0xd7XBpXAiBoU0Qx2lSzgbfTUOfp/dBe1l4zePktNJiuTmUVJOePmg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1134-beta.tgz_1502222855252_0.5021003750152886"},"directories":{}},"2.0.1135-beta":{"name":"meetup-web-components","version":"2.0.1135-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"d2955162d833de1d4f02447b375cbb9034bb32da","_id":"meetup-web-components@2.0.1135-beta","_shasum":"f59fa96b79428b95154ed8649f7af4f4409203d1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f59fa96b79428b95154ed8649f7af4f4409203d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1135-beta.tgz","integrity":"sha512-hIkxFI+LYdw55c2FVkrA/kHNAWbx1zQHsiHUO+UOKMRNiv7vActjVxyuNz7vabKdiYAXZnqwrue6/4HA2OE09Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx1s85riMETWc4lcfLJvegNJaz506+AKly2NQ9rLGwUwIgSr4+C/u5Jr5tKAp7IN9Y2UnN6h9vUf3Vob7Q7PZb3po="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1135-beta.tgz_1502228232591_0.6642258265055716"},"directories":{}},"2.0.1136":{"name":"meetup-web-components","version":"2.0.1136","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"e5c3ffdd36fe8b891a6e2a7c698d6d130e71b0d0","_id":"meetup-web-components@2.0.1136","_shasum":"5898931375e83d712114bcd5d8f81cf61a737185","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5898931375e83d712114bcd5d8f81cf61a737185","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1136.tgz","integrity":"sha512-Lc56dG/JgQqHvMPCJdr5el1IVjNg/urqPaBOLXCFPVBu+uJVM1UQ9efyOvkwVbUvJ50AHnIKiEjJLeQ/948NeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbR517iq8EzWrPmw2o8NSKjI7rn3fi635WUDQ26gXSrAiBL4OkplEiM4kHWXBrw5B9spEKA2CFm55MdZlaBKQF8Og=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1136.tgz_1502466425679_0.5168380176182836"},"directories":{}},"2.0.1137-beta":{"name":"meetup-web-components","version":"2.0.1137-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","react-redux":"5.0.6","redux-form":"7.0.3"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"359ed8ecfc7aadf626fe0312496d16e83eecfcbe","_id":"meetup-web-components@2.0.1137-beta","_shasum":"f2f52429988f1867724397e45362d1486f35b714","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f2f52429988f1867724397e45362d1486f35b714","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1137-beta.tgz","integrity":"sha512-3UQxLvJRrbAma9iFDcC5FaUTeCArqkXROlEDHzjWSI3lITLdSXPqkVZw8Yf510G+3W1bvCvETg4EyRFxhMyp6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1wL9ILKiHjpPV+xcdG5ROT5p6a7wze+Ujc++3b5b1SAiBER1bUGtey9oIu9+gvZuylia6Jk66UcxeF2Tw7uJZCiA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1137-beta.tgz_1502484612102_0.9061241028830409"},"directories":{}},"2.0.1138-beta":{"name":"meetup-web-components","version":"2.0.1138-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c815ab86fe56aff809dac5f92b071279e62a938c","_id":"meetup-web-components@2.0.1138-beta","_shasum":"48d07b7e54e9da674f324e40f69906ebcf7feb6a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"48d07b7e54e9da674f324e40f69906ebcf7feb6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1138-beta.tgz","integrity":"sha512-hMTcvQtJZJ6VpLAmwp6YEiSyO7LS1G/ZQqV2wPbUOLqp81wRF5HM0+yWq6sfarlxzAjsB7NpJI36kpofbNazPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3pGDxdyDqt2//R72ibp4f94p0FVMaxqflwjBwFbHD6wIgF2H4N8PYeOBxJUpo71wmARtTGL5SBQMuU9VShzMrlZE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1138-beta.tgz_1502487011898_0.6312865542713553"},"directories":{}},"2.0.1139-beta":{"name":"meetup-web-components","version":"2.0.1139-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"dfd3b50755b04e22350291a0fae72f083833590a","_id":"meetup-web-components@2.0.1139-beta","_shasum":"7cb6c278e6c7401cccb65a4e5895550cb0e1fabe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7cb6c278e6c7401cccb65a4e5895550cb0e1fabe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1139-beta.tgz","integrity":"sha512-qYX+vd04XhI7w88Gf8IvWdYxPFRwrWRK//q14CPNbALb4Eq/VImQYhUh13S/NmytOjRgPifGHF7mMPbxOYLCuw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8HLP/E1OqnjKuVbJA7wxtjzb3hmr7aWqdURlO77/lCAIgffAHOatfu8SBkSCBqWC3H7oLy0WhVaY735775CeNSms="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1139-beta.tgz_1502487293290_0.7678463361226022"},"directories":{}},"2.0.1140-beta":{"name":"meetup-web-components","version":"2.0.1140-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"bc0f9055dff84463399077e8718fa7d1d8cb2a82","_id":"meetup-web-components@2.0.1140-beta","_shasum":"d24c23587beb55d6987f5a16984ff7bc1037a75a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d24c23587beb55d6987f5a16984ff7bc1037a75a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1140-beta.tgz","integrity":"sha512-OvXNOe6wYe2f907jxRqCykVT0djdOfZ2VgPX+ANmc0Wp0Gz3rVR1C/J94u/3jMBuYl75nLPDnUvNNwC5JFx42g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzAtEdHc9WBUO+CwhdcgKP/IbNq6TKIjPQ4wP8ZNXNIgIgXz77478Wzt+PtRiHlK9dobT01qni539/Dt+zslWIhA4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1140-beta.tgz_1502488289914_0.48875417513772845"},"directories":{}},"2.0.1141":{"name":"meetup-web-components","version":"2.0.1141","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"f12c835008b4cc6307b65009e38f589dcedb8418","_id":"meetup-web-components@2.0.1141","_shasum":"a478cfe63f02ca18de51384f3bd9906828a2a3e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a478cfe63f02ca18de51384f3bd9906828a2a3e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1141.tgz","integrity":"sha512-6xjfJxFNFX1NaugmkKXgBcYpv+zGCiXaFwm257Ohc8wYIbsAo+gJuO5NHVv8gnvYFcXPkiG+9JiL5LL5tX5CCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDM4UaI1m8Oehm9dLC4u8xhFnghbOSEESJxdkHp9c3UMgIhAJj4A8eYS4FUG7h28jMxRPQGfRciZGnUqa7p2TYp6kBO"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1141.tgz_1502667200390_0.5623492863960564"},"directories":{}},"2.0.1142-beta":{"name":"meetup-web-components","version":"2.0.1142-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"bed6472a516fae66405e90b4866871a312253044","_id":"meetup-web-components@2.0.1142-beta","_shasum":"76d0075361c12a2a46352831d5fec8640e0cae45","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"76d0075361c12a2a46352831d5fec8640e0cae45","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1142-beta.tgz","integrity":"sha512-GhNAFO0EnB2a+X+fkN4gK4Hvcn4PqgOLVsU5LYQ95IxeS6vltMTOQH8d0aIDl+kHY+Kh4hm/J80kOOvM1FSaOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSOceQSSU4mchpfV4PC6n3ExITpqeCWB16gkxKKHn4mAiEAnVUhlr8WTct3m0d5WYXrVSirQvw8VYPtaFSa944Hcno="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1142-beta.tgz_1502727202061_0.7377435041125864"},"directories":{}},"2.0.1143-beta":{"name":"meetup-web-components","version":"2.0.1143-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"15.5.10","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-redux":"5.0.6","redux-form":"7.0.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-redux":"5.0.6","react-router":"3.0.2","redux-form":"7.0.3","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"30f55723c62f97ee89432ad5fae7487160f2f912","_id":"meetup-web-components@2.0.1143-beta","_shasum":"638f2293c0e5b1feea2466d48cbfd0a1877517d4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"638f2293c0e5b1feea2466d48cbfd0a1877517d4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1143-beta.tgz","integrity":"sha512-FAzR4AT10VD1VuXptRuJCWs6rDXuPEITbDpOT8F7XJxJg7lICDBRN+JlQYUykTQBMlkgnMEIWvaVijjyB1Fm9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQdiBdvAenTNW+3NLQXul7Sicyqa9TUZEH/Jdp9C6TQAiBcXATyd0XUptkLRIuXB2Mt4tjfJYEX0f7pQfrKZJnulQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1143-beta.tgz_1502728545570_0.4437651459593326"},"directories":{}},"2.0.1144-beta":{"name":"meetup-web-components","version":"2.0.1144-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"15.5.10","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-redux":"5.0.6","redux-form":"7.0.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-redux":"5.0.6","react-router":"3.0.2","redux-form":"7.0.3","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"f7b08e734a737435523ae90b3d4a045ea4c06832","_id":"meetup-web-components@2.0.1144-beta","_shasum":"9507087cf962cedf88086685b0e2ecc7b23dc00e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9507087cf962cedf88086685b0e2ecc7b23dc00e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1144-beta.tgz","integrity":"sha512-2pqBZDdwrtJMs7t1dRre7KxI1HHQCs5eH303o+znXLJa77gen1wk2zyfdi0/xATCf3cGNaMIc5F3b6gNLyDu+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXLGfVWj5bRVbIP5y4cdYw9/+KtAYj1pXzdL4D2Eg6DAIhAMTKYrHL7dxr81WnS/yWoKQ5XBMCJde6mYfZbLWFxrek"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1144-beta.tgz_1502728779729_0.014510618755593896"},"directories":{}},"2.0.1145-beta":{"name":"meetup-web-components","version":"2.0.1145-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"15.5.10","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","react-redux":"5.0.6","redux-form":"7.0.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-redux":"5.0.6","react-router":"3.0.2","redux-form":"7.0.3","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c0367dc6cd5855a6bb70144a588ea1046708c4e7","_id":"meetup-web-components@2.0.1145-beta","_shasum":"a0c99424a66976dc959a76fbdcb4a494521c7605","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a0c99424a66976dc959a76fbdcb4a494521c7605","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1145-beta.tgz","integrity":"sha512-BYuofWsVpYpaB1Vlf55+YTu+QFfFued6iW9q+E6nOKFzR65GMhP9xfWgyqpJzo5qyAxdx1n0DQ5whN4lN/qjgw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICunXdHQWfShwzhOIaNcFhzVUi9LgggAt8nrtILOd8XQAiEAqlFpieQEyTmXDbaTTLNRwPsfdcCBBUL61trRdkpapkY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1145-beta.tgz_1502729179891_0.08107110252603889"},"directories":{}},"2.0.1146":{"name":"meetup-web-components","version":"2.0.1146","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"1b91e2abd743c47344ba93f08f328cfc06e15dde","_id":"meetup-web-components@2.0.1146","_shasum":"e2dbd93062e69886a1917e8cf0c96b37bf925ff4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e2dbd93062e69886a1917e8cf0c96b37bf925ff4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1146.tgz","integrity":"sha512-iN7eOo+n0gxL+fQHjY+g0ir/DpfOr6kvPPWLyqkil/XfhMJdZ5CyG3RxPELG89VZzXRjqNyDjKt6NMSL1E3qaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIdLKw+jfYZ2tGxdLSMnu8JvdApcfCHTc/q6vfyWpQxAiEAy5SVfjdgTudb5MpJRmceTtJl4yoOEVZyWrFNwYWSF1I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1146.tgz_1502730100854_0.3485301493201405"},"directories":{}},"2.0.1147-beta":{"name":"meetup-web-components","version":"2.0.1147-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","react-addons-css-transition-group":"15.6.0","react-transition-group":"2.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"5908c1c216a4785eaca2faac097494f00fc17ea0","_id":"meetup-web-components@2.0.1147-beta","_shasum":"bbde613f1cd5c6c15029a52af822ce0bf328c436","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bbde613f1cd5c6c15029a52af822ce0bf328c436","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1147-beta.tgz","integrity":"sha512-350GTrL/GaXnOJm7xVLZ56dJ1xWpevIp9bsclq+BHlMuYVvXKVMqBNB3gMvgdyRBc1NNagHWahwsZQ3OilZGzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGwURt4qwUu9iFgvBVBr2wfNgZ98hzxipw2txUbH7dsbAiBxTXSj9qNlnL52ZIWBPGR8oGKczB4hX+qTBVQh1u3xHw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1147-beta.tgz_1502730295082_0.15956832538358867"},"directories":{}},"2.0.1149":{"name":"meetup-web-components","version":"2.0.1149","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"62a56a467e509de388f1ef9eb56b7b9dd9b7ffa8","_id":"meetup-web-components@2.0.1149","_shasum":"ea9208af9dc965a56153dfe949d726c70b9cd887","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ea9208af9dc965a56153dfe949d726c70b9cd887","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1149.tgz","integrity":"sha512-Gd4eHPqDBjCtK32/T25VqTXTAHKb2/zgfXJeM+bRv2A1C+sfF5EVwc9OxVpwbiYGkfWx/W573M2TCAB9HJDFLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHUUdtlr0nfNoZy5KbvDggwae6ygNi6k6+qN9nsGeUZiAiEAgmMfLTzqKc6LTeW1RABvm1hC0hrQ8H8uMPwvdJh31A0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1149.tgz_1502732715912_0.6875485994387418"},"directories":{}},"2.0.1150-beta":{"name":"meetup-web-components","version":"2.0.1150-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c37ed7f4c45990723c357b3fc3c9edf1ebdcb2b3","_id":"meetup-web-components@2.0.1150-beta","_shasum":"46d635d4f8b1408a294990275980856d03aca556","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"46d635d4f8b1408a294990275980856d03aca556","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-2.0.1150-beta.tgz","integrity":"sha512-HuKpZri8YZpHSGvNfXWKv9h/4E+hQJAeHDlDEG3EZ+bLOE+XOR/i5QHBuzDDZzrln6ftvm1jJLev7W2Txu3YzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLYCVurfzFbtHZ+8BYap+J1bCh061uJyBZGfwLkPy0YAiAie0UwePVIiAbf7k/C87yOVNFosswzkkV3du89wtUGeA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-2.0.1150-beta.tgz_1502734415927_0.1752021354623139"},"directories":{}},"3.0.1151-beta":{"name":"meetup-web-components","version":"3.0.1151-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"d5181c5066827a1c80442e6acdb7daf8c92842d0","_id":"meetup-web-components@3.0.1151-beta","_shasum":"1e7d03756d3a8b11b65948be7c085046921bfbd2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1e7d03756d3a8b11b65948be7c085046921bfbd2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1151-beta.tgz","integrity":"sha512-RUzrCthTQNktrI3LtZgx4iWdC2Bc1kqHnYWv90E1AXP0bdnV+2udRPEbPmlAQnBvDO9erENDbkoKz2P+WKZ9tA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAr4inM4r3hvUxR9r8qr2YjdFMMGAcfmOwT3XViluHlBAiAaleQDuP58/y3TxYFiYH94uPM2ECzoICoTl1YYA+y4kQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1151-beta.tgz_1502738546210_0.32459954312071204"},"directories":{}},"3.0.1152":{"name":"meetup-web-components","version":"3.0.1152","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"ee55f969f2e25fd107b634783efb64206fc23ef8","_id":"meetup-web-components@3.0.1152","_shasum":"1c6b8907c969cf14bcf23ad0590bc3400883d89a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1c6b8907c969cf14bcf23ad0590bc3400883d89a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1152.tgz","integrity":"sha512-9vEWp7Tv/jyZhVWAWQob+2l0dHM9uJj6qDVMoLrotnWfJkdRdIi0q4Zb0SDiq3wzoPfwioz++zoJQ+yLlCvMJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfA34cgZskT8S4nGCgL0bTqGa10MRL+cmUEyIfwNhk0QIhAKpqkeLt+VExadb0LMyOYhd22cArGsJ48xj4Q/g7V07+"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1152.tgz_1502740660204_0.22388760070316494"},"directories":{}},"3.0.1153-beta":{"name":"meetup-web-components","version":"3.0.1153-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","react-addons-css-transition-group":"15.6.0","react-transition-group":"2.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"a695b314a000135778a02a1db526f8e9ded37a97","_id":"meetup-web-components@3.0.1153-beta","_shasum":"8bf391145c2b99f0ccb611d3f3f68087d35522c3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8bf391145c2b99f0ccb611d3f3f68087d35522c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1153-beta.tgz","integrity":"sha512-B3gFBz9G4zCnUE0fbnPXfXLxMvWR2Ze/m3gA9Q9WKlAFP2h2xWROVo1QRPg+4GnJa9ipH347ebD1yC9LurIxPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEq5jO+4vjeHCZUoMZCtdCnutlsWx6U7aSlmCRSAz3NDAiA5GMyQmKzW2+J4fx/SuptpNDROfCiEfkcJfYZBEYVtVg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1153-beta.tgz_1502820544515_0.7321011843159795"},"directories":{}},"3.0.1154":{"name":"meetup-web-components","version":"3.0.1154","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"0b1d751d65299d6149cdc793aae1628b17dc8612","_id":"meetup-web-components@3.0.1154","_shasum":"dbbb84db76f4763e6fa2fda1d14cf8e95b9f20a9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dbbb84db76f4763e6fa2fda1d14cf8e95b9f20a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1154.tgz","integrity":"sha512-hAD0aVIAvNnYLEJtVQ4PV0L2SpaFVnInWeI+vsU6MFYiJwqykxv+veM+0wy4hQ8mOLKzcQuwkzPMCZsUYkbysg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEfZHiZKcaiAGfx93l3AkjWiNv7w/G/HRPoKj9cdzJj3AiEAjFFIcQmimRG0761ceT8c0gEk6NMDLbqJyQOKjJhoJrY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1154.tgz_1502822083107_0.47893773950636387"},"directories":{}},"3.0.1155-beta":{"name":"meetup-web-components","version":"3.0.1155-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coverage":"yarn run test:unit -- --coverage","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"19.0.2","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c53a7051fedcc733df6a88ae21f46d401ac71fd0","_id":"meetup-web-components@3.0.1155-beta","_shasum":"c7637ff4e0302364595d1e246af9172f6ecf02f0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c7637ff4e0302364595d1e246af9172f6ecf02f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1155-beta.tgz","integrity":"sha512-6fjzaXmPhmhapKWc2xIiEqZ1DTkOoeynwjejMGXY2uYVSTCRblrDZOvWiTr02kseJ8ewnarslUpS3u52bonITQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG/QOQTjUWVrBJRlljJZ9SEjdEYpZyo/fqkEkan3nhjpAiA+2wWsX/xHAJ/98TZuGGc2L5MMahcjOMTB2w9+21wV+A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1155-beta.tgz_1502824284938_0.6484504125546664"},"directories":{}},"3.0.1156":{"name":"meetup-web-components","version":"3.0.1156","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"6d81b72bed556fd90ce600af38cb50a7794a10af","_id":"meetup-web-components@3.0.1156","_shasum":"724e24c2fc2b090e3812091ee12f68adfc1d1ffe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"724e24c2fc2b090e3812091ee12f68adfc1d1ffe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1156.tgz","integrity":"sha512-IU74eMActAlhagl0G4YK+MLfHZEPqDvvvHXPLWffl7hTjce5E87M2FG4qyipVMIe9MfnGpQPZGayMfJC4rQU5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPj+4YpZ9xWLyfM+n9f9Nw0HmTJmhOB0J20B9zgJL0KAiB9cBRunexlL5jn7aKMlZroTEzFgO1DgHmoVBUi03bcKg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1156.tgz_1502825733075_0.36131464689970016"},"directories":{}},"3.0.1157":{"name":"meetup-web-components","version":"3.0.1157","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"81a7fb6a714fcab8bebdc73bf1b319068fdaaffc","_id":"meetup-web-components@3.0.1157","_shasum":"7134de3da0de96f299296ce19297227412e5c1a0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7134de3da0de96f299296ce19297227412e5c1a0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1157.tgz","integrity":"sha512-RfZQBYWkjgiq2vxszOdtZpqlxB43hTTlMFEHuoKbGLWFd8Q0EvxMLnmZPR1V58NGmwAMv0vx/zmuT7qADfQUow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK0gaz3KNHhPCre64FmGpKCfr4rNANB0EZZW0+2t5S8QIgdquRgyUYk0x2GlbwWuVkogtDjl49xmTh8OYCkBnTeS8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1157.tgz_1502829071436_0.7908428478986025"},"directories":{}},"3.0.1158-beta":{"name":"meetup-web-components","version":"3.0.1158-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"50c381f0e88854061d24f03d86f27b2cc07601b5","_id":"meetup-web-components@3.0.1158-beta","_shasum":"94df06df420ccf572815f0ba7cc8f81ac3477f15","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"94df06df420ccf572815f0ba7cc8f81ac3477f15","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1158-beta.tgz","integrity":"sha512-iuCz4ocLEBMhtGRtUyZuiodXCGshajankVIpCS7oxTTM02v/tyc9bnMvs6rkHCVNbgVooxGFuQj0wxpx6ojsbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCthZk8r24/044YoSI1yxZBAVFouvSpfCyEDQN8UR11cQIhANPgXdRqQTNAenvMykkBBC3xmIh6h0lEEXaxKoo0jMlD"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1158-beta.tgz_1502830502337_0.7757510726805776"},"directories":{}},"3.0.1159-beta":{"name":"meetup-web-components","version":"3.0.1159-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"e936515580f7d990609d57d0ec6c628438d64b26","_id":"meetup-web-components@3.0.1159-beta","_shasum":"346a52fec0edffa6878a7708165ac75ad0dcbc83","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"346a52fec0edffa6878a7708165ac75ad0dcbc83","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1159-beta.tgz","integrity":"sha512-2uIlbeFZce3UIuIHgcag3EcyLUwJHeg75Yd4sscn9VN6jDk4E3lKHXrhMtYRwZ9Ajx6eEw6M27gzYXn4GsNVEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeLX4MtHLhdpyz3nzJ17wtCP3GaEV4p4aQwUqCNPUu1wIgEDVKarLLQQufLR8s/oNqU8HFuNumgukc0DuiWTSHVOU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1159-beta.tgz_1502838872913_0.9301783512346447"},"directories":{}},"3.0.1160-beta":{"name":"meetup-web-components","version":"3.0.1160-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"96a463fc0359ba590108cd5c08b671ea39c5687f","_id":"meetup-web-components@3.0.1160-beta","_shasum":"2a1a064c877ab9345d584209403271ae9b2c0d8d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2a1a064c877ab9345d584209403271ae9b2c0d8d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1160-beta.tgz","integrity":"sha512-LvZEA2KPdvT4U2mx2vJHGx6ILE8+y/m6NnyD8ARyiqtvHbZexql5nLndBc4ZCh7RH+JpMwZQxCNekEaj0SeqeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDuNry8wqE8KLMpMBBtSW8ZZMrr76qQBIhLjA466YeCvAiAPC+eFOWv7PTxlUjNa9WtgZ1TXfsoQOXgKSe2WbnOWOw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1160-beta.tgz_1502899909881_0.9564618519507349"},"directories":{}},"3.0.1161-beta":{"name":"meetup-web-components","version":"3.0.1161-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"ba9e3b0d866c50b2fcd139c5a93d8f91f424aede","_id":"meetup-web-components@3.0.1161-beta","_shasum":"d535a18055565483f49713f66f004c1babedf771","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d535a18055565483f49713f66f004c1babedf771","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1161-beta.tgz","integrity":"sha512-2BUgS4yEHg5yzC4c3Ch9N6iuaaaaoUOf2Vorwmh7qW3p2uUlGI9rZQJ2MwgEhAl3vqqYqvRGMemFXh81z2SYJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDG4GyorEV9JUk1xwnVDqjhQC0/tMVd+F9GkLXdkvIFQAiEAxFwTakAICrBrJK+WYs6D+qeWF3LURYp9MyEKay7O7qA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1161-beta.tgz_1502900388058_0.5674829138442874"},"directories":{}},"3.0.1162-beta":{"name":"meetup-web-components","version":"3.0.1162-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"e5cdf1e20dedec0c10f5e3addc314c876f846744","_id":"meetup-web-components@3.0.1162-beta","_shasum":"8922b995d4325d3cb84aec3d6c4721deacbc3dd6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8922b995d4325d3cb84aec3d6c4721deacbc3dd6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1162-beta.tgz","integrity":"sha512-5IDjNeanUebOS9EBZR9gDdDoOaL/AoL3CPDNG5A1Z3nGOsvYF0Yzbof9d/8Y0lNemyuio1dRK4TUlO31mdLVhg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVjr23KiOuB9a2eX1IP5EmX9snZKg6//WsblX4v5sUaAIgAe8khKHajlPzy3ZgaE4lMKhTIs7a300vnfJTeoqSS2o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1162-beta.tgz_1502900650798_0.4437449492979795"},"directories":{}},"3.0.1163":{"name":"meetup-web-components","version":"3.0.1163","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"a9d75f29075e8bf260baa0c352972d7665622dab","_id":"meetup-web-components@3.0.1163","_shasum":"5b37d9f1f913be9a61a487459ed147c623c506c7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5b37d9f1f913be9a61a487459ed147c623c506c7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1163.tgz","integrity":"sha512-pvBygYhrFfsgRAiXlsH/98LWz4ySKA115BObpkEd/8sJWCz8SwLWa6BL+1Pqs+EHxLjjdM6IXqZygKjpIfux8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICTrrqRiOLYvFFzITu+TOIvuErRQhnN9btk0GLxJ6DIzAiEA3zLqcV/qDl1JUnV9x2aJGyy8omJj2uPQXxEuZIuelCo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1163.tgz_1502900975188_0.6277633542194963"},"directories":{}},"3.0.1164-beta":{"name":"meetup-web-components","version":"3.0.1164-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"d63929aa05b31c27e07e704fcf4f119341f376c1","_id":"meetup-web-components@3.0.1164-beta","_shasum":"c976f5998a96ae634180bc452ad22833e4ae00d1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c976f5998a96ae634180bc452ad22833e4ae00d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1164-beta.tgz","integrity":"sha512-o1JDQ4qN0o6fIeUEV9i/V1MBKChXG5g45TLzMrYAv/N2fZP8xBwgfSoHjKVvE7WnsMhs84iA/7NeCVqlgvjv2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2HA4JiT7qv1/voht/62TVUVgIbOm29BV5Jcre3UxAlwIhAO37TDAp2i1BQ9GI60KDFIP+ln79rx3lFkjbo1ixouou"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1164-beta.tgz_1502912830648_0.8967439385596663"},"directories":{}},"3.0.1165-beta":{"name":"meetup-web-components","version":"3.0.1165-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","react-addons-css-transition-group":"15.6.0","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"6c3a108c0242c1e68f32d82d454559d5d35651eb","_id":"meetup-web-components@3.0.1165-beta","_shasum":"8e685a1bc0256b3b7f0964dbb0914b1e91343275","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8e685a1bc0256b3b7f0964dbb0914b1e91343275","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1165-beta.tgz","integrity":"sha512-0WEO3dDtwkzqLJ2ZpgWC8YkT1e1ZOLc/HJ51mjCn7+cQMWbX+08dxeT/lUqoYVFGpMZ5cSX5z8JdWkjnG9DdDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwVGf4KMcM9gheJvadHsPKlXuX/pMcUfs4c5GLzc4YkgIgJWUMSES5EMBAmMGbVO/YBz67q3fM7mcvIm5jAJgQVvY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1165-beta.tgz_1502984114342_0.3206982414703816"},"directories":{}},"3.0.1166-beta":{"name":"meetup-web-components","version":"3.0.1166-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","react-addons-css-transition-group":"15.6.0","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"6ca356cab2d57c9c9fb9ee9c8e1e9d8ee6df0dc9","_id":"meetup-web-components@3.0.1166-beta","_shasum":"1ebf1a064f36effbf988aa1aa7b67bf3c1e1bbe0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1ebf1a064f36effbf988aa1aa7b67bf3c1e1bbe0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1166-beta.tgz","integrity":"sha512-ES+Cm9kA3+3iO/RbtSits6TZWPbO4ikJAhRVOKfQxEYVKrqJR7fJah2qaYhL+dHEdzGItQAl6QZWJ2ZfzXTb7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2xiRvKhqFOCnr08ZlgR3YE7PVFUOZumUZWbICA3vVxAiAyLsS9MGPLPbkdvvk0x9O+ObYS/JH8fufFWqvA0QDyLg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1166-beta.tgz_1502984458609_0.17438609316013753"},"directories":{}},"3.0.1167-beta":{"name":"meetup-web-components","version":"3.0.1167-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"ed9ca3985632bc0e5db65010f9719e4d7221b012","_id":"meetup-web-components@3.0.1167-beta","_shasum":"0584ad1017739d1191c50cdf6cb187006c3172a3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0584ad1017739d1191c50cdf6cb187006c3172a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1167-beta.tgz","integrity":"sha512-glnOueWbQXynQir+MvVSpj2ty7XpvxA7T3FIG02BAj5pB74elXzunWAUHImrpGfCzYzM4EmvkILNOr8Yv2ADKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDsFVxBGy8JrRXiy+Ax29kHGgMy4ldO84P48wGBqKcZDAiAq33EV9BZHlzCWQR7pAvIkq7cMDe/pXy9V8wT/tFxOlQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1167-beta.tgz_1503348364817_0.32086019148118794"},"directories":{}},"3.0.1168-beta":{"name":"meetup-web-components","version":"3.0.1168-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c872a8b60f1ee3a239a7367f4ab13c9d41b80988","_id":"meetup-web-components@3.0.1168-beta","_shasum":"7a936840d2c2c52c7994b7424a5c2c33e87f5c6a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7a936840d2c2c52c7994b7424a5c2c33e87f5c6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1168-beta.tgz","integrity":"sha512-lLRRPZkmtxlahvWMdK82Numu6HPEEdksWL989Eew31HX8dfJLUsxnT6iHIVRJK1nAX7IVIT9z0ha5VdKVQLViw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwFsETPF2JyiCTvLjZwaz4uFNY0o6WqgLkIJaUUZ27hAiEA4gYn8Yq+SDhxExS/Xkr+8za8NxDSKbd72XWkE126GgE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1168-beta.tgz_1503415177130_0.4460462527349591"},"directories":{}},"3.0.1169-beta":{"name":"meetup-web-components","version":"3.0.1169-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.106","webpack":"2.6.1"},"gitHead":"182f4f168481acce9174c22c62ef44c42c7ab8ef","_id":"meetup-web-components@3.0.1169-beta","_shasum":"bee101bc2cdf7b71eeca0cb1ccc60033072e5ee4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bee101bc2cdf7b71eeca0cb1ccc60033072e5ee4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1169-beta.tgz","integrity":"sha512-nM7mEzJXZR20p+AZJ8f3QKS2I5th3iZrgbKVSFPqrlvignDjAbIxCyt7GWHCkWUsFtMnm9ktvLJQNFHE1og+Tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCSQUPEh9MT1KRhjbjJ704OQ2ykg7gkvXM1CPmiw5JfAiEAroN40AXGleN3NVn9vN2G2Q/3S/yw0vXr7+iOQpedMK8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1169-beta.tgz_1503419859203_0.12627623253501952"},"directories":{}},"3.0.1170-beta":{"name":"meetup-web-components","version":"3.0.1170-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.106","webpack":"2.6.1"},"gitHead":"e7cd00ba9590a50481320b3bdac3d49ec9c986c9","_id":"meetup-web-components@3.0.1170-beta","_shasum":"015b08d46ec841e523d802258c991f176a6f8b2d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"015b08d46ec841e523d802258c991f176a6f8b2d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1170-beta.tgz","integrity":"sha512-e82C5R2240m3iv2awZB+c7SIQqTwq0tUjwnwM2sKLYXGYNArhf0eDZ3sBM5w8tu3BY5Y92tiqXYeuj7cq4gq1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnAN+fitJdlAjICgZe3am6+JEl1t4Ljvh4cDmmbxHcqAIhAIzvEOAfiIBjqBsLRMLMWiF2skjTq7TBW49+sYstWz+N"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1170-beta.tgz_1503419995362_0.6873216449748725"},"directories":{}},"3.0.1171":{"name":"meetup-web-components","version":"3.0.1171","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"138851a7f74db6b72c44a70335252bfd4d969915","_id":"meetup-web-components@3.0.1171","_shasum":"f468b4a930244bf29c1b013a39769f5786f6f22a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f468b4a930244bf29c1b013a39769f5786f6f22a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1171.tgz","integrity":"sha512-VUO0PjltDc8mymBFevbN8uBsp2dD8U5mw5zmvs8NAkMVAx6epd6RCTvYzj4l1zR/vmmSIPD2uPp3mFMlXyzDZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHzfUPVOwCzSw9PSaRaZo0JioaPi2w/v5JP6EJaZeLEZAiADavRlcYOLD5OUfV6goBOMSUM/cn3ap07Rq8yOebZ29w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1171.tgz_1503420898590_0.0705012227408588"},"directories":{}},"3.0.1172-beta":{"name":"meetup-web-components","version":"3.0.1172-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c6d7f5c5fd38e2c8568b9cc8233372f42b6f6505","_id":"meetup-web-components@3.0.1172-beta","_shasum":"70462eda754180872964a2cdc82c8a7983dcb1e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"70462eda754180872964a2cdc82c8a7983dcb1e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1172-beta.tgz","integrity":"sha512-oy9i2w0uDSFf+dHjBdCwO4yHJLR8gOBVpcO0gWdyx7GDtG1Dwb/J1fDL7y2JWw5Ait7PqugS0Q29HN7esc9mNg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1OPEPgvGYZofftBbL0OldyTAeJ+LgfZQqry0n/0TD/wIgdo1TxRUvY3FDaBad1e3uoVwz6zcRU+AjpMhI3gSXKzA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1172-beta.tgz_1503421657789_0.823425502050668"},"directories":{}},"3.0.1173":{"name":"meetup-web-components","version":"3.0.1173","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"cbfaf01f9f128c717042c1c56747d341201ce072","_id":"meetup-web-components@3.0.1173","_shasum":"14e80349f49edebf48174801132d29cf3589eab6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"14e80349f49edebf48174801132d29cf3589eab6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1173.tgz","integrity":"sha512-XFbDGAY5UNuXvsEAYqC65M89vxZLjD7TlWOnAg6QrgB1ysEwruGSYEcOS2PsJ+DwlEP5y5eHbk3m/uI/RaUo0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMXfroR9YlR13wqP7lHrOBNIkkVjNFmgdtiDgVpZ9uFQIgH/bf0gVijlIV4i2H06r61C3B4/Y6nDnUBiUmyC4Fp2A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1173.tgz_1503421946625_0.08745802706107497"},"directories":{}},"3.0.1174-beta":{"name":"meetup-web-components","version":"3.0.1174-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"df899dbd867de547ae74c6fc3c067ee960576d43","_id":"meetup-web-components@3.0.1174-beta","_shasum":"3d58da1b855f86c3b831080f8fcee8b14f85d409","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3d58da1b855f86c3b831080f8fcee8b14f85d409","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1174-beta.tgz","integrity":"sha512-BfAyA1ofexTbSCEF5AO9udNqUUsszPU3tYnNY6nLCIb0m7kd/oB4/nBN1GdPBgOsUJwFbtZTn0E7Fi+5AoN3qw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEk7pmL9EuFt3b+YDgegPom3IgJxyynfaBnBxQhJ1wIHAiEAi1IWN9bJKtO9XyYbkp8lT7O9z3KvRT2+FSb5Lw73jQg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1174-beta.tgz_1503424313785_0.8229399698320776"},"directories":{}},"3.0.1175-beta":{"name":"meetup-web-components","version":"3.0.1175-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"9db4582627738d66edfedf5c17a7c80a26c31f67","_id":"meetup-web-components@3.0.1175-beta","_shasum":"339e8e1e727fcc379162c2c0380b571b11abe178","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"339e8e1e727fcc379162c2c0380b571b11abe178","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1175-beta.tgz","integrity":"sha512-pBz9JPH0BlUC0plg2dk1DTPcgbX8PFwbhemyWGhlsJKOwxt/3Jk9fNzovqSAD+0RgKzZ8x1zqKFhXsBCq2y8jw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCo7oDain8xibc4kBftr27HEtLvHz7TgmvWdMeO6FIuvQIgB3j95SfOPL/su/QuBdMUJo4XQ/5d2uP8fNI3F787M9U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1175-beta.tgz_1503429090792_0.48238336807116866"},"directories":{}},"3.0.1176-beta":{"name":"meetup-web-components","version":"3.0.1176-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"0ac16c0f25a98e7cfc1e7544008461d8c09deca0","_id":"meetup-web-components@3.0.1176-beta","_shasum":"d6eb9b2e2f49d95c4618f5245e654cb3df9cecaa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d6eb9b2e2f49d95c4618f5245e654cb3df9cecaa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1176-beta.tgz","integrity":"sha512-et6S1N9qrjBRH93b83MSPjT6zbN66RXs8jBBxjLGH+eGh9vSTIStLaP9n53oJ1KYtwyoLhFBIPRXe0dYlGArMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFz5Ke037tpJfMvWxdsQ9VU4vuO1OFaSShyRBao2opMAiAPLpxVkN9A8f4FWitixuj6fhOtk5WhH5u3wTV1roseKg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1176-beta.tgz_1503433631144_0.5582492891699076"},"directories":{}},"3.0.1177-beta":{"name":"meetup-web-components","version":"3.0.1177-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"a189ad590e0600f935b4a2c35304d1711356523e","_id":"meetup-web-components@3.0.1177-beta","_shasum":"d5c6f1a4310fd16744a2f2371641f32e53e69160","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d5c6f1a4310fd16744a2f2371641f32e53e69160","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1177-beta.tgz","integrity":"sha512-WRGZXPydKo/LW1aewUNqn+7w2PjGz3CdEX6RHDinmKCGYYVxi20KFhbqAV5gd5jYBKqnSXAr1gF5cxDUtEB5QA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFyMUMW9CCypyME/AxNH1SITbw7FsoL6wAx91bwPg951AiEAnhfF+E3MmB+LtzYPOEoZUDm3V/mmxSCLl39EnQ1GRRw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1177-beta.tgz_1503435373327_0.747475816635415"},"directories":{}},"3.0.1178-beta":{"name":"meetup-web-components","version":"3.0.1178-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"e9f2c1a866b629fb5c129b283da127b2f28c2309","_id":"meetup-web-components@3.0.1178-beta","_shasum":"1ff640e9e84bfe7f549d7bffc394f3ecef4dccd8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1ff640e9e84bfe7f549d7bffc394f3ecef4dccd8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1178-beta.tgz","integrity":"sha512-ztZ9Uzy5hx6kJ0uJAHMjUssNjui3TXda/Nm6bRBOI7baT4En8RqixEhsbqZOV74j/mt1/WPG7nb4T1bYf7bhEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHsO44F573uk+Iw/yM3ogtV+k1G6UYAGfAkHA8JWMsXIAiEA7oYMWYMfbuSyhYsHCVBwaPHfQCJ72yNQiiXX9kkN8JY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1178-beta.tgz_1503437245606_0.11312457453459501"},"directories":{}},"3.0.1179-beta":{"name":"meetup-web-components","version":"3.0.1179-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"2276fb450a679d78566e1a40db2c616c0ad4c3e3","_id":"meetup-web-components@3.0.1179-beta","_shasum":"56a96b1c871b765172e77157ae532a5573ffdde8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"56a96b1c871b765172e77157ae532a5573ffdde8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1179-beta.tgz","integrity":"sha512-BeJ68UbW4z9nJP5JJuR3eQf+gGrKUuFqQqsfFLxU1b1//yRGoh4J/slIXGuE46kiGcVxeR4tZLj1ceDvf1gufw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2/ooJ0uA6O6CH11G6t7Guu0V+JfEA0xmsFSZqU/uVWAIgVm1hshAuk5/tg0iNvBCiUoQKXzaREz0IxSbqAJpldkU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1179-beta.tgz_1503437794450_0.6583431665785611"},"directories":{}},"3.0.1180-beta":{"name":"meetup-web-components","version":"3.0.1180-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"e0675dda63d402446c52fc841f9e4ba48a86c075","_id":"meetup-web-components@3.0.1180-beta","_shasum":"148e896496f5a5bcb36543d988ce5d5df3fb8dbe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"148e896496f5a5bcb36543d988ce5d5df3fb8dbe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1180-beta.tgz","integrity":"sha512-pT5suaCMD+8cWizgOgpuXVYWuA/WNvCfM1nfQVQ6nX2a4JOwfHXH8HWmAQE+BPEkn/UUT/0/sjBJwnKY0rVwsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD14/bVmWs3HorUOYv61k0QFAtucOVH79iwTU2lumZ/7wIhANS0y9x+nvMzLsxcSo/6twNbnxz1IKynqMqWppfiKLLM"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1180-beta.tgz_1503438207126_0.7471818814519793"},"directories":{}},"3.0.1181-beta":{"name":"meetup-web-components","version":"3.0.1181-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"8d373400ad1fe6cc7b71482ee2b27267066560bb","_id":"meetup-web-components@3.0.1181-beta","_shasum":"775ac72275a0f747d5092f4c79566ceec0bb74d1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"775ac72275a0f747d5092f4c79566ceec0bb74d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1181-beta.tgz","integrity":"sha512-+98rK5yp7P6Q1EW1yAmivZc+BW3CPnfKdkHSQeZskPwdU0XCC8MHiW0i6r27OJi/pGUDJQlqgQpYAmzCUIVjZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGn2mW614fR2B8CFBZHvLCvfNFJdZN24XnvvKX6wFYlrAiBbPSCXpk0niXyTKJjvzSSQzEHFmD0gF+5j95HRbBbT7w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1181-beta.tgz_1503438720895_0.7227147247176617"},"directories":{}},"3.0.1182-beta":{"name":"meetup-web-components","version":"3.0.1182-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"f9962c7e3d056bc2080fa06ee6538716edaa6e9b","_id":"meetup-web-components@3.0.1182-beta","_shasum":"04d5473d5e2922a7d91bfbb5b85bd7489310a102","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"04d5473d5e2922a7d91bfbb5b85bd7489310a102","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1182-beta.tgz","integrity":"sha512-n7Xq1sFInqG1yfG0S0h8BOM9SkKyEyfJOHMrD8SqkR0ZVUVo6fVCF0kWv1/sKo3QBhBr6YfkCrng7K1j8E1tKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwGZOsDSsukxD8FoaMFipdipdHP6dBm5+/ky0z3CyElAiBXLJ3B4Jd8xk1ZgjMWKxpVpOwvPzmEoXZbQjdWQcgkLw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1182-beta.tgz_1503439305018_0.3105506799183786"},"directories":{}},"3.0.1183-beta":{"name":"meetup-web-components","version":"3.0.1183-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"b04ddbe372b6f9b7e09b6ed75edd7a5ddeae57ea","_id":"meetup-web-components@3.0.1183-beta","_shasum":"ce3191a3574e534892a5a7f91220344f4d9236b8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ce3191a3574e534892a5a7f91220344f4d9236b8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1183-beta.tgz","integrity":"sha512-rB9K0yc5t3EfXeRcFzAffohcvdY708Fzc1+bDR9ebzV6GeUSr0xR7HakSi2xOO6qAATBhqNobPkq0S7+VAGuXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAntX/qNRdNCfPV8c5p4L8Vyi+36hLFvioC2HU4f7HxAIhAORndKJWzFGh0PHNDzfQevUC/KMiSL/xP/4YkqMIlfCU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1183-beta.tgz_1503443038699_0.20793578797020018"},"directories":{}},"3.0.1184-beta":{"name":"meetup-web-components","version":"3.0.1184-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"bf113d5d606d2461fa00c08c9b4948ab9bc3d293","_id":"meetup-web-components@3.0.1184-beta","_shasum":"3b69b46078b4ae576baff4220fc387283463e6a1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3b69b46078b4ae576baff4220fc387283463e6a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1184-beta.tgz","integrity":"sha512-OO/9OukE/uobx1i/23ybGRk7neR07cmk/JvmcOXCMKOIW2ISj5EzzzcyFpotZqwsTlEXK/MbNSWH0fdJI1STgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpfVu93t6YzOOiG/D77NA8bGfBp5NEoJA4uAdtlcyS3AiEAvGXL31s0pzQtEllpKrP6cTZYZ2ZrtJwwI1RuIMcPe2k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1184-beta.tgz_1503500214279_0.5814384068362415"},"directories":{}},"3.0.1185-beta":{"name":"meetup-web-components","version":"3.0.1185-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"1e31b8b101b39828f8e07cf38b74c6082333f23c","_id":"meetup-web-components@3.0.1185-beta","_shasum":"e26db91862b127a114a0769925628b721b753d7c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e26db91862b127a114a0769925628b721b753d7c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1185-beta.tgz","integrity":"sha512-0GxRu7ecOmS+vRvUr7xBCl4D/NwJWGlxuGfmUymni5TAUuxAdXd3wp6HxOLXgAw+08HgfGIwtFljcHduhpnrHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAmXjACJjwHo2tzJ/f5BytAHNJk+ZF02pMz/GgAws4/wIhAJbhHeXPedGh6iRfEol9rVTJ81I2JpPH24h1mxzmaB6M"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1185-beta.tgz_1503500727617_0.3425256267655641"},"directories":{}},"3.0.1186-beta":{"name":"meetup-web-components","version":"3.0.1186-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"6cfe7c87559f0d39ee254b32edd417b677382232","_id":"meetup-web-components@3.0.1186-beta","_shasum":"8926c7706640174159ba8d91bd6c1dff05e261d2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8926c7706640174159ba8d91bd6c1dff05e261d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1186-beta.tgz","integrity":"sha512-sUaUPvHr1Xsf7d7OqLSz4saut+zPO3/k7Lz/j0By/Wlhz8Squl3dhgqsOxAuAzWwS9K3LNusd2Xdu1xlcuQZ8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3LKgWyWNWIwyoPFUWy+vk7wuWhGD5xnO8M0psI3cJwAiB1PqVtvhwvPxslxVTRC3V7Ju7dxgdaSK/pqPFY3NyP/Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1186-beta.tgz_1503502839824_0.7079123528674245"},"directories":{}},"3.0.1187-beta":{"name":"meetup-web-components","version":"3.0.1187-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"75b2c001936f8c1c50986e8fb0400ac1ac99439e","_id":"meetup-web-components@3.0.1187-beta","_shasum":"ac92e1fbfd00f797a7539fa4ade2fe48668f823a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ac92e1fbfd00f797a7539fa4ade2fe48668f823a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1187-beta.tgz","integrity":"sha512-qCsrHIKqUiU+1rfMmqshNGgMbn55yh5vp47UJ0K0G/BpLk9hRNvoORCTYX+9zu6RQStYQIZrOOXfefDA0cW8zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICudZazlb3ToN0pX3ZNFSv2sHzeMtlHyu12H0ZwHSufNAiADBWfaSq2krgKemr9Jc7tKeYEZlO1Tn/91+IV3TKT8kw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1187-beta.tgz_1503503299008_0.26864105090498924"},"directories":{}},"3.0.1188-beta":{"name":"meetup-web-components","version":"3.0.1188-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c7bacd6a5f5af7254eb5bf859854cf0b5e7adf0c","_id":"meetup-web-components@3.0.1188-beta","_shasum":"c3b24d075b5a7c87ee8fa0746e9bea2982b26753","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c3b24d075b5a7c87ee8fa0746e9bea2982b26753","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1188-beta.tgz","integrity":"sha512-gn06Io6dATIp/OWsDnAELLGnGxA8VDdv5mIb0zphAx3CUIxTCBkqnnSSPyDsugEHyh3nfjsacLMU1ZJyC78Yfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBB4Ct2TX/qCwYfKGHwAJtzLptG8tLWQU+NPkFhE2ojNAiAQ2ASwwXIs3fMriNWKvlf0B/z77t+frrSJPFFcsV8AsA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1188-beta.tgz_1503504499650_0.6379691401962191"},"directories":{}},"3.0.1189-beta":{"name":"meetup-web-components","version":"3.0.1189-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"9a2fa3657c2fcdac985cb17d7b5b30a1bf0c9bb4","_id":"meetup-web-components@3.0.1189-beta","_shasum":"89f71b67b0f874361667afe827e6b492b321b43e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"89f71b67b0f874361667afe827e6b492b321b43e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1189-beta.tgz","integrity":"sha512-fkP3f4KjBvXEZqT8tL0BMGtj4i6zS4gWoccUyquuxzo6uuKNGlKna6zu4m2E7Q0x6exwvhNjVi3G7LHJcsvldw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGtLb20Sv/yOwAM2ifcq3DIelRWOWkVcHIVUk/JHeVYcAiBTdHU4U+A9IGnwOvVTcD8LS44pY6DkCvaPdpa8AxZjbg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1189-beta.tgz_1503504717386_0.002149856649339199"},"directories":{}},"3.0.1190-beta":{"name":"meetup-web-components","version":"3.0.1190-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"684e7a75c54daa54b5c1c721d7aea921c559063a","_id":"meetup-web-components@3.0.1190-beta","_shasum":"9c1ca88c32b622cbbdb4853e5d1864a9f5bbd5e5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9c1ca88c32b622cbbdb4853e5d1864a9f5bbd5e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1190-beta.tgz","integrity":"sha512-jsgv/8JI02BsWSCAMWGhacQ2HKaKmbH5g1gMSYxVGsGWj3g5VIzUHR/CxY+3eAfXyUojWreeDE4P3qgIagtsAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDA8fe8z8aMQNrrrtY8TWhBta6eRl8YfcWBmPrA/uX2wAiEAjvn+Jvu2PiP4H6QHjnhpfuwdZj/U2Azo3KGjslmkxxU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1190-beta.tgz_1503507639312_0.4472563238814473"},"directories":{}},"3.0.1191-beta":{"name":"meetup-web-components","version":"3.0.1191-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"a8865d6f625b21d5878f995924a1790e0217c702","_id":"meetup-web-components@3.0.1191-beta","_shasum":"d629d4b8bb951759197e72c21c7175e96a1319a6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d629d4b8bb951759197e72c21c7175e96a1319a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1191-beta.tgz","integrity":"sha512-QjwPNsuhniIJkyziyYU8FvH0hBBaSbzPeguM6P6gEKZDrdrViE1hzY+ethxqc869IJgUNpbd4gspxrmd6joQ4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDraDYE1vCb9kLhNur+FnEfAg3537H+S60S37tnPYE5nwIgbzywNRur4H2YI2gFn9WsIiGt24ztj6/CUxQ8ghPY9r0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1191-beta.tgz_1503507974064_0.8678086951840669"},"directories":{}},"3.0.1192-beta":{"name":"meetup-web-components","version":"3.0.1192-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"5b0a0692c7f0396360e77925b272c111f3e14e1f","_id":"meetup-web-components@3.0.1192-beta","_shasum":"a747259dbac19ff6e41fc5dc50c2476ac86b7d80","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a747259dbac19ff6e41fc5dc50c2476ac86b7d80","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1192-beta.tgz","integrity":"sha512-USKqrB3DXVofQfPffsM3cQCXU9rFQshOz1gesJpJe4pwm5yVYAqlFXiXVd0ZNpK1hpxEUbRyx8PeLcihnqYaWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJHFQ1OSPLLhCo6LtkUuqaItjO6WC0d9EK1A21QZ+k2AIgSYCn1fBVZL8vZpY7RqLUuIpORHh3u/8Y//TWhZIKCWA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1192-beta.tgz_1503508197771_0.334158067824319"},"directories":{}},"3.0.1193-beta":{"name":"meetup-web-components","version":"3.0.1193-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"418c67a9ae42c56efe9aaa50947105328fd8452f","_id":"meetup-web-components@3.0.1193-beta","_shasum":"ea98fde484e1e185b20589f4bde5bd0b95d5ec30","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ea98fde484e1e185b20589f4bde5bd0b95d5ec30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1193-beta.tgz","integrity":"sha512-DdfThUzWeUtN8OiEKhLNlJ/860mG9PXSgPVxmnyqughuVWEVyBNZE/lzyzSwfdrSpL3Q7zXH17YigQxaCD6oOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQu14x5Wf+9KrZwQdMxq7DDC4RtwbkFD7t3KMVK77H7wIhAJJ/OnUeQAJJU1AD/29QIT7vO0pNvQcHFzisHyLL59UK"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1193-beta.tgz_1503508569137_0.665126133710146"},"directories":{}},"3.0.1194-beta":{"name":"meetup-web-components","version":"3.0.1194-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"7ad219e551dd8ced62097f88f73560fbc76ec8f8","_id":"meetup-web-components@3.0.1194-beta","_shasum":"7d310b2efd9425bf5bf2f7d2dc323641de3bfa4f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7d310b2efd9425bf5bf2f7d2dc323641de3bfa4f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1194-beta.tgz","integrity":"sha512-EpA3zaR7mJj8p745r4KpLxF9jLnBatrx2j425KNaOZDOL3BhXS19YIlXsFXlsnJa2hpWp5Bvvou6Tb23CrkRtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVdY9a4zBAPFYkQLvoY+KS/Dw3oUfgcH6GwKl45aufkQIgdqDPi6VaqruIn65Hf5N0HT25cuA/Sz8vgXOn6b1tgGM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1194-beta.tgz_1503508924757_0.054921671748161316"},"directories":{}},"3.0.1195-beta":{"name":"meetup-web-components","version":"3.0.1195-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"59a87b00f7e685a5a24efa9acc57434074a01a00","_id":"meetup-web-components@3.0.1195-beta","_shasum":"f81e90c78bae950df8798f7d8015fc8eeb9ee767","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f81e90c78bae950df8798f7d8015fc8eeb9ee767","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1195-beta.tgz","integrity":"sha512-0NsOcq4U3BHq3ew3Hz6LeR4YE20KGZbUyg8oFmfJLb6KdS4fF7Wfrnf33AUbmBgHQrP0d9VdPwyirRm3TQy4Yg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfWxl2q1+O6A36BP6uqDVcqe1k6LrFGWAzCrYXdN7J4AiBFvb8/PbDFIOSSDQH67CvOFHY+mV4rWNT+UR0//v3zcA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1195-beta.tgz_1503508955283_0.1185001484118402"},"directories":{}},"3.0.1196":{"name":"meetup-web-components","version":"3.0.1196","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"a1752b1abbaff70c25ce9067ac4efaf50ae38ff2","_id":"meetup-web-components@3.0.1196","_shasum":"1faf271d8edfc85fd81a8576355dd22fc74d1d49","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1faf271d8edfc85fd81a8576355dd22fc74d1d49","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1196.tgz","integrity":"sha512-tKNI4k3+deVGEMS/bEj4Ne4TIAD9lCokMxb0GmE2cL7Kw3l2ik3KOCsWbTVINnESCTKhq2/Q8pP+VVse280jTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/TBGl+IrvcysOcHYgq1l5m+whwHBIGUqqEg+oekp8DAiB0EYGgSmP1FfOw4v4ttGNrXjQhKBZAxyZlLrgu3kx4NA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1196.tgz_1503513825914_0.1522747683338821"},"directories":{}},"3.0.1197-beta":{"name":"meetup-web-components","version":"3.0.1197-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"855dcf3f805c964bfc68caa223fa611f6038d448","_id":"meetup-web-components@3.0.1197-beta","_shasum":"4e963dd43de215524f84e2308d4e36241dbce572","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4e963dd43de215524f84e2308d4e36241dbce572","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1197-beta.tgz","integrity":"sha512-2zA0g0dF+1V7QX9QgYP3yaPrurVui9g435VVFe4UpXdIX6X57GH9+ZyscKOBMCO/FNJtKtQh/A0y090rkdiwuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHAadzBj+749OaRU9EC7qx/NyjKpoq6r43JTCiVjqmsaAiBChwPcRakWz5zUrTb9zMTK/iKlRw8tK7rcBW+4QSbNAQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1197-beta.tgz_1503527028371_0.2888539496343583"},"directories":{}},"3.0.1198-beta":{"name":"meetup-web-components","version":"3.0.1198-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"e54cd1ce086b40a66b5d0702b6213864c0d23f7e","_id":"meetup-web-components@3.0.1198-beta","_shasum":"9e670c14a69d0348ad96c1520eac5043ccef628e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9e670c14a69d0348ad96c1520eac5043ccef628e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1198-beta.tgz","integrity":"sha512-YuB7Y2INOwJlfrnULZoFNNYzpr1qQZNLu6epwiSnXmIt2ZFV7ohORcVlralr8nEayQhaRwn7HHnEoHRPGaCZyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAG02NkEHiMVg+AssT2odvAYuPF5/4/h9SGsSK0d7gq3AiAXFNGU31z2a62djFnxt3odAAQYmRMmT+Nrdg/o1fNh3Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1198-beta.tgz_1503528745199_0.6128349243663251"},"directories":{}},"3.0.1199":{"name":"meetup-web-components","version":"3.0.1199","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"4da2601031b424f680c2d830a29b56f0dffc4c4a","_id":"meetup-web-components@3.0.1199","_shasum":"817e69a2196b7226594813c0b9aff6fc778b9b63","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"817e69a2196b7226594813c0b9aff6fc778b9b63","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1199.tgz","integrity":"sha512-oxHX8d8Pl1hHDiBYkfNE8mL1R3Glx6zpaBg8nr3/WRvr5P/0p9Fz4ud1P2kps8AaezuR0mELa4N7BoXg8uD7hA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW1qvXyAgH0yDsGkga+5A3kqC9HWsIjX0tlUMf33hS/wIgApCLj58kIwKXd2MmZXJ9o8qjGoRKmChFDjKPsJyZ6d0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1199.tgz_1503590873975_0.5007089590653777"},"directories":{}},"3.0.1200-beta":{"name":"meetup-web-components","version":"3.0.1200-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"5a40fdd641478279165838504851cde830f725a6","_id":"meetup-web-components@3.0.1200-beta","_shasum":"31cb56abebf9dead87b3e3038eba9193f5bdd17a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"31cb56abebf9dead87b3e3038eba9193f5bdd17a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1200-beta.tgz","integrity":"sha512-kowTS+R4Y5JTveCfivymFsSYcWvHzAnheoU0/8v9/dkQFYGocrxGWuiWZ6MemRG9aaajX7LMq5YTIncuZZlIMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGhg/VnrDRBHdQ2YA0nFvrgcsvoZWYgOG8g/EVwFwFGwIhAOgCcj0AAY6sl9OJxIHx2oDij3+5NCWJhGiEEq88zpRz"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1200-beta.tgz_1503590976026_0.05045748525299132"},"directories":{}},"3.0.1201-beta":{"name":"meetup-web-components","version":"3.0.1201-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"d65951c8090761d6adfcc518df885a7612b69dd0","_id":"meetup-web-components@3.0.1201-beta","_shasum":"8a350dbad30796bdb4a288759917fab3610dc08f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8a350dbad30796bdb4a288759917fab3610dc08f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1201-beta.tgz","integrity":"sha512-u6qAnlJBO31cEw5/0J8Fqz2gQFuy92XaFiRMIBM1PO1DAyy2UMhEeAMIMBC2jZbnJ7JpV+uLpMlWa+CnaCgYUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt2ZT8HFMqmvRX4K7KQ7jdt8/cJtnLwjBD7EMlf3+45QIgVM83+6H1KqWn0Sto50ezSji2JhQaCO3e3Kbj+jqU/34="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1201-beta.tgz_1503591081408_0.21990369725972414"},"directories":{}},"3.0.1202-beta":{"name":"meetup-web-components","version":"3.0.1202-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"def8b62c6ee61a359a92f3096e1c7bcb63f11418","_id":"meetup-web-components@3.0.1202-beta","_shasum":"64c480e3f502d4f2f150cc80ae021d9994b1c758","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"64c480e3f502d4f2f150cc80ae021d9994b1c758","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1202-beta.tgz","integrity":"sha512-fKKJmUAdv9LhdyPnnQ8L1qmVkkgJV892FXWYEgTmr7V0iBsYat4ia7fLFUZO9jqtguI20XUd4iZdVuvIzxnMDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZ5NYBNr2cj6viIYaZ9RvNxPBzYNBElYjq6qZjr008NAiBo+uciwmecjGdNeNzTKZLN0X9Ec6swl1Zk9EP2aShTug=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1202-beta.tgz_1503592173976_0.4413388315588236"},"directories":{}},"3.0.1203-beta":{"name":"meetup-web-components","version":"3.0.1203-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"660e6adaeee8736d56b8eb8177165ed40c4f56fc","_id":"meetup-web-components@3.0.1203-beta","_shasum":"1990002a1e342344bda7ed2a2397f5a2eb8ae247","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1990002a1e342344bda7ed2a2397f5a2eb8ae247","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1203-beta.tgz","integrity":"sha512-j5jG7iVRZLH9LkEte8ZqUsY0TWcIVG3iGkXKCWdXjNLRhCVES5xuVzo1VS0LudbCwBcZA4G4bFCJzAw5crYY5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBNauLcbxmcimWV3cOdZfEVcuX05NYtv+7iQUct81m0pAiEAs4W07PNlVifD6jPn6nShNc4xsI3lkBEwcsIMHTzqG8s="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1203-beta.tgz_1503593499909_0.9212218874599785"},"directories":{}},"3.0.1204-beta":{"name":"meetup-web-components","version":"3.0.1204-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"95c8420cc9ff183326880afdf474a9aae91a0f81","_id":"meetup-web-components@3.0.1204-beta","_shasum":"423f70f1e21634b417e43e4f31649f436f6065ef","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"423f70f1e21634b417e43e4f31649f436f6065ef","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1204-beta.tgz","integrity":"sha512-vZuU0SK6gMbEtwjsj/ankofohcYuWDiffhROd6odHI8+uzYQKGEy3BQ1Ch24g3p6okuvVmJzd4pHfX6CCNHMHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBdyQFbVaqYDGgxJy+zJ+iiJs9rxeUMZBmUQTk8OSbfuAiEAqWDY7gKirfKtK/3OEERXd354F8Y7KsNF+jcDwlzZsvY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1204-beta.tgz_1503606409917_0.535635634092614"},"directories":{}},"3.0.1205-beta":{"name":"meetup-web-components","version":"3.0.1205-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"d87313ee438ee7b2db7e9ee8737a95b4ec7bfe0c","_id":"meetup-web-components@3.0.1205-beta","_shasum":"3fe520b03d7ddefbd9c899fbc5dc8af92c333b1b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3fe520b03d7ddefbd9c899fbc5dc8af92c333b1b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1205-beta.tgz","integrity":"sha512-a5MZJZ6ykGcVRGvnD/QxJtB7vuNj1gxtTfSCCulAT7NL5xA2NTxDeCAJlYm72Rl4w7TZqiiqikqUB+VbdWsWiw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl3vbxVpvlhMzdD6coetCVLCscgVJZwpJRl3O7xqFxgQIgL6zo9y3ClPCWwMSmcfgskd7trUvKOhob4XZyySublmQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1205-beta.tgz_1503608502416_0.7766682941000909"},"directories":{}},"3.0.1206-beta":{"name":"meetup-web-components","version":"3.0.1206-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"ba0a9d82da415711a9cb660de37ac072f2364e9a","_id":"meetup-web-components@3.0.1206-beta","_shasum":"8f36d7c28e34645d2162a942a8bdf47463e0eac3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8f36d7c28e34645d2162a942a8bdf47463e0eac3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1206-beta.tgz","integrity":"sha512-uaSkvwM8D7Ce+gv7JJITllXIdNY4gR692PyyPat1Kzr/2DteJQ7P2+0Odnqkzp/aXpCVfEugv3y6tGt7yKUxww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7/84Q4CVVRYxWhmgccJpVbxWw4xnmiPEowH6shc4K0AiEA+4pIOBx5QOUmmnSlpYDkCHBUftpzh0PFOezeC1Ry10Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1206-beta.tgz_1503608591527_0.8835094862151891"},"directories":{}},"3.0.1207":{"name":"meetup-web-components","version":"3.0.1207","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"18c74703cf9d5fdb37bd8da85dd53a96558c3277","_id":"meetup-web-components@3.0.1207","_shasum":"26872e3f502bd338469f7ceecc401d4c6e82c7a4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"26872e3f502bd338469f7ceecc401d4c6e82c7a4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1207.tgz","integrity":"sha512-spRmfL0UlFjM4UtvUyzcTfDUjYFxRg/aGey4gOOpVtITQswXiTppF4vDzODnRerXHJmsvMPE/327/9DY3NbZ+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfDN2AkCaDbg/PVbt8kyfBTEPELa85jNaemuBPNCbU+AiAUR0LCatMo+TVYlbWsrfuu5Yudhxswal7MjJaqFb1Kaw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1207.tgz_1503608758600_0.7383351775351912"},"directories":{}},"3.0.1208":{"name":"meetup-web-components","version":"3.0.1208","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"b7ac262b00331e27f8d3fb5c5741f727f0f67be1","_id":"meetup-web-components@3.0.1208","_shasum":"072f2e66d5d21a49c0f8b6b421664862829d6225","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"072f2e66d5d21a49c0f8b6b421664862829d6225","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1208.tgz","integrity":"sha512-9C8iWWLIa1n4wjZoT9RIsgoOJSmLZkYAz7d4nGpwqNk4v5zREuCrjW+oRd5yjxbH2eaWc8IWXc3RIchXkYTPww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICiDVBXgL9eSU5oz1gKz2HuWmSXw4/hS0Z8EcxSSy9EfAiBrk/NIIOIdZfVi79DGVW1Ya8Z6OueT0E4i8DwXrLNSMA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1208.tgz_1503609006132_0.04169894405640662"},"directories":{}},"3.0.1209-beta":{"name":"meetup-web-components","version":"3.0.1209-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"42adc853c65bddab02958c6e24c065c2299715ba","_id":"meetup-web-components@3.0.1209-beta","_shasum":"b0e8396325d6afefc670c5a82ed919d46eb7f743","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b0e8396325d6afefc670c5a82ed919d46eb7f743","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1209-beta.tgz","integrity":"sha512-ED/Dbj+plDzQP2CJ0xdKyZeqHRYgelsZYB2UXo1aTTmV+Lw7Z33dR64azlZ/rgnrkOLrVAFARIJUuCVV2oHxow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAgScTRp94QLja1MCdIVq3tnTHfQLcKyUAcEsjgIyuIKAiEA4xMyGk4e5r3i8mPzTcQwuV3viv/siPOt0gfgw7F8jbA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1209-beta.tgz_1503690016103_0.7844243121799082"},"directories":{}},"3.0.1210-beta":{"name":"meetup-web-components","version":"3.0.1210-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"3ba0f8395d734f4188ab8f8fb1aac06a1244d3f5","_id":"meetup-web-components@3.0.1210-beta","_shasum":"9e4b90e3b33510fc72aa594d2adb990a46c16a3d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9e4b90e3b33510fc72aa594d2adb990a46c16a3d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1210-beta.tgz","integrity":"sha512-maha6Ygya8c1kPFJnS9g+rpGWtgQg1d9XYnZCNBuKU2LVDFIVgX5zmUOiRmkLAZBw4DwJ1r4vcKyWJ2kYRzsvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGrbiP8icUiZWIy9KKaOXNdn61KJByec24LVFb0wfnlAiEAkBRFYbJRYyCglnPyh1pW2rzmsvODGsmvX3LEng4UO/U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1210-beta.tgz_1503690171942_0.4264550847001374"},"directories":{}},"3.0.1211-beta":{"name":"meetup-web-components","version":"3.0.1211-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"d3a3848cdba6a2960769167e01af9ac028f39801","_id":"meetup-web-components@3.0.1211-beta","_shasum":"a788cc4e831db9441afc1a46fba731f7456a93ab","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a788cc4e831db9441afc1a46fba731f7456a93ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1211-beta.tgz","integrity":"sha512-+wyyV9MrH49Ah4ILkJt220jFDUJbEi29eHDBgLTRTOpxCEiiDQoD0YEfv3u/LeA9faLi6STtbMN4PRh/Eiyu9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpw/UFeT2zwwW4N4eOue8t7HIHX7zWWcD6x2o+R9wM/QIgaCgtCHLoLHB8C3BSiDzyiMYNE+PQdMwq0091FVxmt6Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1211-beta.tgz_1503941852122_0.9587761049624532"},"directories":{}},"3.0.1212":{"name":"meetup-web-components","version":"3.0.1212","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"ad4bac50def223ddeb388756439185228ba557cc","_id":"meetup-web-components@3.0.1212","_shasum":"ab73f53f62a9e017d63c898a652c0fafd47ba666","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ab73f53f62a9e017d63c898a652c0fafd47ba666","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1212.tgz","integrity":"sha512-icJDfTSO44MYKUmUVYDT1NsbbHFCzzmTmDyBNNOevhr5zxX+YwXx9BG8uY3tN51L1o6MBhOz3lK1nq+OgwFSiw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHSWj3QoPc/YpncILFC7HHT0WKgwaFuia+Fq0WjsjyHAIgIuGcHZlrZKgy9hdyM7R1/wbP8lXqK7DngoXiKIVueuE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1212.tgz_1503943567628_0.6229543518275023"},"directories":{}},"3.0.1213":{"name":"meetup-web-components","version":"3.0.1213","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"6dcc02e7377f22c96de73a2af776b6fc4e59c94a","_id":"meetup-web-components@3.0.1213","_shasum":"3b38c6c0045f1b9bfdb0030b3e1d484fb625aabd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3b38c6c0045f1b9bfdb0030b3e1d484fb625aabd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1213.tgz","integrity":"sha512-hDQtX0PpTnYYWmD/ugBNHHy75+mSfFcaZiVguGmCUZ6N4ir5IYAlwJMj5Vok2KIKVRkPzeUyCr3KSKKWO/9tTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMZwSAf3gQSDeeDcdRmuyaQRqFsPdTapjhTOunlHf5hQIhALHBNV49LEm4MOQ7hpJk9ZxtRtDetM/eEgBSGB2J/2Rs"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1213.tgz_1504121381533_0.7770112853031605"},"directories":{}},"3.0.1214-beta":{"name":"meetup-web-components","version":"3.0.1214-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"171316fd9f6abda052a09b4813527f062119474d","_id":"meetup-web-components@3.0.1214-beta","_shasum":"17a7204e51f42096bead4d8a989edf43b85e295b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"17a7204e51f42096bead4d8a989edf43b85e295b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1214-beta.tgz","integrity":"sha512-EVsQL6z/z3DWrIt0W/c7mz8kLYKMydMvCkbzx7Qo4ZiYZa4+QktmWU5nqHFGr93G0VTEEjl78mCO5CeqnbL0Zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDll1Ci2jaPMma55NAiiAZqWCJzPIZBUO5wPZS6TfD7/gIgRlWGhGCl46mpmYTaalCrnANkBJWL85FRI8NaO7mEscs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1214-beta.tgz_1504139940195_0.20424962136894464"},"directories":{}},"3.0.1215":{"name":"meetup-web-components","version":"3.0.1215","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"84a853fc8bb8057b5446c38285c56c30ffe06b0c","_id":"meetup-web-components@3.0.1215","_shasum":"46d7433e918b1fd4244b95a261d32bba0744e77a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"46d7433e918b1fd4244b95a261d32bba0744e77a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1215.tgz","integrity":"sha512-epQ+YREd6lBXs9JY1X8Cov3OsVJ87+JYWBN3Wz+VjtydiDbXHJZSR9ZoVdTgtQm1BO4zKbcdLcbyZKTAc+0p1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeBtAVD2OxPLWJbBmbqGtMWzmCClZCpKq6w1yP0glmdQIhAMQmO9J9CYedCsHcKX4IqUOUJIjxAzxilK5D5P2q0/PH"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1215.tgz_1504140278074_0.4668181170709431"},"directories":{}},"3.0.1216-beta":{"name":"meetup-web-components","version":"3.0.1216-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c3099caba2e5b0a544d5036201bdecdfc96e9b49","_id":"meetup-web-components@3.0.1216-beta","_shasum":"d4527d51920f4d443985a893c59fb0278776d1f7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d4527d51920f4d443985a893c59fb0278776d1f7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1216-beta.tgz","integrity":"sha512-QzyObXEYsiRW0CvsomHY4y9Y3raI6fwzaW6OImCWMCkJC1UwI2m0MFaMTky1sZK67B5p9YJNHoT4Ioy5rZuSug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDczd8Pvl8jaSEu20IXsB5aDk7biz9/DQ9aWFK8kxmrQIhAKl5LitFGN938eVFJelE5gwSq5PabRYmTR9fg+SlaBRl"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1216-beta.tgz_1504187347789_0.9352030740119517"},"directories":{}},"3.0.1217":{"name":"meetup-web-components","version":"3.0.1217","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"dd8b1dc038468393d7c7a535f8b11a5948fd6aa5","_id":"meetup-web-components@3.0.1217","_shasum":"24381609d2f4df3cd4f33a3c34d5afc06322a8f0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"24381609d2f4df3cd4f33a3c34d5afc06322a8f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1217.tgz","integrity":"sha512-cwjLWVaFr35MrakFhpbNLmoQYwfEbNb97+w4FHdHsUT1t8NfqN1ztpGkIun/3rvCsRkZcHLlAw/JGrGGKdr4kg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+2kFc6AM+ixWihWhYRB68AdiAiYuA/jbMleFvUf2I1AiEA7kx4Fa0BxIk1hXeGh2nJrVkC6m/TdEPkfCL+qsJoo6Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1217.tgz_1504191650339_0.4576486081350595"},"directories":{}},"3.0.1219-beta":{"name":"meetup-web-components","version":"3.0.1219-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"c164f83823de2800e4fab3a85467ba34f123b4a9","_id":"meetup-web-components@3.0.1219-beta","_shasum":"050cf0119e075b7a6b59675708df96e53c5daa61","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"050cf0119e075b7a6b59675708df96e53c5daa61","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1219-beta.tgz","integrity":"sha512-/D7rYla433rnspdVrjhuFVmWANNzG8SgApFFsttXRqgh2p0Wn6UCTFmt+ASTIwbFJUSVzgzu24zmN5K+fK8DaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1297u/arfN7F0SPTBjlBVSdReBjFL6lCTCorGbDzEKwIgPQscKLlOYk+Hdg1QlWIsnqNqb7fHVUlUFJ/Okn5pCCc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1219-beta.tgz_1504211404886_0.3722384055145085"},"directories":{}},"3.0.1220":{"name":"meetup-web-components","version":"3.0.1220","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"2d13b9ad61cbe2df3935dd8dcf46e20c30b5457b","_id":"meetup-web-components@3.0.1220","_shasum":"b76ece944ee208fbed456981741c7e6f5187bd93","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b76ece944ee208fbed456981741c7e6f5187bd93","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1220.tgz","integrity":"sha512-fJzrgZZIoXuFQCa0DvWzhqOt48oU0jdHVENXbvBLJJa2ADkYZkhL1FKG9jN7n5z8pC+W3H+eTLfFLMiw8Y4YNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0vqHj4HupxHZ5s8zbosGXZggKQLWy6qu+kRra/HW4bgIhAPKkC6X1Vi7Mgyj2KS3KQnIQ8l2NCo/fRqOusbxzqgZ3"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1220.tgz_1504278744305_0.43660427047871053"},"directories":{}},"3.0.1221-beta":{"name":"meetup-web-components","version":"3.0.1221-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"5238a54e3631d37bfec7a0a17137b0216ddae35d","_id":"meetup-web-components@3.0.1221-beta","_shasum":"35c7a5cad86b3abc6ea4a2067abd720cc254033c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"35c7a5cad86b3abc6ea4a2067abd720cc254033c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1221-beta.tgz","integrity":"sha512-XufhExTDELdYNTuXJ0mnmvC82VpmRa0x3aSquIbDuSTk7eeSr3flHMt2lZnAG6OXUSID94o53mQ2sYeG69o35Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDF9G1hS2UyAI4DvFrOcHW9KqouEcnkTdqv4A95hBq1UAiBxIMNxd4pJxbYMHQnnw0kmEgMAJuoBzJhyxs7RmUzesg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1221-beta.tgz_1504371645938_0.6593945969361812"},"directories":{}},"3.0.1222-beta":{"name":"meetup-web-components","version":"3.0.1222-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"2d559836d938b07195df327c47f0816fd4a41fc1","_id":"meetup-web-components@3.0.1222-beta","_shasum":"d597e33c4e26611ae366ea5a9537bb5e40b8bb84","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d597e33c4e26611ae366ea5a9537bb5e40b8bb84","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1222-beta.tgz","integrity":"sha512-jl2HnnDbRtpdpzPFTiJZEpZb5dQ16E3zRDr5dcJ/CYfmxnGcheJkTMg3ah9j8Ipg4CXEgnR2+KMkaEC98merbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0VdZd6QvXjLoxVhQn4zXAeR63lwJg6ZSKDmX+MDDayAIgRBgM9VJeF3IS10ysXqiRLPyye5rOX+PgYRYJJRJ/28w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1222-beta.tgz_1504459454327_0.1493209977634251"},"directories":{}},"3.0.1223-beta":{"name":"meetup-web-components","version":"3.0.1223-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"1b1babb58e21288a9116cb9c61749f97401153e1","_id":"meetup-web-components@3.0.1223-beta","_shasum":"6be3cc2caea49e0bd0dc4aca6f6e5e9f22b84edf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6be3cc2caea49e0bd0dc4aca6f6e5e9f22b84edf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1223-beta.tgz","integrity":"sha512-dpXt1uUL2p3JpE1I0kQOoLAV+ASFHYSqFENAyIeHoaYeBtM9Z8GtqHVeWeYWv9I5o7Qhcz0JBSran/uYFa72mw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANfZs6BGEAm8Da3zrefoisxOlQEqH/FR4txp/17NLZVAiEAzWqp8p0t02Bd9RpLV64QSD3sT21WykbbW4wEIrTyg4k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1223-beta.tgz_1504565521434_0.48826890834607184"},"directories":{}},"3.0.1224":{"name":"meetup-web-components","version":"3.0.1224","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.84","webpack":"2.6.1"},"gitHead":"ce0449b609c418e43de42adf80db036b85420a96","_id":"meetup-web-components@3.0.1224","_shasum":"a6557cee2ec89d65c13c32f5d23b26985356df0a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a6557cee2ec89d65c13c32f5d23b26985356df0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1224.tgz","integrity":"sha512-7lz+WX2xnPFWWmyDs+D+heDLRDFv+NJcUMyNwBhtXUVEVcd7hGrSENeFRsmbPALVSPd25AUrt1U9AUoJ2jzY5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKxnVv6NuKJ4oFt6gAA943h1f8ycgeL5vAlVuu6XvidAiBwJaIV4ehlRxofeIVASmdPVhv6VAEKVMGvcaFUnM2qVA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1224.tgz_1504618321087_0.6761259171180427"},"directories":{}},"3.0.1225-beta":{"name":"meetup-web-components","version":"3.0.1225-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.108-beta","webpack":"2.6.1"},"gitHead":"46106bbfe349b292611cdabd90f316f8675748bf","_id":"meetup-web-components@3.0.1225-beta","_shasum":"cc80e89b52cdc3c3baba7ea7af56cfddd5e23707","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cc80e89b52cdc3c3baba7ea7af56cfddd5e23707","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1225-beta.tgz","integrity":"sha512-tltPRpIThLXQmY3LJldqK6+hCK/hijHgHjuGImwK70rbBeBxixaBqp4/FPXPoF7nzHLMSRNMCT71BayfzIHXQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrsC0lokAfonkiyTBsoMPtSVekXy+ckSsoL91wgvAkfAiBmNfkQj2KYTCgSDcVDNhpNNZdYKq2wbXwZHfj849Ks9A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1225-beta.tgz_1504625019886_0.3873739722184837"},"directories":{}},"3.0.1227-beta":{"name":"meetup-web-components","version":"3.0.1227-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"b44bda966669b48f25ff503b60b84d3b6804664b","_id":"meetup-web-components@3.0.1227-beta","_shasum":"2f8c362a6dd2842dd9f8cebca95ac0f3863859be","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2f8c362a6dd2842dd9f8cebca95ac0f3863859be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1227-beta.tgz","integrity":"sha512-e38BosDxopbQmq2r/7iMjgvOjA7neJBNKyZfYYcXtsvfLW88C4EnlAnhPtwprudrZi/iZQNjbBLxdP4kpIL6yw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb3eO6dZ3sEFOXs3CrbFkmCW5/NEd24dYAswM7KiL4mAIhAL38BBeQGxcXLmedVp6PnO96UyarPBowOtS21CjeaKCQ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1227-beta.tgz_1504626177700_0.14009582344442606"},"directories":{}},"3.0.1228-beta":{"name":"meetup-web-components","version":"3.0.1228-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"721f23d2caf36fb9f663d6fcf7cf5bbfc56efdad","_id":"meetup-web-components@3.0.1228-beta","_shasum":"7f20b513e1c77e265fb2036a72ef095d83dc3b37","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7f20b513e1c77e265fb2036a72ef095d83dc3b37","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1228-beta.tgz","integrity":"sha512-ht2HW+yKzvo62aKgISmFl8bApnnKoxh4mawzxzhKDwUt8NoIXLchNEdxDQET/MO3lPj8+djuXVFar1TWqvJd6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBKysggOtw4WmRs8LRXWvTdFLEIKyxWultB+AVkO7+WwIhALfKWvQO4WgeP7R4zvdRj8zXCH1/u/IKN7DHQoOM0gv2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1228-beta.tgz_1504627921503_0.5728634488768876"},"directories":{}},"3.0.1229":{"name":"meetup-web-components","version":"3.0.1229","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"fddfcea1e3d18ae8cb4a81717b5f497f84a53fef","_id":"meetup-web-components@3.0.1229","_shasum":"9b8e55fd033100a53d35e611ac5ed8a47f8e239b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9b8e55fd033100a53d35e611ac5ed8a47f8e239b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1229.tgz","integrity":"sha512-wK97TmXorPlD1fVICV/CUbauYX4VYBn/Oi6SCxBKTXG8l6t6CTNEQBFK2R4mNwfscLp5Yg3e6rONhsFaymHLqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6qSXIjAjZl4am53DRY4OSbxjqJFKKrE6MniRKlvqqlQIgVTOo5iMU363YdzwoyUfVGqXkuhI8N2OSGauSY+3fwFg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1229.tgz_1504629644522_0.08378959004767239"},"directories":{}},"3.0.1230-beta":{"name":"meetup-web-components","version":"3.0.1230-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"41a7f49a5043d0c79647ae381a36ace54e00fc60","_id":"meetup-web-components@3.0.1230-beta","_shasum":"fb60d3f091a1ca756e1b14d707587e96645f3b81","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fb60d3f091a1ca756e1b14d707587e96645f3b81","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1230-beta.tgz","integrity":"sha512-u5NYxand6Gzgk31rHEe4N6Ito34G3Tu6fyveWoerMnWhvNBVJU2ZHAblPAx1e4IZ5qlB4hAkCFzkFDLNxkcB4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2iwZfjiSdmslhNAeZ9OwehvFneuEy35c6Vg52miVnXwIhAPQtUgqiLe5uL2LVlXmlJ1K4prXNjJFbiHqKTKnN9ccE"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1230-beta.tgz_1504630777545_0.39204901456832886"},"directories":{}},"3.0.1231-beta":{"name":"meetup-web-components","version":"3.0.1231-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"f0641021b0920a9989653b8c6d88e04cb15b0867","_id":"meetup-web-components@3.0.1231-beta","_shasum":"f74a155bd26a981fc97d868eb25b3dedc7617b44","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f74a155bd26a981fc97d868eb25b3dedc7617b44","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1231-beta.tgz","integrity":"sha512-pZnlATfU4k6WJDIPQ/AzGArxmisV0MtLVlBFW0wZMKugLWAo6aNpUjIa9I3klJ4kzoLfqHQxk9EQa0+v8Lx54w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDl06RsQz6Z1SI728lv4bSPX9R6JgCixM4x2q9B65SmLAiA4Fr8nPp4vmOG5tcuq88sVN1FY+YtebU3Y41sKte8a6A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1231-beta.tgz_1504709368642_0.3607779461890459"},"directories":{}},"3.0.1232-beta":{"name":"meetup-web-components","version":"3.0.1232-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"e45ac9eef1284d47df2ac7c988e51a38aec23ca8","_id":"meetup-web-components@3.0.1232-beta","_shasum":"09948019d165ac2d1de167a138876f43ce7843c9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"09948019d165ac2d1de167a138876f43ce7843c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1232-beta.tgz","integrity":"sha512-8mIQiFVZOGm/xHDvtmBehTXEtKN0NTtDBQ98KDpWQePHjjhT7JB4xwCcgtHYFwvu1tNpLjjXuiaiXyd/vinjFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjTk2PM+U8iE2mbRX6N3rbs5ua9lznyk45KRrjtMut5QIgZrogNmW2c7Q9Kv06qGFhXXT0XWLX4BFnQOZJM6QigzQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1232-beta.tgz_1504709995434_0.2370463649276644"},"directories":{}},"3.0.1233":{"name":"meetup-web-components","version":"3.0.1233","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"8751ebb628c0a8ba41674f7ba9b75936114419ab","_id":"meetup-web-components@3.0.1233","_shasum":"25aca826554d562531934c90ef204822ea0359fc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"25aca826554d562531934c90ef204822ea0359fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1233.tgz","integrity":"sha512-xmlv5ICnmm3ev4M3X5qD3O1bfnlHB8ltICbv1P7Ia0hCu5HSpKWTALHKmMK6tEcdJmSunCj1j3ccTC34fwN0jA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGmLIvyeUngrPfTQrV9LRtj1X4cJJ9kgtkgxCOG12tpoAiEAyjtrBh2Q02jYhNLTps1kJrj54tMI2tlXtafbFfnrF14="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1233.tgz_1504710406593_0.15496510826051235"},"directories":{}},"3.0.1235":{"name":"meetup-web-components","version":"3.0.1235","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"f28f97cd42f02e4b5868cbdda0d2183c74e8ebf8","_id":"meetup-web-components@3.0.1235","_shasum":"ef5139baa0b1c5dcdaa7717c03f12bb24da95754","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ef5139baa0b1c5dcdaa7717c03f12bb24da95754","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1235.tgz","integrity":"sha512-3CFZTAr2bPSd3QOQtQX37v3ol78veFIdaGxf7GeTrgWg7lfC9zRHHhcZ8EFA1wzgl3KDoPQDaO7Ds025dDjmSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBI/dOFMrcb+mqalJeD/gJ5emiAu79tI2oIu+khbZYPAIgAcb+pGsaD8OhLNmTD0nHkPWwQ+lRn8gvpQhlVnOpLJw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1235.tgz_1504710901455_0.9511784652713686"},"directories":{}},"3.0.1236-beta":{"name":"meetup-web-components","version":"3.0.1236-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"cf9c42b8bbfa8089c272f582dbd298b7ab161671","_id":"meetup-web-components@3.0.1236-beta","_shasum":"1369641ab2c88020f452173d7d099c7bd74d7f0a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1369641ab2c88020f452173d7d099c7bd74d7f0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1236-beta.tgz","integrity":"sha512-on0lIML1jICQO8OLwGj9bLXI5e7Yqw264tknZAGy7SR0sqpGvzl95t222s0C+MF2pqo+mV1SHDE+tVUtamXIFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/J2MreOghRGRrrAU24XIQ9LSdgLoSvWo5ql8MAx8RjAIhAIPThjvIoQ3K3wIswRJ1WBZCLubxW8AEcRHtlZ8yyu0M"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1236-beta.tgz_1504712555703_0.304913891479373"},"directories":{}},"3.0.1237-beta":{"name":"meetup-web-components","version":"3.0.1237-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"7e56dc45dcee485aeae710cca063a6059fa17962","_id":"meetup-web-components@3.0.1237-beta","_shasum":"50b8addf9cb0dcdbf5395295cf9ee74329d16441","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"50b8addf9cb0dcdbf5395295cf9ee74329d16441","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1237-beta.tgz","integrity":"sha512-7CLvyaKtgxyTU8mnkoZ+4q0W3eqPcp9qLFR+GyyOpkSQ9IgV/T55RRQ+OcczgTG4Bb8bsE8Dx7oqj+/U1oVSvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICHdt5ev8eK1Z8v1BMhKztRkXjCarJYHV0As7VaObDxXAiBoRv9XM48VwaNCsHR38/GCYKcw/xAhhqWi42TZAkxTYA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1237-beta.tgz_1504724847582_0.55741659225896"},"directories":{}},"3.0.1238":{"name":"meetup-web-components","version":"3.0.1238","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"ee2d79a83dedeb6462c8e85b44174cc38e52c282","_id":"meetup-web-components@3.0.1238","_shasum":"3eea5f7e2978565e5bf36b78ee64d2bbfe33b35b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3eea5f7e2978565e5bf36b78ee64d2bbfe33b35b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1238.tgz","integrity":"sha512-tX+ol+owU41DUjHMCI66beUB/cWpMOohUjsLHEG+TLslQEOTB08HANfUkduSKAfcied7NhUxBi7oIHtfpL/Zdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMt/JYYSAdyxp7LfSGiwtJth1JRSrIndICsMCuhzLMfAiEA/m7Oof8M60uhrZUYN8eyna5qPUf4FpAYIvr8UPBrQf0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1238.tgz_1504725174256_0.8428387285675853"},"directories":{}},"3.0.1239-beta":{"name":"meetup-web-components","version":"3.0.1239-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"5d1e7358a0cd1e562208584751c8aa021531c03a","_id":"meetup-web-components@3.0.1239-beta","_shasum":"7899a9fb8a7b33488d5ab57fc05f63b05081d378","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7899a9fb8a7b33488d5ab57fc05f63b05081d378","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1239-beta.tgz","integrity":"sha512-l/cTPvPvH8lLaUJXE/qTh1ZL0GTob7mwjdy9/Gbk5qTc4fdJ8Ski3j438ODXRQ1Rti+0Y2QeVGGz8GA/w6K45Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAsKhxoatZA8dxQC9Ty6im1Il/jUsnm2LamgAPLbC9g0AiEAhF+B/XbMsvTG1J9ec1UtIK/5TpT1/01pLwjdAZd0+1o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1239-beta.tgz_1505157948725_0.23115847609005868"},"directories":{}},"3.0.1240-beta":{"name":"meetup-web-components","version":"3.0.1240-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"bc1509562056c50b3080e07b5795c0347d56376a","_id":"meetup-web-components@3.0.1240-beta","_shasum":"1c4f1b05a93ba70e4c0bf9f0ed8ccfab01b0aaa4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1c4f1b05a93ba70e4c0bf9f0ed8ccfab01b0aaa4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1240-beta.tgz","integrity":"sha512-05eIbEd8H/+Y29mNBYLqXf14jTfhXY+DzSefhWBvZqwgv8gnQ3BoAWzgQBRpGr6Co3AlXcNYD6glzyvIeFbd4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHbzdGpbiiS8RAgHLsUE0pDDB11iAItcCE5nBTnWtGnuAiEAmucBoV9gAM8fc5XJh4cvluCxynrbASSm4eYfBlbs9IY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1240-beta.tgz_1505158400089_0.10526381665840745"},"directories":{}},"3.0.1241":{"name":"meetup-web-components","version":"3.0.1241","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"20a4fd4908fc7b64d68f0ad2e68211c8ff84e0ee","_id":"meetup-web-components@3.0.1241","_shasum":"957623b1547f41520ea925c3fcdf4d09720e21e5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"957623b1547f41520ea925c3fcdf4d09720e21e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1241.tgz","integrity":"sha512-1eCokdjraEiu5nWQxa9mAM2LHO1A4cmhnpEZqoFY6rLd7flOUNmksvV59wwaJIJfPIolGVGpWOUlnqbPL9ARjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVeqnajdIcvnFdmn2bRmwO2CeM3qvkm4Oye0Us+JSPvAiEAuXjATGffHgf2EuZCLMPGmkmRoBuyhC4vEETFTMKsQnE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1241.tgz_1505158719350_0.6352961005177349"},"directories":{}},"3.0.1252-beta":{"name":"meetup-web-components","version":"3.0.1252-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"3466b4e401f2842d53548ccbf032a86abea0d3a6","_id":"meetup-web-components@3.0.1252-beta","_shasum":"b47dcd5afabb6f215e14aaa129a84ffed447d97d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b47dcd5afabb6f215e14aaa129a84ffed447d97d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1252-beta.tgz","integrity":"sha512-5YP53GIP1SCjI0e0gziUl5HrtP9xovgXCTlwGTYv2iSIGQrz96+SXEc5ugLMOHmzKr7+w4CcJ88zn/DM+2IXvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWEYScUls9O9mL4Vqvxfze4CXJxGnRGGJLluZcAzj/NQIhAMrmecyGrCSBYFDJSxNKah5qHh+LyNaaWrn52NvCRyl/"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1252-beta.tgz_1505333169910_0.7809548808727413"},"directories":{}},"3.0.1253-beta":{"name":"meetup-web-components","version":"3.0.1253-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"833f4ccc44bcf43aa2c2c9253b3587d59d924d8a","_id":"meetup-web-components@3.0.1253-beta","_shasum":"2c69e294a8cb5ab0c1add1434684db86c8cc7c56","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2c69e294a8cb5ab0c1add1434684db86c8cc7c56","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1253-beta.tgz","integrity":"sha512-f+s17UqEgJyeFbAsSWP60gB9JV/E6dzEWI5uWm3HwKTBB66wy5omIfYPF/6NpoxK5Xa6FhpU8wbLrnXOH1sWVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwSuVoCqRYvI3m41vrNczwEUAx/4+c84rRR1S5rxNxdgIhAKwjm7UzRf8rpt6S1vDBlNGjqmZsS7cFSEdUTgZWeVWa"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1253-beta.tgz_1505333713130_0.9223823177162558"},"directories":{}},"3.0.1254-beta":{"name":"meetup-web-components","version":"3.0.1254-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"0470bb7b4ea54b4ae1d7780bf27ef7cee35a17d6","_id":"meetup-web-components@3.0.1254-beta","_shasum":"9db50646ddba12a2db71ba88a75022fd07e91495","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9db50646ddba12a2db71ba88a75022fd07e91495","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1254-beta.tgz","integrity":"sha512-EDP8Mctz4vEzsG+dCsJu4tPBYPvSGbFC3VvY4gvOVk6LuBqd2OYGt1iwgzGO+/FOoGBAK7g3+qJ/SceVrN9RNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEx03fC1D5I84D28zAbP5736oDntgiLxgnPjDpojU+MxAiA8qGSV8RsyJqkz75D1HMJI2kOASAkWbtSq0VqOK72N6A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1254-beta.tgz_1505334047867_0.35618309304118156"},"directories":{}},"3.0.1256-beta":{"name":"meetup-web-components","version":"3.0.1256-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"0ced78b10382516097fbbd540529ee72cd4a4ded","_id":"meetup-web-components@3.0.1256-beta","_shasum":"0e7b6c9520203ac508d7138e8db7645c2c8fa4a5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0e7b6c9520203ac508d7138e8db7645c2c8fa4a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1256-beta.tgz","integrity":"sha512-VoY/WhO6zZ/+zxof8MWozEs4/oa4n+7KR7BFF5Otbl32fPfHMEnCuBkVCMjKed+h8dt+YvqAXu3u8csrHe9n1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEx91dLHQlu6ljpDpayGzjLJ4Cr1Pj6VSLY/yO4N+S3tAiEA/virwPKcVmK/CdTLGvIPWJaVy6sKLeOz6I1qYOiy1Dc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1256-beta.tgz_1505334395697_0.04109458811581135"},"directories":{}},"3.0.1255":{"name":"meetup-web-components","version":"3.0.1255","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"6de8c5e2f31517bd1440c4340198bed4e36e3324","_id":"meetup-web-components@3.0.1255","_shasum":"8d127b8c36a96d7ab1312539c287e9e9ee80d191","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8d127b8c36a96d7ab1312539c287e9e9ee80d191","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1255.tgz","integrity":"sha512-n1TJjdFRCnFBkxa2Q4Ic6yNeQpA2S6tKW5lMgZYB+8vuVFUu9LcraUzcq71Kh+ntD5bf20lnO3znDmgoaV/KxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICUJlEXczqRA+cdRw6f6FL1Bcn4UaFyq/MJJjr+ZOcqWAiEA86OZ2cTLWmBsmnuDvRSXP6YGqHpLrauiUEmJYi+TF/Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1255.tgz_1505334410472_0.021070872200652957"},"directories":{}},"3.0.1257-beta":{"name":"meetup-web-components","version":"3.0.1257-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"0994ee9a56633e351e6af4da0bda82c04d5b1ec4","_id":"meetup-web-components@3.0.1257-beta","_shasum":"17e87ea1e37abf7d5ab9af1e7ccf2344e0ede9ca","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"17e87ea1e37abf7d5ab9af1e7ccf2344e0ede9ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1257-beta.tgz","integrity":"sha512-XVjmdCUzGyQPPQkv+aIbvajKLHsnL/KRC2c3jX1tx6/AVrw07kQJxx/Ywb4nD3bQoJnI2Npla4lL98zbAXD8MA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICE0nTztuny/mMY0zWPvB57w2aR08xFazteQLn1eV0dTAiBZc1a32tw7OtTCxObE9oSQhdD/AsCNGBKGcrz3rsrbXw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1257-beta.tgz_1505334800999_0.723713630111888"},"directories":{}},"3.0.1258":{"name":"meetup-web-components","version":"3.0.1258","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"29dce664adf96b28afaa6cf5306b0a2acbad84c5","_id":"meetup-web-components@3.0.1258","_shasum":"bfdf1fa22567eedca58f1d8f62381e3c2ac86425","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bfdf1fa22567eedca58f1d8f62381e3c2ac86425","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1258.tgz","integrity":"sha512-v4tIHSs7Z/T/go54hj2s2QcfKWo9cx8EQ9wzJ2NftH0sK9bhIU/xWffN3di1vBFJXnl9hQ36p+ncI9FML0It7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNBFvpRtJRInwHqw4dtBHo7u15CZGp2oQNA4oKLh+QRAiEAkwI9wuH0h29z1ilUwVXRAH6c6+4ibcNcPhr//Z3ly48="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1258.tgz_1505334944283_0.5749027801211923"},"directories":{}},"3.0.1260":{"name":"meetup-web-components","version":"3.0.1260","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.129","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"73bff815587db8793a320cebaf30f25cda44a09d","_id":"meetup-web-components@3.0.1260","_shasum":"8ab23f5289647f0906bb943a3ab58c63dfc58ed0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8ab23f5289647f0906bb943a3ab58c63dfc58ed0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1260.tgz","integrity":"sha512-J71WoG5W+owklYOEsVoUaKVetzLsK8wKoyU1ovD8rbGhR7gR6njDuPXQqtgLBVlDoGKIlQ2+atKT8SPyC09rZg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7+iJOrZaI9fsiA9C7TkVq1/lEGKITJk2mFnsXDfuvpwIgJnEW79jHFEMit+Yuk/PO6rNiZYvgHFM7ccp/AZvs4+0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1260.tgz_1505404300646_0.39865750377066433"},"directories":{}},"3.0.1261-beta":{"name":"meetup-web-components","version":"3.0.1261-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"95d1c89164f31245443e2fbbe397920b4634c9e5","_id":"meetup-web-components@3.0.1261-beta","_shasum":"6a38c591b79838042880bae05131900f73d19abc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a38c591b79838042880bae05131900f73d19abc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1261-beta.tgz","integrity":"sha512-QiEXji0KeaLbMlUI9f9OXwE03PNHqT5SZfOqqggb8a56LsqpESNvgI9cZCiIfyI/cHB8/FBKb/Ja0G0Gg93l2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5Xw6cqP7iFgS2p5zljSGkSHlWsx0bMO4OabMoAlO5RAiAo9aIY0FnTJPHj+kuS/HlDz7aOu1lv1iPPyGT/twoGNQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1261-beta.tgz_1505407012668_0.20363407884724438"},"directories":{}},"3.0.1262":{"name":"meetup-web-components","version":"3.0.1262","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"31e4cbc1c4000bcfaec0f73571d69abed499a595","_id":"meetup-web-components@3.0.1262","_shasum":"f265d9b1894703ba44a5d0f4c512d5be9b16b97f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f265d9b1894703ba44a5d0f4c512d5be9b16b97f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1262.tgz","integrity":"sha512-+IsW1ZN4RUC/DT9TL0ApCZgjL5e/IApWN3NAtfyLit3hTpw2OUlBm/FzmmK/CcyaBOt6ikmLL+M/MWSqm+F1sw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkyF98dd2K/BFZq2I+eIsz1wtXFJYC66Osla6tGqYhXAiAJgtMJZwIFfeqvfcItI8N/YHsnOOLUQKYlPVMBIhrpGQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1262.tgz_1505412684639_0.3114665122702718"},"directories":{}},"3.0.1263-beta":{"name":"meetup-web-components","version":"3.0.1263-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"e3472face58421d18e07048bbf99b4429397bb6d","_id":"meetup-web-components@3.0.1263-beta","_shasum":"b393efe42beb793a20ba22eafcc7f03aba47dae6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b393efe42beb793a20ba22eafcc7f03aba47dae6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1263-beta.tgz","integrity":"sha512-9COqSb46bjQUAVvjtI+VCUytEi5mnWGShY0Rj6nNyDufzrrSnsWyboAbyBt9SomZXRmKqrn8PldPz+2NilNQZg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8gbI+JE6MvX7ad2kncgFSdfqOXsXP12aDebnrTNUq9AiEAmHb0bkhKMHZYSMRh1mHQ0qcn56EHEyGpuWJ/Wah2FhI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1263-beta.tgz_1505768616047_0.7730467247311026"},"directories":{}},"3.0.1264":{"name":"meetup-web-components","version":"3.0.1264","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"e6556498d980d5e401ba1f02d700e7ebf96e8de5","_id":"meetup-web-components@3.0.1264","_shasum":"9904f2034755a442c8d1638d0e6eabbd93a22a1e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9904f2034755a442c8d1638d0e6eabbd93a22a1e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1264.tgz","integrity":"sha512-wA5VwcV9eMM/7nmTr/zsqlBLLmOFpPXy+te8v4tSpOSFHwvrecC9XgeBfogVEkeiaSj8NLQjV79Jxi+H8L0kMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGFJhoqzrswG1cd2SnGKGAA027D+UCd6H5misqVNln4AiEAxFoW5PhfBKQz9myy2oaLwVWcPNZATQ1oPnvSYfulGJI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1264.tgz_1505771363369_0.9353880118578672"},"directories":{}},"3.0.1270":{"name":"meetup-web-components","version":"3.0.1270","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"1142e1b9aa3c31dee7863c7ce57164ff694c5d80","_id":"meetup-web-components@3.0.1270","_shasum":"73e3ea509029b9eb265fcbf5874bcb2c91b09463","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"73e3ea509029b9eb265fcbf5874bcb2c91b09463","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1270.tgz","integrity":"sha512-5GxIROf1Un9aNJ03c070O2+EEr3kAijVJ97oAzrfxActx/JPUEe0NRpN7/q0P93mpFnWTWOuU8aKldkli+Xveg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6FuDh5yL1/tphBQupjlyv4GyaRV09U9ORop9r72YA+AIgWKseGbXldFhL+R/U19RThqOqHkA7coGqswhA9no0TaA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1270.tgz_1506094417695_0.5176729906816036"},"directories":{}},"3.0.1271-beta":{"name":"meetup-web-components","version":"3.0.1271-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"0c1575527456582b87f8a312538196e64d2009f4","_id":"meetup-web-components@3.0.1271-beta","_shasum":"8aabe7e343c8831c455529c78cb8e0f9398ae7cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8aabe7e343c8831c455529c78cb8e0f9398ae7cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1271-beta.tgz","integrity":"sha512-yOYtaUVN5C+GLTX6E8Ip24QAhvd+QPBI53kmrSJJWlyfomJ0zOvsqjRJ71hbPHZ/szDOZ3vg/1A7+YA8n9QMKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNtlpEP5zdcwoQv/cxc6oSw0Te+EgMNF+CmQlO+XCqyAiAmxQew4oGXdiAtjDL2r9yeP5AOQ9YiuVeQUOVFdZ/QIw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1271-beta.tgz_1506106047790_0.8533258938696235"},"directories":{}},"3.0.1272-beta":{"name":"meetup-web-components","version":"3.0.1272-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"40265783e4d23d5cfdf77058261260d6e63ac991","_id":"meetup-web-components@3.0.1272-beta","_shasum":"44d6cf38195222bca0fe26fa9f72a9c2d1fe585d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"44d6cf38195222bca0fe26fa9f72a9c2d1fe585d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1272-beta.tgz","integrity":"sha512-uMDsRyZjVVCpi+aaAoLdri0n30QuczRRwOX5ZsxsHIvupKWIqHy0UvRvud/LAQCDPGf1YyN7K8GGHSIsWU5AJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmH79edCYrpkkNBcw2SfLUZajMbMYyOqGFjX+2orMVWwIgD7IaCI2jQVGvgEtXpiquulhULX5+eDbKH18laVCgeRg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1272-beta.tgz_1506440817045_0.9066153389867395"},"directories":{}},"3.0.1273-beta":{"name":"meetup-web-components","version":"3.0.1273-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"4ee39916026cb4bdf5d149e61df848600c217c4e","_id":"meetup-web-components@3.0.1273-beta","_shasum":"8c582ae2cd9fddec00ad1bfa1bae1c3a6f8bf727","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8c582ae2cd9fddec00ad1bfa1bae1c3a6f8bf727","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1273-beta.tgz","integrity":"sha512-8TKwleR/gsRJPhXz7SAPzOC3ehvXJ394IjILGYI4kDbMqhGjXYdtPkBQ3aPlu9mMeF5PmupZyI0HUaB7K0Xh/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEmhVMOyy695iYVkD6pVXLiq90yF3WPSAuYFxg3mlBRgIgL1nJ0r6imFMu+MUz6mNw3z3Y9z7f+3jelciB1QfU1w8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1273-beta.tgz_1506440941326_0.880338154733181"},"directories":{}},"3.0.1274-beta":{"name":"meetup-web-components","version":"3.0.1274-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"c68c1167929179b161537c6c75fb5f52ca782a42","_id":"meetup-web-components@3.0.1274-beta","_shasum":"0872c73ace3ff4539ed9cd05ce18308a75c76e5d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0872c73ace3ff4539ed9cd05ce18308a75c76e5d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1274-beta.tgz","integrity":"sha512-C3+ZSfw339veM8XjIL9WmzYP5POL7CGyhIdSK5mtG9VlwxyvKwNNLd1ytUxbuz4AT5M7RfL+oeLfmE4L9CiHrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIExXniSdMyFVnxgxf05g3oH0iRQf0Lk2oMknRV+btmnTAiAUjtX4bbdn4EoTd4FotoNPjCXNpJg9aGRp1QN/M1l9Cw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1274-beta.tgz_1506450856174_0.64993582572788"},"directories":{}},"3.0.1275":{"name":"meetup-web-components","version":"3.0.1275","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"624e3ff9508ae5c9d8437b9c42c95dfc94aa799b","_id":"meetup-web-components@3.0.1275","_shasum":"9f9cd7780fea5ebcddfefcb8fee59559cf581837","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9f9cd7780fea5ebcddfefcb8fee59559cf581837","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1275.tgz","integrity":"sha512-xoAHUxeNVsVEWou7N50gK6gCOBJ+QrrgbbdVEkKvDcy0KtT4/T+zan3JSNCr9htGIRLKmFiLIJn0xE40kUKNaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtL56Zdd3rwC+IViW2HrwUNl+9akwNyJtN1nfknkDJuwIgZ1rKwnEmDr8ZP6Vvhh86JfM6F6kWFQ8//tqoYZ+ECys="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1275.tgz_1506454945516_0.5503725360613316"},"directories":{}},"3.0.1276-beta":{"name":"meetup-web-components","version":"3.0.1276-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"c039f81e1a5682220c7258e539dfe2cefef42e9e","_id":"meetup-web-components@3.0.1276-beta","_shasum":"9c4c88d8abfb7f17eaf270683a2816804fd24856","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9c4c88d8abfb7f17eaf270683a2816804fd24856","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1276-beta.tgz","integrity":"sha512-/CQ0cdvPJ7p3UgLTjgCwYcv6JGz7dszp0VoiSkb9TRBqQ/zgL9JU0tQ45efq0r4BUJLgnToBxDRPqZEE2tEccw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPEaZYI/txpA9X90R3P0R5QejsJutbfWL2jHMsHP1BMQIgDwewIZ9UAAOqblOaWnrnBc5wDzymkUz2HBy6v1DYKV8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1276-beta.tgz_1506457502281_0.48056406201794744"},"directories":{}},"3.0.1277":{"name":"meetup-web-components","version":"3.0.1277","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.117","webpack":"2.6.1"},"gitHead":"763645187478fcce874507827a356a9dced11285","_id":"meetup-web-components@3.0.1277","_shasum":"5a16bdd068322f8178955398e6f482019e6dd9f0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5a16bdd068322f8178955398e6f482019e6dd9f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1277.tgz","integrity":"sha512-MBd/DeWcksjJdr1iHq3MQ2LSMCo29Fi93U7S9+CDyNI6jq/CdVm7JqVqNG5MGMCch5REZVc9+uCGBOhdkBEsaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEss+k4wLrWSf9cF/hjebcgzA2sxqUBz/SyHqvr1KtBgIgb/zKX3yBgez4uDnmOr/dpX0xdgrvzqv7C4FZwI8Qm4Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1277.tgz_1506457915504_0.5119153542909771"},"directories":{}},"3.0.1279-beta":{"name":"meetup-web-components","version":"3.0.1279-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.125-beta","webpack":"2.6.1"},"gitHead":"a1e175f7a2675548b27aefc6b8aa233cea6b5024","_id":"meetup-web-components@3.0.1279-beta","_shasum":"cdcbc58ce7899dfb78bff68801b2250e47b86bb0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cdcbc58ce7899dfb78bff68801b2250e47b86bb0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1279-beta.tgz","integrity":"sha512-4aHfiQF4neU4yBg21R+wC+rtLeTd09bAlskYD8N56so7SgJYihOg6fuJIpUaZenDMXMQj/mTZnw9W0X9hkISaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGjMc9kwZezB81cnlR98aky0keMgtGlwIHOt61RaxUNYAiEA8rnYw18Vu9FQC/Il6ZZeV91CiQZL35ydNJx0L3zwi24="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1279-beta.tgz_1506527004629_0.5302684037014842"},"directories":{}},"3.0.1280-beta":{"name":"meetup-web-components","version":"3.0.1280-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"9260a6499ba673581724f977f310717a6c889a0c","_id":"meetup-web-components@3.0.1280-beta","_shasum":"1c1439052acae5ed0449bc527fe6cf5de29e3b8b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1c1439052acae5ed0449bc527fe6cf5de29e3b8b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1280-beta.tgz","integrity":"sha512-btMPDNBf+v3H1thjJEi10azhBcgIK8L2eRfQ+SUxt6N2zdItmNF8rBpfDLqjKBa9BkdofqDFhhjYu6BFkz4/3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfxB2+btqZUeJtlZ9+K49GBCKa1D3ZUicupnem1HmJhgIhAPD2qi2Ckh/vV2obZlYSw/PWAdeGGKbu/uGLQ6vgL8d2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1280-beta.tgz_1506548118044_0.8886350521352142"},"directories":{}},"3.0.1281":{"name":"meetup-web-components","version":"3.0.1281","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"dfe47ead50793e9db915b62fc48f494fec2727f8","_id":"meetup-web-components@3.0.1281","_shasum":"8bf5b35c3bcfcf38826f1097803587b9bf40daf9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8bf5b35c3bcfcf38826f1097803587b9bf40daf9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1281.tgz","integrity":"sha512-2EDygP7QSPotvo4quXB9I1+kLsOyGqGa8Ye+45KZNqeCscrvj8DdQwL4F1n0ft+glcOSaNbt1Z1ygvK+Nt6lsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFtYKb0d5NWApdQspIFmsFF+IqMcw1hK/wGAAdvLpKfdAiAZNrYb+zM2saGXQpd9I2AtSuQB/2lO35Y7MtVCOUpFYg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1281.tgz_1506551863543_0.4068554127588868"},"directories":{}},"3.0.1282-beta":{"name":"meetup-web-components","version":"3.0.1282-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"4fbb47e852d0ab3bb01175abc04a17e2d9c62af0","_id":"meetup-web-components@3.0.1282-beta","_shasum":"7525d45b0bb7fef13ff6888a5c6d64a9090f68fa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7525d45b0bb7fef13ff6888a5c6d64a9090f68fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1282-beta.tgz","integrity":"sha512-UdwwCboFVIeah9fkqK8OenX8a5IBTW29/NWl0iLIozAntJofSAqTrW9JwzR7LUX3KVFpvWhimjHzqAPj9FlMAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCA4u40PSCxs88iLp9LRHh53CNSLid787D8rDr51JUTrAIhANLdrVQlkZjwjpX0Ux4VGGdyCyGeunpVNACuBbWFmLgl"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1282-beta.tgz_1507074047191_0.3708731073420495"},"directories":{}},"3.0.1283-beta":{"name":"meetup-web-components","version":"3.0.1283-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"c0152b5d120f8f077c18775061fcae0e16438ffb","_id":"meetup-web-components@3.0.1283-beta","_shasum":"57c1851e6f93292297b1696d6dd7a670eb02b523","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"57c1851e6f93292297b1696d6dd7a670eb02b523","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1283-beta.tgz","integrity":"sha512-2BJl2MV86xaYSkmYyJs8E3uCCLRF1fu1gSTuhMshhmbvuUlHHkxZYBbaK4yhSVtzOAGj2pPbzaiRuGmwU+WMJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoF57U71llzWc0IaI7dl4JrXVNH9Qc9Bua4SzMxDl13AIgTJ9nU3FYjZOipApNOJV3myJ9tqAaJOngblXGVVSb67M="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1283-beta.tgz_1507074439412_0.9580341738183051"},"directories":{}},"3.0.1284-beta":{"name":"meetup-web-components","version":"3.0.1284-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"731f38d57f6d6b4682561878002de37ad729b7a6","_id":"meetup-web-components@3.0.1284-beta","_shasum":"0b2af87d943b0342e977b1bea9aba53ee0658cc8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0b2af87d943b0342e977b1bea9aba53ee0658cc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1284-beta.tgz","integrity":"sha512-MoXghMdYM697ErR7uWQyXvgKeT9dRfnjCI0ZionQYX0qYZjzrVj+FtjPUx1XoOeWMj8HADemojqUJGILV1zF6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAE41PAfAo3Dob/2E6ALkpcD0UQ7ISGZhLeE9l5ymyVqAiEA7XkJbAhkrQJyRcDZ+ja6Hk4R0sQoSt2gYbKVbbOSuxc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1284-beta.tgz_1507128620634_0.9204381541348994"},"directories":{}},"3.0.1285-beta":{"name":"meetup-web-components","version":"3.0.1285-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"f10ec96b5fdcd4b414852f0a48fe971bd0cd9853","_id":"meetup-web-components@3.0.1285-beta","_shasum":"7b6ec07eee5b485382baf58bc59ec88607ce0bac","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7b6ec07eee5b485382baf58bc59ec88607ce0bac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1285-beta.tgz","integrity":"sha512-GU2urMtZUbWEyNw3NGKWllwh5cPVOsFMv9EP6TsAy8Kc7WyiU4YrLKUcp/rfgJx5INYdzzGTxmyKgAWV1oD3mA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqtqFVRBwZ/j17xOW8lIlZaHKn2KWScm31bZtFHgdIIQIhALcOgTBciu/c7PhiXmTZ2LxiPbmBOa8FGSOE1ekgbCj2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1285-beta.tgz_1507133985408_0.800287616206333"},"directories":{}},"3.0.1286-beta":{"name":"meetup-web-components","version":"3.0.1286-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"f5435277f0055f9e210285a4cc90c9f4f2da621c","_id":"meetup-web-components@3.0.1286-beta","_shasum":"623c10991b2a4c06f414e1472b19c217baf719da","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"623c10991b2a4c06f414e1472b19c217baf719da","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1286-beta.tgz","integrity":"sha512-/E9gXpyCwSeKm4/oOXLCMJIDWlYA7t276z7f807PCsTP92ofpu7Mlo/D9xGnD23fXcBRiLQ5fbLgjVxO38Dn0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiZbgl8HXc1fzKxh/z+07apDgD/SEaWbxgWppfpS6FlwIhALDjBsEbEOBgUcBy3HvW67gcKvxmWu4kWyYMyRCttOWR"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1286-beta.tgz_1507151344505_0.12548872060142457"},"directories":{}},"3.0.1287":{"name":"meetup-web-components","version":"3.0.1287","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"d43e368bf3cc2be44137223e3bde10b5fd361b9b","_id":"meetup-web-components@3.0.1287","_shasum":"1896f7a51bd144d181981eb84ea4877cbaac435f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1896f7a51bd144d181981eb84ea4877cbaac435f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1287.tgz","integrity":"sha512-A4WhUyenx5vt606HHEwF8U/+0WFQMJlUpkAoOBDKOz/XqqTgIYpTM3p/izFSyoolRs5RwupYILw934UgbgLPMQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrs9a+KZQXbNyZV1q6yPUzVWY+DNSuivSQFcxH81eMPAIgOuI+JMOpUZwP+1muNEEKO/utpYRe2mOS1Z9PIdMvgKQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1287.tgz_1507152403725_0.22335719177499413"},"directories":{}},"3.0.1288-beta":{"name":"meetup-web-components","version":"3.0.1288-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"d0132c6b797895977c92ec6be0579d539d66bd6d","_id":"meetup-web-components@3.0.1288-beta","_shasum":"cc7de1869dc4730dfc630a791134ed917c6f5508","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cc7de1869dc4730dfc630a791134ed917c6f5508","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1288-beta.tgz","integrity":"sha512-uv2fJLksfn2qShpPcDCwNBQnmOUHWPyV701zK///Mwfw3+L01Zad9DsBeURy2aF8/ZAhM14/WPgQZHRTO2rAVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHrpOr6fYAYSTJX5TMIvowuGDxAJTOk1/YJJ/BFOBWl/AiAhiUTZ2oNz/X7E7i+Aff9pcB+xmp1V6/qCEXsbaFa9Bw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1288-beta.tgz_1507215386538_0.44547718251124024"},"directories":{}},"3.0.1289-beta":{"name":"meetup-web-components","version":"3.0.1289-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"2e20ad182d33c22ba98f8027e4ff4072c33f271b","_id":"meetup-web-components@3.0.1289-beta","_shasum":"80f6dae8c806c1fae463e762b3f546333f9fd841","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"80f6dae8c806c1fae463e762b3f546333f9fd841","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1289-beta.tgz","integrity":"sha512-OJB+K+2che3Qhmyrmh3ziymZTmPJrEN5GVNks/8wAhIZkb9VMXGylXd3p3/hJg8ralt1LTOqn7NX9z8awnB/OA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOKM9RUgYP1r85p17WkmHjbw27MVNCFleWipxKLopOxAiEAvT8aEEKtKYdaY502dys1cRQr6XlVlrDfCkDGoJm2VB4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1289-beta.tgz_1507217818558_0.15289876353926957"},"directories":{}},"3.0.1290-beta":{"name":"meetup-web-components","version":"3.0.1290-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"266cdab7c18a0d8d743999f65d95439a0287a3f1","_id":"meetup-web-components@3.0.1290-beta","_shasum":"54dbba60b66fabbc16fd032578f87cc078c320c5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"54dbba60b66fabbc16fd032578f87cc078c320c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1290-beta.tgz","integrity":"sha512-RUveciRXEjE1vkVPXooU9DMOoCJ/fS2hl8chCr9VyxtqevgvfSwcWalNGypJ8Vg5elRsUWgvGOD6QG7HIHHpIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6DVzCcJARpWl7leZC5qm+osmHUvzSEPsRzZWmj49wXAiB1TzmaSamzWGQhYouevwdT2FNIBlfsPit135lzMiEfPg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1290-beta.tgz_1507220298757_0.20548875955864787"},"directories":{}},"3.0.1291-beta":{"name":"meetup-web-components","version":"3.0.1291-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"8e7ba648f76ac26ef7533cbf910c756768089a1a","_id":"meetup-web-components@3.0.1291-beta","_shasum":"dcc418ee7a0e653b39b52a1e0fe0aa9c980a865d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dcc418ee7a0e653b39b52a1e0fe0aa9c980a865d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1291-beta.tgz","integrity":"sha512-PlxLm/Qp2fJq/V3w/Uf+qRJYt94eGgkw0lEN9mY8yD+hpvDrTeHurH1yRMi8zR1dJCd7lK8jy8kjVcnk5Bybaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGTPtUTBpbvn2qYeZrJW9NCNYFJuzzfMPHuro6jd9JKWAiEAhm4ovTMzJ7AlWszgtwSittM3WrEIurCJzVN73I6aNSg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1291-beta.tgz_1507220333322_0.13644110271707177"},"directories":{}},"3.0.1292-beta":{"name":"meetup-web-components","version":"3.0.1292-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"b0304f88ca0c1273341e8d630c12bd2785f05bac","_id":"meetup-web-components@3.0.1292-beta","_shasum":"7ec7bf43e93a209e6d11d55a8a92fbe6cf988fac","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7ec7bf43e93a209e6d11d55a8a92fbe6cf988fac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1292-beta.tgz","integrity":"sha512-4kqMd//PvWId1tCasJbtJqDcYEVGQRIqYSFtZmol0U+eyj/7hmDL5xcIxs+3I7ZszRp3+FE+s1QGfwbu6ysmRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXKWQuwdQj02SrjO+scnUzMNEfOkzXfPVXKwFiR10AhAiEA2pXlUZU3Aapnm7j6An4qcBO54gpYynHLUcVDVvw7iX8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1292-beta.tgz_1507221732995_0.5435345668811351"},"directories":{}},"3.0.1293-beta":{"name":"meetup-web-components","version":"3.0.1293-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"9ba1941a103a621589e088fc800b631db2a724cf","_id":"meetup-web-components@3.0.1293-beta","_shasum":"ff33550fe4218355261a324a58fc10c474dae0e1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ff33550fe4218355261a324a58fc10c474dae0e1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1293-beta.tgz","integrity":"sha512-H32TK6RCoVaYA6lbRIr/Ug+4FgAwINIMhmulTzrXcEQe/dECaB92JDQv9T4YR0kSCDc+kAsJmm3fTBDIIhM1UQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEIImV30UqkRLk1EecBCg6319Vm1oM3zxbKXIuRru9caAiEAm9Zgvvca407hA9SEcqOPhLKCP2A//516/sxNs1lmOUg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1293-beta.tgz_1507221893286_0.3798126601614058"},"directories":{}},"3.0.1294-beta":{"name":"meetup-web-components","version":"3.0.1294-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"d2a7ab3d3da159b58f36716447725bb1d42aab80","_id":"meetup-web-components@3.0.1294-beta","_shasum":"ca4d00d2cbbe0cac058baaa2f7b9ec9e9db5205e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ca4d00d2cbbe0cac058baaa2f7b9ec9e9db5205e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1294-beta.tgz","integrity":"sha512-N9Nerz/TLoJrpkhLwzHoEF7e4DYNvP77ZhhzU+bg4wdv8mHEyiw0/oOsvm6+1jUW83k+cU0m+bdwUPgFmXnqrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9kru7ECw+yexSYeQgDo2GiT7JAnEhhWpyG99iiVr+TwIhAO5XObZNpD6ZmWk/DyHsaZEozcNhvBP6reicpAszKQ3k"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1294-beta.tgz_1507225691828_0.1442841023672372"},"directories":{}},"3.0.1295-beta":{"name":"meetup-web-components","version":"3.0.1295-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"f767604e5ba185c4ad576e6789e323273863e32f","_id":"meetup-web-components@3.0.1295-beta","_shasum":"e552cb0aaa5a21f672abfb9b08b9c78a72f241c4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e552cb0aaa5a21f672abfb9b08b9c78a72f241c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1295-beta.tgz","integrity":"sha512-X8j8o5q/H60IGt2lZhducy5vaAPRj90SSuJ0+Oz6wFM87IV5BxiuUhQcL3V/RytMmic6uSD/LNxG/Jm1ZJIAVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPmEms9oTZ0AdBHMFPdTlyu6EMOaqH0ETnLfRKsTGlrQIgY+tsu82F2x/Q89xaEiU90aiNHuc5BHIWZLPBSbApTKA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1295-beta.tgz_1507230836223_0.8605700498446822"},"directories":{}},"3.0.1296-beta":{"name":"meetup-web-components","version":"3.0.1296-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"13b863683591c0f9518e940dea3a44562cff84db","_id":"meetup-web-components@3.0.1296-beta","_shasum":"30e597e25b1dd0ee2f827f09f317b07bb2c461c0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"30e597e25b1dd0ee2f827f09f317b07bb2c461c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1296-beta.tgz","integrity":"sha512-in3OI/tNCtJQHsXF3il6J6UoAenm5+MtHNn5XfrNC3ips+j2ptoR4oR2lJcMzn9zG2CqzaDGQPeWVhfHHYFJEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPBvS6fuCC0IuVnRauGIhEUu9GCYoHLitdOx/SE6wuTQIgJiiIENRU/2PwRAMJLH75qc/B69Dnb9fgApe5WxcYcfk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1296-beta.tgz_1507232414771_0.9609712730161846"},"directories":{}},"3.0.1297-beta":{"name":"meetup-web-components","version":"3.0.1297-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"bf5a2315efe2630efebc7bb575cb23474901cfd0","_id":"meetup-web-components@3.0.1297-beta","_shasum":"869c6ac454dce1829985e6819060e4a5262fa292","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"869c6ac454dce1829985e6819060e4a5262fa292","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1297-beta.tgz","integrity":"sha512-lR5duVwIl/yc3o370DjCVFYIzBwfDNoi4ZKQ0ik826gUAOsSseFHCVk553F5W+oOpug4Qjl1a+1NGVUNFXSyzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqskq16auMiUkDcA+twhWzGMJ1UrQaCUVDLktss1ocfQIgKRWLm5xZAubT22SkYIwRyAV+JEzbxawu2spwKQZ2vyQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1297-beta.tgz_1507232433497_0.3759810870978981"},"directories":{}},"3.0.1298-beta":{"name":"meetup-web-components","version":"3.0.1298-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"6dfa26b940fce1918913fdbd2c904a5ac55246db","_id":"meetup-web-components@3.0.1298-beta","_shasum":"3d89f36ffa9409c6989643e0fc394f7e5405ed04","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3d89f36ffa9409c6989643e0fc394f7e5405ed04","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1298-beta.tgz","integrity":"sha512-j7DS239LQ5GepQXR4++LBDVk5YxaHif3M7oyeJSqK9zdMFGFlNqfwwlE8dntObt9s0pPl91h5zrZP2tY1kr9qQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEBADRrBt/xud86a76csN+7BGBZI8N7mldevh4zquBmAAiBX+iAGwe4YSCTa+34b4LapZcdj0frIayfh38qhMZmsgg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1298-beta.tgz_1507232916802_0.24602400627918541"},"directories":{}},"3.0.1299-beta":{"name":"meetup-web-components","version":"3.0.1299-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"5aabd37357387ade9bc0a44e1faf0866eb2cfdde","_id":"meetup-web-components@3.0.1299-beta","_shasum":"e4cf126dfdfd5b39aecf0bd0c9a287bf6f71e21a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e4cf126dfdfd5b39aecf0bd0c9a287bf6f71e21a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1299-beta.tgz","integrity":"sha512-+rqoc6u5Bqq6TwKYDPn1gOsAAgeJeEDDFe/ipn0NX8lUopuCMZbUsCQ0AvdnXoklLdeu1vKPzCMeOfDVb/9VFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGnHjN0Z6eCw5/7PHLiu6cKYmUpeZ8TIFMnCKiV649JAiA/gnFhE0/LHH6qnEuPMP+VI4CuBISbHpM/s3GHcyzHng=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1299-beta.tgz_1507233058001_0.5912221122998744"},"directories":{}},"3.0.1300-beta":{"name":"meetup-web-components","version":"3.0.1300-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.131-beta","webpack":"2.6.1"},"gitHead":"2fbc03736fea730e0e94e62d6e21d650de5cd656","_id":"meetup-web-components@3.0.1300-beta","_shasum":"a927b353c2f5c8b5a24116720e07786363ca6028","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a927b353c2f5c8b5a24116720e07786363ca6028","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1300-beta.tgz","integrity":"sha512-C6XAhmyPF7WD/nmwEaMT4EUPBBJPb+dkdzicVluvr2qjkbVsJII2sCZrAqd2jOgCHSGHM7/7k0XtLMHfXyZg0g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy0pvpwlcIwpQ/CZJB7qER58v4nzd3hDMQZngx3r6lMQIhAL+DX6p/RX41AkCDB7EXkYNwAgwBSDwCuc3BtFPqDkoy"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1300-beta.tgz_1507235291143_0.7908306736499071"},"directories":{}},"3.0.1301-beta":{"name":"meetup-web-components","version":"3.0.1301-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"92f9de2a3a02d64f169e0437833abe11555f3287","_id":"meetup-web-components@3.0.1301-beta","_shasum":"002ea22b9d238ee618575f2a44467ab06ca0f7fe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"002ea22b9d238ee618575f2a44467ab06ca0f7fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1301-beta.tgz","integrity":"sha512-eesj3y2HeeLoAperNI+RGFK804bTSgL32FDf4X7N19pieyaF4LBYcPAZl85Vj6sn5iehjmJjoyp+OHURx9crlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC1rBYC+coVFseeR9K1eodi85WKkNfVY0sqODxdBlGInAiBlPLhb/3J15w9TKCANnMgcKv+8t9jn/KBQU/FOFadcIg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1301-beta.tgz_1507236229118_0.13214611122384667"},"directories":{}},"3.1.1302-beta":{"name":"meetup-web-components","version":"3.1.1302-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"7a0e00e068a3e92c5dfbcc2cb2658c1dd481af0d","_id":"meetup-web-components@3.1.1302-beta","_shasum":"b81d6a148d7252b7641b070cb7096bffabf79dc0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b81d6a148d7252b7641b070cb7096bffabf79dc0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1302-beta.tgz","integrity":"sha512-yYqgr8OtD9sThZssSVXO2R3lZUWSiagByQ3xa5PuKa7pqDQrASQZC3kEiC5WoHJ9OKOsaGTL1SnXT3L/4DZ3xg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNZEjQZmMXY+e1wQa5RazT8+3UcdDQ7qwXPBUa7YJkegIhAKtXvct7uKqZEm1JAwHOlsKUj930007C256vAEV8Yf4z"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1302-beta.tgz_1507238422572_0.5759480255655944"},"directories":{}},"3.1.1304-beta":{"name":"meetup-web-components","version":"3.1.1304-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"521109ab484de9794cbfb95d04b22a7e13bf4d0f","_id":"meetup-web-components@3.1.1304-beta","_shasum":"2cccbe0bfd6764b29e6c4a0f11120c9869a850b9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2cccbe0bfd6764b29e6c4a0f11120c9869a850b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1304-beta.tgz","integrity":"sha512-jkb5hE1k78wuuke5ytVM2YztnPo0OaG1s7QMSEZFvq2p1i/glz1rp0xPMYvq2JIe+ndjMrqM2wsOJrH0Mrz0fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/8Kl2xQ/s12bnMfaz29+3FZGYPfJCPV0L25Wlww5w6wIhAITqgxK+3/z/ytzDAsbFUK/LBJJ2Go99y4EotMHFEP9J"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1304-beta.tgz_1507238425853_0.2515507515054196"},"directories":{}},"3.0.1303":{"name":"meetup-web-components","version":"3.0.1303","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"996b1f17a78d17f6d845ac3eeb871fc8c3792655","_id":"meetup-web-components@3.0.1303","_shasum":"e1fe63a3889a4a98299387a97cbac555a2178c8d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e1fe63a3889a4a98299387a97cbac555a2178c8d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.0.1303.tgz","integrity":"sha512-CmJ7vDZrjBtNK8XkXz1p2a4+Bfc7QA8bkGGF8IlkuR0Oi4Aai9bjAanA7AAlPUWIPlM1cofW0pONmU4YV0snRg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDW5uG72Sut2lN8lXGRQgOrJtf17k37nV8ZvqCQOeX7lAiB8bZlx2bm+AhMYu1LawHu/mqrH44J1/V6lBbicanlPRQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.0.1303.tgz_1507238454249_0.10149706993252039"},"directories":{}},"3.1.1305":{"name":"meetup-web-components","version":"3.1.1305","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"629bc51db7317877ab79ba60d9ccc48a6cd662a9","_id":"meetup-web-components@3.1.1305","_shasum":"65fada6d8c07293457477ae62638fe995cb7452d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"65fada6d8c07293457477ae62638fe995cb7452d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1305.tgz","integrity":"sha512-y0p2rgNjWZq47I15VvnEQeCo3NLuhft1HR6Gg6ftk+91XcNIJJDUSfJkxrYV13uvXIJn1D2UWZx902h/o5JMeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn6DcCTL5FjcwRlja+M2fhhcI2yD1uUJjV304vnvqHwwIhANWgQA9KAs9D8li3lSie/JOQ7MUJfmlUubiz64G7lVBI"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1305.tgz_1507239834973_0.6160198517609388"},"directories":{}},"3.1.1306":{"name":"meetup-web-components","version":"3.1.1306","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"7d5c0c159c790f789806f0c4e13924a1ac4b1a19","_id":"meetup-web-components@3.1.1306","_shasum":"0f2f0c562efb5ad112443e22db8bbb2e47007ce4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0f2f0c562efb5ad112443e22db8bbb2e47007ce4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1306.tgz","integrity":"sha512-oOKLAn/+OmQGWANwvs0gsbYy5wWx08zUsOmorgjZoTim7CEiU09Z5ev0G1s5aqqy6kB2QltWXjdYO/TsDkxAGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbXe38PM/CG/LvUsQnI/P+V+djoFZs4SLGI24iY9rvQAiEArKnCx0CWDFbVgoRvnHY+dGJ8NAaHWKwFiDLystDmvsc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1306.tgz_1507246078875_0.2322963778860867"},"directories":{}},"3.1.1307":{"name":"meetup-web-components","version":"3.1.1307","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"bba8d54e5e5e6cc68e5f5f19951f3bac56c13a75","_id":"meetup-web-components@3.1.1307","_shasum":"2f0bf12a3a3734b8d9377c2a751942b7d721327c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2f0bf12a3a3734b8d9377c2a751942b7d721327c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1307.tgz","integrity":"sha512-phaphUtShAapSqqPndyCSVHxUtSmdvpMV5Q6P9QC1wLLHuNvsfaTuk6nSAsihuQbNWiIdwXu4UVGINd/hSyccQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDw7z+0sgFGG/XdInyGx+DPIljn5icGlTV6I609kRuvyAiAV+16Bfq14C03okrtAGpXRAxKcr1hCMuiPkZzdimAP0w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1307.tgz_1507246142272_0.24192800768651068"},"directories":{}},"3.1.1308-beta":{"name":"meetup-web-components","version":"3.1.1308-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"4d0e48aea2c990c48c6d9931c6676344e72b328d","_id":"meetup-web-components@3.1.1308-beta","_shasum":"0c73c7f4a86cbe9249ba5582ddef3ec2c4c306fd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0c73c7f4a86cbe9249ba5582ddef3ec2c4c306fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1308-beta.tgz","integrity":"sha512-H1/jNHGFv8Pr8wo9G4aUnOUeDBadeaUtnbl6yto6rvnU+b6m/D9/aWg0P+TJXUn5g9FkNsf/OEc0F4ESN/Csgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC3fa722snBb/oSN5D+t4LDU2EDmACcmrXJcofgSH6/ZAiBvfBL5bxHfwUOHExJ/LLx6SiBXx0weBXy9pTM4/meRJg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1308-beta.tgz_1507315064431_0.8217864350881428"},"directories":{}},"3.1.1309":{"name":"meetup-web-components","version":"3.1.1309","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"b78e8c22821a23ec356c1872259c4514cf3908b4","_id":"meetup-web-components@3.1.1309","_shasum":"3bd1c6cbfee9ee31245d112031b062e07c2a1652","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3bd1c6cbfee9ee31245d112031b062e07c2a1652","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1309.tgz","integrity":"sha512-4bbFt6IAVXCihYS8adWkGtilIOoVX4gLvS1jp0kiE/ZrPauE2FjojQFzcX3b5vRiNJbi0rEDzr7J1pspVmM3Zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBRdtiWKtTp+HcYbrABnBu24q94ggjZVz4ldg9nrSMfAIgO7zHEsEvH5/6SkzOY24rzsUAggggBBV4SNnDL+oCsEs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1309.tgz_1507315272252_0.9469913826324046"},"directories":{}},"3.1.1310-beta":{"name":"meetup-web-components","version":"3.1.1310-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"b1e74d0f7785a9449d8e35e88c89cadbd483759f","_id":"meetup-web-components@3.1.1310-beta","_shasum":"fcb6f93b2e65163678488763c8c4a1a7d2c7afcb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fcb6f93b2e65163678488763c8c4a1a7d2c7afcb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1310-beta.tgz","integrity":"sha512-qvRl+4wKjH2sjK77vMGvJwqfzlK238v7qHhUvQcc1PllTBruXwzCH1KJUjvexOe0TqtW5EmvCG9BMd61S6grkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFMKOg4bu1otIuPL6vQFQ8fubc2FBVbDnTaTVUTnvhYQIhAJ24mczMgUFzlEtM099mkpwkFI75rK/SqU+wr7Edpowq"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1310-beta.tgz_1507323162470_0.27908651204779744"},"directories":{}},"3.1.1311":{"name":"meetup-web-components","version":"3.1.1311","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"b4893ac08c44a80fb4d28b481abf9e829e3a31ce","_id":"meetup-web-components@3.1.1311","_shasum":"4b737623b131c773951343cd5eba040ca721894e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4b737623b131c773951343cd5eba040ca721894e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1311.tgz","integrity":"sha512-B4d99wlVXkK/fk6eA3vn6jjRALHmUcdbGLdcIuVIqYPkUThJf58Ds2cx62R9PjG2MEmWhsr+qto2NW8a/7Goog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGJzqvemrqDcqXgZzaCY9UZuWJpj4weNraNlI7ZxnU7AiA+XbwvxO3CWM/lKVQX8DtRvL9jLHoIps4IJRg5sEFB9A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1311.tgz_1507323557977_0.4764741100370884"},"directories":{}},"3.1.1312-beta":{"name":"meetup-web-components","version":"3.1.1312-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"10606b89547df6cbc172105683946ca3dfbb6549","_id":"meetup-web-components@3.1.1312-beta","_shasum":"cf32a51916eb841ee81a03c42282a68a98366bef","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cf32a51916eb841ee81a03c42282a68a98366bef","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1312-beta.tgz","integrity":"sha512-1VK4n6WO+kUaIGfW3UIrd92TZbV+eTaALplRG5sMlhiaIGMyiJ58YrzxVDe8XJ5NANJ0rtrZ6W7JimfAnZKsLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHZ+MXfFOUyDNEFSNxgkMPMEBM/XUmNXufypyvzrhmygIgOdzr88mapSjrQaSeL/aXEfcCkZdubdcQqwNEJrRDCK4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1312-beta.tgz_1507325753759_0.7928203535266221"},"directories":{}},"3.1.1313":{"name":"meetup-web-components","version":"3.1.1313","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"91d31c6beb7f19f08eeb727ea02e5488e21605d3","_id":"meetup-web-components@3.1.1313","_shasum":"f5d69c32c4ce28aceec39ef4d33737e10fddd709","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f5d69c32c4ce28aceec39ef4d33737e10fddd709","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1313.tgz","integrity":"sha512-4d3F3zLlk268gc+LEPPNDlieE6m57c4LddvjVYwDnmu5IKkIXYHI26yYFh8ko/PN21aWuiIBj4pOGLM4SnRJng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx1uZ8E37mFsoonm1i8y+Vnz02buINr+b9aeYivdaWkAIgGMmyPO1cTqatNFUdaFeFVa286O7N3eV4S1BvIrVdNnI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1313.tgz_1507326139037_0.9147301756311208"},"directories":{}},"3.1.1314-beta":{"name":"meetup-web-components","version":"3.1.1314-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.131-beta","webpack":"2.6.1"},"gitHead":"7dd30b0cd15322eada4f247123a4b2d73e75c47e","_id":"meetup-web-components@3.1.1314-beta","_shasum":"e0205ff0ed74f531228381ca326c31012f2881e2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e0205ff0ed74f531228381ca326c31012f2881e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1314-beta.tgz","integrity":"sha512-lAem3nWr8aLaBdjMNtEN2rDMdWS/vxl5ZzqPGx2/8687okKVS2e1/Of6/TOxE5tjc+8vQOLtzh3SYVPtD6Tmng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVjww4gj561mm0HFVhcR01G9A5Lde4bZGQ72eWk2qQnAIhAOjw1o68q/7P2i04WtuvHRDP9TgkorgXYOOiSiyiOPk2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1314-beta.tgz_1507326765970_0.12971749342978"},"directories":{}},"3.1.1315-beta":{"name":"meetup-web-components","version":"3.1.1315-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"9f2734e38928b1ff005ee8cdaa4e720a193f57d1","_id":"meetup-web-components@3.1.1315-beta","_shasum":"b2d315b3441515dfb764209ccb63adfd8c2bfb7e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b2d315b3441515dfb764209ccb63adfd8c2bfb7e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1315-beta.tgz","integrity":"sha512-x4I+7Xqow8Z7dqD4hQSJ6i/ysnIgL+iq4NsLi9fzlZ8/5v+SOaVu3MtxPLEercGC1pU4X5VCYZGYSxIVyT2fxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA28GvcTEUFjuV7M9vER63zMMLLD6BJzBUzbcGIlUipgAiEAmEHn0zWh4l5xffZ2IUvitcpeswFrZTdeJ5VGgAP23ZQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1315-beta.tgz_1507558142929_0.3085779210086912"},"directories":{}},"3.1.1316-beta":{"name":"meetup-web-components","version":"3.1.1316-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"bac2f4b50fe2bd4dfaed7ff3bf7142fdf5e538de","_id":"meetup-web-components@3.1.1316-beta","_shasum":"beb08770a338fd1ba5d04e0f1d8e6cbca4d24b5f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"beb08770a338fd1ba5d04e0f1d8e6cbca4d24b5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1316-beta.tgz","integrity":"sha512-/Th07rszwalLtfvfFRODy06HFGjxcnu0SJ9nKABcU87THkbXgb3Wul0Fu6D8pw8dSuOoXitjvif2xJHNxPXOrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVOHdzSxAVL4yjGhQeQH5KMNopFepesmWE0nj45A278QIhAL4JfROuD1+0C0tGUhvSKf1aoZ2nfgxJWH4zqxWHDbxr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1316-beta.tgz_1507559660089_0.029711147770285606"},"directories":{}},"3.1.1317":{"name":"meetup-web-components","version":"3.1.1317","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"b8f6ad7a060c1c1fc95fe0ff461b0cdf58efd6f3","_id":"meetup-web-components@3.1.1317","_shasum":"7f2ba5d12b4c3fe07018a0bb138cf1f7152a7485","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7f2ba5d12b4c3fe07018a0bb138cf1f7152a7485","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1317.tgz","integrity":"sha512-3L9wXZ+hp+U66jESNBtpoGuudVGHkbk7m7TLhIfAPDQZnbOwF9RiqLO9/0h/ztCJrz6WnrvNkBj2JVrnPD0qng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNcPPysr9MFeHcloV26IWiMoO8znOdce5rtSBlA7/KyQIgLM2hpg1asoeCz6fjYSqFaYAteHmRA5Bf9ArsqVIXXik="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1317.tgz_1507559984828_0.959616462001577"},"directories":{}},"3.1.1318-beta":{"name":"meetup-web-components","version":"3.1.1318-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.131-beta","webpack":"2.6.1"},"gitHead":"bf44619957c2e7c903dd5200d43cdbc77b937b53","_id":"meetup-web-components@3.1.1318-beta","_shasum":"88778348f4bccda3e6584d4a21ce3a76c1eddc18","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"88778348f4bccda3e6584d4a21ce3a76c1eddc18","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1318-beta.tgz","integrity":"sha512-+725O9JSIKw70zgyGRdqtYnKILTg+2yiotXZZCRQK5bwWLvlUyKJo8vobc22gj4AYRoR3qy+EuIiwCtTVdHigw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGPpY5YgeIBYwkT4n4oqJ5cweU/JnQPM+ekb3KfczXFlAiEA7SqB0V7jtndA7HlVNAf0e9JVAvp3dnMNu40/Q3fpyq4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1318-beta.tgz_1507562113266_0.5968458589632064"},"directories":{}},"3.1.1319-beta":{"name":"meetup-web-components","version":"3.1.1319-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.131-beta","webpack":"2.6.1"},"gitHead":"564d5126103824c8e3a2891136ed08d482bcdfc4","_id":"meetup-web-components@3.1.1319-beta","_shasum":"c7ffd3abf8d293c89e9d33977f8d2ca0af6f67c8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c7ffd3abf8d293c89e9d33977f8d2ca0af6f67c8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1319-beta.tgz","integrity":"sha512-RbCG/ka5ex7NVjy/Ie+Bu9BTsXGtjm5FbbD4VcxuFP5hj0nm2CJN0KwnrmckgAXfH1S8yLidGrv2mzExtYQkgw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYllLEdQ6da48uuuLBdNtKy8TCwzXRCkW93j1lPacqDQIhAKrt7Lg/MO/j2GTRjw1f7oohkjn7i2uvFVqaaI7BbYSX"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1319-beta.tgz_1507569343105_0.6443161251954734"},"directories":{}},"3.1.1322":{"name":"meetup-web-components","version":"3.1.1322","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"dae9bd85411ca3127c88b89e8bd10288cd000cf9","_id":"meetup-web-components@3.1.1322","_shasum":"bab8c1e26030aa7f73c0108215be42d60c40f9dc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bab8c1e26030aa7f73c0108215be42d60c40f9dc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1322.tgz","integrity":"sha512-gDEoa5bZneYMr6C9q0qCs1V8HRVn2sPM+yEhH4+jaxsRdUDTtVHrSgFIo5GcCRgHMJ+wSGDZVp0iVcDbfoi8AQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmtuk2fPF7lBzHmG+E+DIyWRRgGotgmi8VVedtez3CSQIgYXlesDKN9aoNj8wmWcu1OXoX7Rrg95OagpnVR8BLw+Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1322.tgz_1507570577129_0.05400918726809323"},"directories":{}},"3.1.1320":{"name":"meetup-web-components","version":"3.1.1320","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"ec7ae383e8bbb7375151ba6d58dba760e80c595d","_id":"meetup-web-components@3.1.1320","_shasum":"1c997a72dfb4a65e3ffb4d41989526b9f19f92ab","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1c997a72dfb4a65e3ffb4d41989526b9f19f92ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1320.tgz","integrity":"sha512-aWxOr+N/NYKsMZHh7dLMAHhUVm260s8FKJb3o0bUEB6qB19bwTrOfjdAYU7WVZSJJfMaMHEtHXnGFxZP2mtt7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkGM3Ire7EY4GnhEG1DTzSoQYifvFzqH5aBJ8k0lfbWAIhAO/+WKBauRKFdBasggqFjaN9ynUf2fzCGzil/WunxHBj"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1320.tgz_1507570618957_0.8290980162564665"},"directories":{}},"3.1.1323-beta":{"name":"meetup-web-components","version":"3.1.1323-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"f5699304977f5798b82a6d854b6fed2976458466","_id":"meetup-web-components@3.1.1323-beta","_shasum":"c3a77c988e288920f047526b1f5afbc68c5badc0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c3a77c988e288920f047526b1f5afbc68c5badc0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1323-beta.tgz","integrity":"sha512-hxcsQ6qQt//JhNEbs3TzIcNbcie354g5hdYd6hND3oSOr/R+pMf9DIThr3ieAFsjFX37rG090X0th2qcXLQeCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1AP0+xabu/+ZVttzfyb/lecjYf2tVBs5pdI9qMFgC3AiEA7H3hbsl4pTzifJp5pwdNsPEUrEo2/2G4X8egRGxKuWI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1323-beta.tgz_1507571135113_0.8937724768184125"},"directories":{}},"3.1.1324":{"name":"meetup-web-components","version":"3.1.1324","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"f4e7fd0fb19fa4d7364f44813f7994d310d83ddc","_id":"meetup-web-components@3.1.1324","_shasum":"fbe51142b7fc6335a25ae586a93847495b6f6fab","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fbe51142b7fc6335a25ae586a93847495b6f6fab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1324.tgz","integrity":"sha512-zuNk1wfNATvbZh+qPIizswuuSVK96EVg7guCFSBgdhC/IoOcFtHpxLeSw7GPMhis7V6Kn6aB/Viw3Teg/137Zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2PmcsC3bANNw0raQ56VAl74y2ZLYVr9kQz4QzEBI68AiEAyMglRgf8LwtnSsEVEscp4jcMjBa5lnFo+9I+ILc5cZE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1324.tgz_1507571173313_0.6387168793007731"},"directories":{}},"3.1.1325-beta":{"name":"meetup-web-components","version":"3.1.1325-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"9c032b92c9d4354ca49b8d31dc65227dd94b45d6","_id":"meetup-web-components@3.1.1325-beta","_shasum":"62dd114b25b184395df83ba1abb15bc31d848143","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"62dd114b25b184395df83ba1abb15bc31d848143","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1325-beta.tgz","integrity":"sha512-VBDn+xYAM0IsbhnP8dqOYq5wpuCCQssohb2oUkPSCKLf/koMkFN3yXwy4gCdtHYplJ/urEsXa7VTvsalP074ag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaCT0b+sh92KJpJ4gT1bAABMnPUtzJEshAIj6Wj0PeZAiAxr8j16UvNg32sWzdi5DfF5MEcnz7/nTnxQtsOrX9vjw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1325-beta.tgz_1507577628678_0.8343721856363118"},"directories":{}},"3.1.1326":{"name":"meetup-web-components","version":"3.1.1326","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"7d17eeaa99da1c4cb7a6f4a64329f5434d122f09","_id":"meetup-web-components@3.1.1326","_shasum":"225e15972c32e9a22f8fb6e7a11b7872524e6c5c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"225e15972c32e9a22f8fb6e7a11b7872524e6c5c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1326.tgz","integrity":"sha512-v5TfxByiov5zcPsGrlLjh1Erfb6BVhcn+9Lpt02pqGtvqK7WQxjfxFy/PZnMwiNLawByVKCOe6dfLkztlnhvPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrc/JI05/kAHf8N5RjmDsOsbQdjZ+9rEgVP6za3S+afAiBlMHPeh0MECV0LPq8HWmpSOg9VB/DJihhlbBaQroL5xQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1326.tgz_1507582205774_0.7379576740786433"},"directories":{}},"3.1.1327-beta":{"name":"meetup-web-components","version":"3.1.1327-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"6a8a9b3730031117a63e665a9564dc1278b5d34e","_id":"meetup-web-components@3.1.1327-beta","_shasum":"933837436fe4f39e1eb8e5d3bc8e67257790941f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"933837436fe4f39e1eb8e5d3bc8e67257790941f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1327-beta.tgz","integrity":"sha512-ooLf2sxFi1IOIe9SSgVcO340PjeQBRKK8L1DdIQoZHTY+jRRTj78Sl/5RTcktqQQMVQ5N4VJmfDZ0mM45Ej+Mg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH7mNjQsH4rdJfIbeC+qlr1FIj7EVKdVIRsW13IUylxDAiBVSANluOxRHuXZlo/ehotPO17eWl3da0VvcsrkyArklw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1327-beta.tgz_1507583363396_0.24068803200498223"},"directories":{}},"3.1.1328":{"name":"meetup-web-components","version":"3.1.1328","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"1eb5101d27f5ffa1a390ecca909e2bc46aebd33e","_id":"meetup-web-components@3.1.1328","_shasum":"3ae3a3c8fbcd7effa328dad2c275499180f842ae","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3ae3a3c8fbcd7effa328dad2c275499180f842ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1328.tgz","integrity":"sha512-k9TIl7qeI0DnGORpk6jC4LU3W4kU40EC6bFBnB8ON0OvaKTTq+/7x+eYz2VjxNZAcpJv635EhbcLEUqbS2CJew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGtldGJw2zRt70v7u2tDzMPm8OwqmmkPsI0ZsvqWgHsdAiBKWuzb1PZOlyrndwB9dzl9zzl0vIWqmsau+PW4rf1EsQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1328.tgz_1507584211881_0.5400686035864055"},"directories":{}},"3.1.1329":{"name":"meetup-web-components","version":"3.1.1329","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"1.7.128","webpack":"2.6.1"},"gitHead":"7cde227443f8a7daa4fcba451df34f691e7acf8b","_id":"meetup-web-components@3.1.1329","_shasum":"7501f1ac91bb7c88971df2ec079532a07a429a35","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7501f1ac91bb7c88971df2ec079532a07a429a35","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1329.tgz","integrity":"sha512-G/tBtyWG3vUOiuKzEcqas34uo/9o8v/7P0l16q43mTSwKN20qhHQJO0ZGLb4/cDT/tgatzmFs/OM0xTTMQJYzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9QIKZ3LsjbJKgrvrM38umHLabcKfgQBUDOxxraE8mNgIhAK0g+b3EKxr7usgnLCuUYuSl/qyIJ499PNngySUew7At"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1329.tgz_1507592554027_0.14455092721618712"},"directories":{}},"3.1.1330-beta":{"name":"meetup-web-components","version":"3.1.1330-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"a326eb29e38d120c39673e05381c55d6be31a9b3","_id":"meetup-web-components@3.1.1330-beta","_shasum":"cac638c32e7ebd09671113d07a24aa83dc265ac5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cac638c32e7ebd09671113d07a24aa83dc265ac5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1330-beta.tgz","integrity":"sha512-suo5hqZ9rA/Rf7gpy0Lt+BVe7NcaTMPe11jaf8jzPyWmrFC39pXL7DS0woSlYaBIewOmJNcAma4opZn2oIE75A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCudaRY4ZMVafytLYmi5oQTHyUR3qeZ5Djc/zn31/M3AiB+ABBt0U6E8NEz8v6sjA8SuPnMCRBMdwom3Vt+47qM5g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1330-beta.tgz_1507654524279_0.38244547811336815"},"directories":{}},"3.1.1331-beta":{"name":"meetup-web-components","version":"3.1.1331-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"6672b07c60d0428dd3f542c6c2143b8e89be922d","_id":"meetup-web-components@3.1.1331-beta","_shasum":"9534cfe3dacbbf71b735d94a152f4dabfca8cb0b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9534cfe3dacbbf71b735d94a152f4dabfca8cb0b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1331-beta.tgz","integrity":"sha512-ZFLkCjZekxQOefHv/mrYbkSs27S78VAlvdzC72Dg4u3uJK1ivYqMReUpJMsmLkgCiALky8dE8vl99TWEY9KO0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFGjy76PnJsG77CsqwvRYNl3slQziVFhXnISWyXfwojyAiEA2r0QMK0dsAgVGx/jTeIhR7poHw0mhPD+E7LVbfiFCeg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1331-beta.tgz_1507654715992_0.7686647039372474"},"directories":{}},"3.1.1332":{"name":"meetup-web-components","version":"3.1.1332","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3d109d60a1877f4615e8c26f3154311f171f7a8d","_id":"meetup-web-components@3.1.1332","_shasum":"e1938f008e9203052f491866bf28f70b99b61e62","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e1938f008e9203052f491866bf28f70b99b61e62","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1332.tgz","integrity":"sha512-P+f2wS/sm1nhtU9HYsFbgc1frst/OFKDvFbxwOH5pg0fIrDFc/0eVqeDhie1K9gKLC+3Xa/Eka25lEuSizHNYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDB5xFVF9iIF440NaqtXmrGYP4kd7zPYKGTzrZAyn9vAiBemIa5NwIU5xSWryKbW0jmbVedgeK4V52WoXvC/kFNBg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1332.tgz_1507654822184_0.3438028877135366"},"directories":{}},"3.1.1333-beta":{"name":"meetup-web-components","version":"3.1.1333-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"c9295b79dd24cce311e0f1482f9167d0da107c56","_id":"meetup-web-components@3.1.1333-beta","_shasum":"5fd058ae289877b9b8e864a23bf6179f50c3c599","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5fd058ae289877b9b8e864a23bf6179f50c3c599","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1333-beta.tgz","integrity":"sha512-XCBJ2RDuaIQSOu7C5D4d9SFASFlO7NrJrcleU2hYhKSYsFLZzuaQGXfrCN6l15kw0/uTITssKxJCVuF7XZjy+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDjaOXl2oPXgd7Y6c0uLIjEA/Jw+QAt4g8+NbLSZGUxQAiEA4H+//SgJWhfp6ZBtYiXPKlmgI8aDtDTiRGXqTBs/zws="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1333-beta.tgz_1507654917860_0.764246477978304"},"directories":{}},"3.1.1334-beta":{"name":"meetup-web-components","version":"3.1.1334-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"cae708503e6669ddc6ad637a99fd18e6c85719dc","_id":"meetup-web-components@3.1.1334-beta","_shasum":"a596344036415027b7e6c1e036493d4c0ebb1bc2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a596344036415027b7e6c1e036493d4c0ebb1bc2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1334-beta.tgz","integrity":"sha512-Oesx6o31xpV0YYEM0a2KZiPpREJIRmunMnvn6v6EcoRpWCX3MCMC0CcMeVcqF2YZMrLqWvnFyUU9lpNX4GN1Fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWo9qEIW9/HCelTF0nd1/8eKToq7AFTvyQ3+o637EMgAIhANSY3lgdvqcEzF7ZXe/UgCx+ZbEh2qY2k1PaBubMx5ja"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1334-beta.tgz_1507654983470_0.24245827342383564"},"directories":{}},"3.1.1335-beta":{"name":"meetup-web-components","version":"3.1.1335-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2044474b4cd6bd58ce652268ce9b7106fde0449e","_id":"meetup-web-components@3.1.1335-beta","_shasum":"73c6117112d96a881e9675b056542ac86a23b64a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"73c6117112d96a881e9675b056542ac86a23b64a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1335-beta.tgz","integrity":"sha512-N5oMqQC6yNWRIEE7wRBtGOO0+oIaSkoodiRBPB3gPKdm/aDbEyF9dOgZpOUE8FA05t2IM8x9hCTBZcf0IanWxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9WtcvROYexLQjZ5g6MKa/72Wey94tVT6JSFzjEAnL6AiEAyItTWgHUHflDp9XVZ3umBKLxZNQfzXocgGusAMiUzgc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1335-beta.tgz_1507655122812_0.4797539690043777"},"directories":{}},"3.1.1336-beta":{"name":"meetup-web-components","version":"3.1.1336-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7bd289ef7e15c1f5f03337049116766020c44e66","_id":"meetup-web-components@3.1.1336-beta","_shasum":"2fdb7b3536d9531a59a99e7dc3fc701dfe7d26b1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2fdb7b3536d9531a59a99e7dc3fc701dfe7d26b1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1336-beta.tgz","integrity":"sha512-gL/7TOxoBOPB9JSmnS/Nyg3pvGrc/mnuHJdEjjTW4EdI5ZJWc5um4E9F5eNyvV9altCY8iV4NTuMMaGzbk3POw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAm2N81+uQOzU5Cz/KQTeTAONk2rXvF+nSQw2k/E6LXAiEA4fDrz+JPI3gskOfHLVHjWVrlB8QUIdkUUQrNv8FXKwc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1336-beta.tgz_1507655157978_0.6166312522254884"},"directories":{}},"3.1.1337-beta":{"name":"meetup-web-components","version":"3.1.1337-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2ae59685c7df9ecb806213906f1778e5ff9c9dd2","_id":"meetup-web-components@3.1.1337-beta","_shasum":"906fb9e4b143ed360278a5876226519a5eb8a389","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"906fb9e4b143ed360278a5876226519a5eb8a389","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1337-beta.tgz","integrity":"sha512-TOTI3PEfHIjTPK5zMnJRUTKD5KUTFYAXyFLLIyn99+hH4Yey4ehzOkdIATtuBSCa3IreGb7S5P+6CZf/p9NGVQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICj5C8SzR8R37jVi0Omjt3OP+duLkclcbwNuoUhWIa57AiBn/iOzmB5MSXib2jIqcQqGP7RmEs+739j2f55sjDoA2A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1337-beta.tgz_1507655338811_0.40382929029874504"},"directories":{}},"3.1.1338-beta":{"name":"meetup-web-components","version":"3.1.1338-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d5a0af065c608cf51f8ec67bca5d710e6825ea17","_id":"meetup-web-components@3.1.1338-beta","_shasum":"7cfa4db968edf9aa9988c47f1def5dcc062d1ef6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7cfa4db968edf9aa9988c47f1def5dcc062d1ef6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1338-beta.tgz","integrity":"sha512-bZJ6CBKarU2Lx/d7Q5+pwAjj+Mp3/7f9nk29zlyrUFl+wQGmbuACr97goH24fKiLsOlr9ebJ8VU61sAep+bBvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDW8rFIpRypDfd6NwQ/jpaYvrHZzyqxv2k9/tiwk4lH0gIhAOFNJbX+h5bIP4hntoN4nQMbTZVY8U1DiBTCuCbps8ib"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1338-beta.tgz_1507655364810_0.3511220805812627"},"directories":{}},"3.1.1339-beta":{"name":"meetup-web-components","version":"3.1.1339-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"591392d68044797f4dede55dd663733eb73ff995","_id":"meetup-web-components@3.1.1339-beta","_shasum":"3907a6998bc4ee774694aabde9468bb7b34bfc94","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3907a6998bc4ee774694aabde9468bb7b34bfc94","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1339-beta.tgz","integrity":"sha512-i5THavjL0Ep3BZjAfhAsTBUJDWefQ1Wdlkn0gPjVQFlwUgC2g7EQhzZ3K3J1M7zTY9Zc1zByzzxEMVAOVGqK9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqsiiDM5wbXfSMImLmA/TlVehaAtmFJ6WHX47nIU2z+QIgDZdvuYvdJYpNn360LqHonCi4kNM2w2HWe2PIgN9IkVo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1339-beta.tgz_1507655536722_0.2171301960479468"},"directories":{}},"3.1.1340-beta":{"name":"meetup-web-components","version":"3.1.1340-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"79a418135b1281b61735d856e83220772429fec7","_id":"meetup-web-components@3.1.1340-beta","_shasum":"9068be66078931e4865e6925c1f86582f49bce5c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9068be66078931e4865e6925c1f86582f49bce5c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1340-beta.tgz","integrity":"sha512-GSfJk4ZGFqZcKausP5bdksVk6Ci15AB7u1xSM6JSqInCJcHk+b7J+wzbA8Z9sW2+mUnNVVQClGPwHErsKTUubg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2wbnM6MnyY8v59ssVWfw2PIKXoY1lRQA2/dvgiluXVQIgYOd2/adUh6Tps9pbik8mkQecj4GL07Wb8sFuNiT64lI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1340-beta.tgz_1507655619498_0.7789179261308163"},"directories":{}},"3.1.1342-beta":{"name":"meetup-web-components","version":"3.1.1342-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1456bbed969020b70ce03b09b380454ebaa746a8","_id":"meetup-web-components@3.1.1342-beta","_shasum":"3aaf8cba7ab9c1544a048d51a8231b70420a722d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3aaf8cba7ab9c1544a048d51a8231b70420a722d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1342-beta.tgz","integrity":"sha512-S2uMq2OEuwKI0iRf4niOtcJjEXESYBU0HzFoGyvOmcLFzcYFdNiTmwAEJ1/sSlmP/EfCLQtadHuC+h1FCqTxAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGdJA0dDa3ZJEepdwpWvSEoG58zn4vOagHDYdhsMj4cAiEAjhs+//rs5jktHKxDwIxM8jkMKexk/U/g3TCL+fVPdGk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1342-beta.tgz_1507655818162_0.539945287629962"},"directories":{}},"3.1.1341-beta":{"name":"meetup-web-components","version":"3.1.1341-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"323fe0c4eaa1f14b3be0084a085ace8217c836dd","_id":"meetup-web-components@3.1.1341-beta","_shasum":"65c707cf356f52c919f0dcb4c11e4756f5749ed0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"65c707cf356f52c919f0dcb4c11e4756f5749ed0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1341-beta.tgz","integrity":"sha512-TjjbI+rGan8hkERZyRoHbWPaHgjSb7IJ68Kw/xYbwbKjVSBIsbh2hXRTHfiSkygj6uN4Vcpuqbi4ZNWhS3CPgQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/38FQthk7bx6ezqtPr6xt3lRe7N3dSJqm4RHzNEGxvAiEAhC08bfKppbrFCWY5TgswQiEQhDuvOQYH+j/6py/m16Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1341-beta.tgz_1507655857729_0.08777641667984426"},"directories":{}},"3.1.1343-beta":{"name":"meetup-web-components","version":"3.1.1343-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"a38d0527d364023fcda96833432793f9a20fb075","_id":"meetup-web-components@3.1.1343-beta","_shasum":"ef643498ab0fc503c8e33d55ad17318fefe76c36","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ef643498ab0fc503c8e33d55ad17318fefe76c36","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1343-beta.tgz","integrity":"sha512-jH1XNWtFMhLOEYKwnFJzZETALV94mynFUIgpJuVWZ3CQE/hA6I48MqFdtpdJntAfVllcLEYOwCGoY8CKj2qs6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDl+kRD8rw38R1CZXYD5ANRBcn0pNP79FzZ7LXuYTQqRwIgDOROuHEsAcU8v7zsJL3+Xzqo8BJasaeLdFNXV6kaGyc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1343-beta.tgz_1507656001085_0.5138887222856283"},"directories":{}},"3.1.1344-beta":{"name":"meetup-web-components","version":"3.1.1344-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d00c0fbd511613c90c00e1d0c344a4acb0728318","_id":"meetup-web-components@3.1.1344-beta","_shasum":"799bda94dc6f52db3f71d8cb13330877a0bc4bd5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"799bda94dc6f52db3f71d8cb13330877a0bc4bd5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1344-beta.tgz","integrity":"sha512-ybZ57EZqRYHQPWLa06UiFxdz/mC9ltP3Tk19aXz2IwJC5nTdzUnose1r3TAzw/ejTeJBwdpqXURVDqUWZW/UPQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDlYaxE7Wfzh0DR6vAXmzScztgUi8GCsUzBNJaYQqWamAiEAoc9cElP85JH9X/nNLO2tclP2KVe7+JDE/5cppcKY4uQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1344-beta.tgz_1507656164741_0.35421818192116916"},"directories":{}},"3.1.1345-beta":{"name":"meetup-web-components","version":"3.1.1345-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d9a4b6e99412410afeeb5052f77abb3e07e55a6f","_id":"meetup-web-components@3.1.1345-beta","_shasum":"da51941555632c6b8afe5bbf32c7ef3b77c0e2b0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"da51941555632c6b8afe5bbf32c7ef3b77c0e2b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1345-beta.tgz","integrity":"sha512-CNGYj0GcAQxjok7s0c6UlNDAIfQbY1HxsgpcdUN1kW6Obu1DrXA925LNP5rlIByV/jTb67HgCiAIQGjJe/n6SQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiZxkqqylHFqffIqAKSzEutAqf2kk1wiHPvhYHWY4NMQIgTvcFUnrKQuMOjuC7fPOKAzp0575O9aMQVuIt5jKWe9w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1345-beta.tgz_1507656203581_0.9047762351110578"},"directories":{}},"3.1.1346-beta":{"name":"meetup-web-components","version":"3.1.1346-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"bdef3d1e73af003579e82eb9b4118079efecfaf1","_id":"meetup-web-components@3.1.1346-beta","_shasum":"13690e35a8cc906215a99504af12eb4af250b40e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"13690e35a8cc906215a99504af12eb4af250b40e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1346-beta.tgz","integrity":"sha512-7ysbI3+HSsU9jwvTpCvMlkg9ysFpi0QE+qyoRugNCLKgnGMSvOOIUYziiW2dEfF+btzTcRXTzMnc+OWccDuaZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDXhTuQuTjLYPUpH0EJepqrB+foOKzghVznpQ/qaX1QlAiAGzG15ox7vMLoZzNIsenYPNP4AC84JBpAhFM9XvHRpUw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1346-beta.tgz_1507656374651_0.8764981909189373"},"directories":{}},"3.1.1347-beta":{"name":"meetup-web-components","version":"3.1.1347-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"79729f17b237283d237c9917866116763242dbdb","_id":"meetup-web-components@3.1.1347-beta","_shasum":"f748c96dc992e2cb9c573d3e8c6219fcd9d2e5a1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f748c96dc992e2cb9c573d3e8c6219fcd9d2e5a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1347-beta.tgz","integrity":"sha512-pE2shuqdkGK0q3nfGHz0zD2eNLeJKfkBQw4sVZmLucxoKVKfFVVLMYAVDSe8qtD0G0zOs5PjcATXgdn3x4qXIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBac96kmOiySb5MvSnhKur/3P7LmTT9coYq3/IO1zKiQIhAMsVuf88wPgi1jYT5riW3tSK1bBO2xF4Ej9eduH96lt4"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1347-beta.tgz_1507656377559_0.11633205856196582"},"directories":{}},"3.1.1349-beta":{"name":"meetup-web-components","version":"3.1.1349-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"59616177a3265f7c5c43e68518dd073f68d179fe","_id":"meetup-web-components@3.1.1349-beta","_shasum":"2ccd223cc02a750fb60636ca4c6da8b3a2adcb6b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2ccd223cc02a750fb60636ca4c6da8b3a2adcb6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1349-beta.tgz","integrity":"sha512-4i0/JVZ9ypwmwk2B/3l+yY0tFjS8+Nc/mMtfUDZEHV5yTPiaNkz9hWAFuZeHjQ/BfNPhqwL3eDYu+8g3zX1AMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtGwm5r+t/GgfbUaK8jpkXpEBZa0gQgOzNTuMT7sN2fwIhALK7uKXdukpyaNBU/FGdREP+X+JdeJqF7H9mSKsTZ+W8"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1349-beta.tgz_1507656553637_0.6645649822894484"},"directories":{}},"3.1.1348-beta":{"name":"meetup-web-components","version":"3.1.1348-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3d4937d3bd1a97fe0b6e10a12040ed0038208635","_id":"meetup-web-components@3.1.1348-beta","_shasum":"f444bc3384f6318a563f2ae7eb2c33a953d4195d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f444bc3384f6318a563f2ae7eb2c33a953d4195d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1348-beta.tgz","integrity":"sha512-BF6qegkYJS0zAP2M8XsUHL9VeNoMQhZd/NFUoayOesXhv5rM5DFpLi468QDPP4VQQL5RTfJEnhBXDe0mEH7CCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB14xM2t/2huIqGsLoNWf6Cxpnb5CT8p5W3PddMHfyOoAiEAoyDtN12BhntN2F+YKYMASlmlXyG3jpEXgXzrE5OYQr0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1348-beta.tgz_1507656583198_0.8921563024632633"},"directories":{}},"3.1.1350-beta":{"name":"meetup-web-components","version":"3.1.1350-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"67d7f44df415710c99dd1f6961d80f802caa3da9","_id":"meetup-web-components@3.1.1350-beta","_shasum":"8330d61c690f54c52119b2d3e992855fdd81dbd4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8330d61c690f54c52119b2d3e992855fdd81dbd4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1350-beta.tgz","integrity":"sha512-WSrv7HA3AwhPgMNrenP3Q4J9hBB17KlnxSEFATljxTxLBPj8uBnSjRXfiJBGQu/8oL9mmEkXp4MDjTXJD2iFJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHwaa36MsKj61JoTUvggqxwMEhbNhisnrOlcauh7bzlpAiEA7xifRpSGW5uHSOepaW+JtOeCgOco04HO/TgNeHBFjao="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1350-beta.tgz_1507656745047_0.6402928170282394"},"directories":{}},"3.1.1351-beta":{"name":"meetup-web-components","version":"3.1.1351-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5ebfd56b509147adf56bd19a123612f8fa2c71bc","_id":"meetup-web-components@3.1.1351-beta","_shasum":"8c3cead7416df04caca305d7b2a348b4eab9a32d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8c3cead7416df04caca305d7b2a348b4eab9a32d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1351-beta.tgz","integrity":"sha512-UekjFwLRc7uJ22sXr8qm9S4s6bmttlmRlbYpD/hPb6fenNY8V7iWT5h5oZPfB+zwSTJjB3OvClS7Px7981ia8g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC86jIKxKUXOhUONFKxLCLKffvxbqpR9lkKwdMuh2xXDwIhAMTG9QYEofSkMYc1DJHpp6qQPdlkxCGAmMSgABE5UycN"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1351-beta.tgz_1507656798110_0.4663271252065897"},"directories":{}},"3.1.1352-beta":{"name":"meetup-web-components","version":"3.1.1352-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"692ad4f2f15bda587cf809d1a1cb2065e0f6d860","_id":"meetup-web-components@3.1.1352-beta","_shasum":"223e1ed9e0a1420c5643bd55c3f094430d08308f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"223e1ed9e0a1420c5643bd55c3f094430d08308f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1352-beta.tgz","integrity":"sha512-K4L5ebb8/MozWFd/1Uuf2rxHYH4MqSrpNhspP/QklSwn6KCCZNUHaeaW+e8aB9f4rDvwi7mLTNmGfbQUjsaykw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC48NSnCmlxLwNgnzmvOTeWq1skhJ5zypzd9pNUqOU5CQIgNN5Eta7/99bwgac5K6kGWlNPu8Hb8PP45zAKURSpa5w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1352-beta.tgz_1507657009443_0.9071306076366454"},"directories":{}},"3.1.1353-beta":{"name":"meetup-web-components","version":"3.1.1353-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2404acc9d998be087e7665b6a06492b3aba1ab62","_id":"meetup-web-components@3.1.1353-beta","_shasum":"64d346e757dc4256597841e82c81c3c8c3654db3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"64d346e757dc4256597841e82c81c3c8c3654db3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1353-beta.tgz","integrity":"sha512-974NeaRyD9WRGYEEEsYcJXw8q611n5XRbzIt1XcU1RBO3z+choV8hUuu2Frst+jiI+LGPLQaaDGxegzTCFyh9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICfYms/hXWrjoYtQJtCw77dme6IWNQ0w/4gd15IP62PjAiEA6QtgvF8T2epzgxbUeh9gQFJvT/QNgpbB737gUotgOoY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1353-beta.tgz_1507657022272_0.1554678175598383"},"directories":{}},"3.1.1354-beta":{"name":"meetup-web-components","version":"3.1.1354-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"992b327b94c726c1e71d8f24f40eaaa94ee45c98","_id":"meetup-web-components@3.1.1354-beta","_shasum":"5fd9d5c5cdbf27b94bef4a0b5059a256790613aa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5fd9d5c5cdbf27b94bef4a0b5059a256790613aa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1354-beta.tgz","integrity":"sha512-QbZ1I0GgUEaRe5xxa/htbqQm6RXORFrdT5xNqId5Qfe0vVW0MNDqK823L4qE6ZfGEi4TvEv0eVuYXtD1ih0RNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWYHCdQZBx3Y2/ylRhJ6RBd1wG/qsleIEUymdEFiwlGgIhALO1My/eRrkKDW5/yOZ+DNERu9hs4Mw53t1g4XqSR0ha"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1354-beta.tgz_1507657204370_0.4204259996768087"},"directories":{}},"3.1.1355-beta":{"name":"meetup-web-components","version":"3.1.1355-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"cd9948dde4f680b73b10a61ecaba264bd205487d","_id":"meetup-web-components@3.1.1355-beta","_shasum":"b2d4fa33d64a6e7c2f14775ebc9b1938958fa56d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b2d4fa33d64a6e7c2f14775ebc9b1938958fa56d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1355-beta.tgz","integrity":"sha512-E/WMNNIzYCK7UbaY1ufv/tV6BJl6jApKsOq2VEk/x6iFyb3xXPZ8GnVGBoDFRsbMu9ejtyDi6N4l2DK+jO7HZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOd8gbMkdD3vWfpHNhhsyxxTCyukk35kiUcaftYBb6mQIgbCRh0shiE6ihvayKfakJU8JttjrjcLsLQzrAL0tU38E="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1355-beta.tgz_1507657217137_0.3257805563043803"},"directories":{}},"3.1.1357-beta":{"name":"meetup-web-components","version":"3.1.1357-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f0ad2d22392f188e8c89a87b013f0adabec87174","_id":"meetup-web-components@3.1.1357-beta","_shasum":"2c7b3fc9f74ee43a4e5cadb4ad303ac0c92d753a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2c7b3fc9f74ee43a4e5cadb4ad303ac0c92d753a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1357-beta.tgz","integrity":"sha512-UQhAUWBLBwAtvXJeRv92znqlDYLLubTe/bRzkMl9B+DBbXUHog1gMrxuhoHwdhjUHfKylzttK4ac60UqA4eVrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLioGh+zDCIU4Rx/TvSnlFvDjXypnJh7PjTK8UmgCXpwIgfdutDFM5mer77UGIJ/Sxb4+EMA24iFANDCQPy2UOMrk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1357-beta.tgz_1507657437821_0.3092493524309248"},"directories":{}},"3.1.1356-beta":{"name":"meetup-web-components","version":"3.1.1356-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ee3c062d973da745d601c272f7231dd22b3284d7","_id":"meetup-web-components@3.1.1356-beta","_shasum":"417672d7386926c659b4fad1f28026cc96a614b9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"417672d7386926c659b4fad1f28026cc96a614b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1356-beta.tgz","integrity":"sha512-mzdXd6kib6wXnnI30h8jlBlYHXKOQLc4syU2tHNiqp4QB9CRCjPhmIXyNOz+o8OGFr1EuQdULq0NAk4UX6KAow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0S1VFCaIMOZjwOkfpkT3w+a8yLWejfUKzMVvbxosU/AIhAKZGf9Lcf6RaJ6Z+7YTn75/P03gM6rGvtHcSs+ArXMxF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1356-beta.tgz_1507657476790_0.5086645688861609"},"directories":{}},"3.1.1358-beta":{"name":"meetup-web-components","version":"3.1.1358-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"0158f5538d1aa27b7cd31d862cda16aa64d2b368","_id":"meetup-web-components@3.1.1358-beta","_shasum":"7684f8f77a362ccce38a1c8ceb08861820a877d6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7684f8f77a362ccce38a1c8ceb08861820a877d6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1358-beta.tgz","integrity":"sha512-csRlPj69Wm7sEJ1N3IrH8R65Ov5QgMPsRCxT5A9kPPlpWCR9YPxamCTX7VVXu3z+UO/MNS6p4oi2OLs/KM5Zqg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAHBAO29Zjlc4Nt7tquIEnAZQ0D+ZD78wX3ntCVL8cwzAiBxs3d6ff5vm8YK8IAk0ts9UVzUT7cg+HvOEIneoaOOzg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1358-beta.tgz_1507657624027_0.6537367354612797"},"directories":{}},"3.1.1359-beta":{"name":"meetup-web-components","version":"3.1.1359-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"98a62d8ad898fc24d5924c2aeee194a6ee4317bc","_id":"meetup-web-components@3.1.1359-beta","_shasum":"24c5a63718b31073faca82f5607823eb4bee3e7a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"24c5a63718b31073faca82f5607823eb4bee3e7a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1359-beta.tgz","integrity":"sha512-d5HJuuLVkIk545mspbbv2Pxf9CC6qs+WW8D/Cdk0NdBHtl5a8+4ALOhbta6iVbCFVyxqpzne0lCh5SrX9lJmuA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE2HFJMSnfG+huyoyX+gWfHv6zTGoXTpBLJ6Owb3tATBAiAiCH5GeOJq/NXugGR37k4I5pebB/11vKp7oLqREuEULg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1359-beta.tgz_1507657665884_0.8039689077995718"},"directories":{}},"3.1.1361-beta":{"name":"meetup-web-components","version":"3.1.1361-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"dacf95fa20f503b71f742ed77a56198b2a9af37e","_id":"meetup-web-components@3.1.1361-beta","_shasum":"752fdfe06ef2f26277c9532e407fef20cd7b7023","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"752fdfe06ef2f26277c9532e407fef20cd7b7023","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1361-beta.tgz","integrity":"sha512-FSmHq0RNHuybwttW5cjEQaMlG18O9aJNfMe6+/41zn5P76aK0fLaXrKTF69NmdLffh5lWE5sFEr8TKZ+kSGTPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWv6LQwUXu2IOiDAJFwQeatHKAWBz9hkPfddjt081aVwIgUjdZI3BvAruF380nsbW7lVmPVobHsdvlWdBlTO95ZLc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1361-beta.tgz_1507657849433_0.5480877961963415"},"directories":{}},"3.1.1360-beta":{"name":"meetup-web-components","version":"3.1.1360-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5d99b8bf7a82219ea07f5e5a336bc01d63b35641","_id":"meetup-web-components@3.1.1360-beta","_shasum":"5266a5a577962cae80b286700108ae15443beb9e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5266a5a577962cae80b286700108ae15443beb9e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1360-beta.tgz","integrity":"sha512-kxTtXx5VGOb9MKE8nHg/99AKUMpUiOn8xN0J97pM44XCxmyv7i8gkVQNhHKXQRAe8K2AQSGFg133NXfJXP/dgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBnRAec4fSygAV74iNaW+5QqLRWzgPNygf4EYTvFowx3AiEA+VcowO7tiM0m92D9GsdDA0VjG7FLl909UmtukoF0zF8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1360-beta.tgz_1507657919822_0.5462201915215701"},"directories":{}},"3.1.1362-beta":{"name":"meetup-web-components","version":"3.1.1362-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"e83c06d8aac8b5d06e687cd26f04ae004563d053","_id":"meetup-web-components@3.1.1362-beta","_shasum":"3d1e04d2bc3a8a2f28655ef5d2e1389880dda0e2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3d1e04d2bc3a8a2f28655ef5d2e1389880dda0e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1362-beta.tgz","integrity":"sha512-a2AXzQtYTLGF4M3SNUCmKKN8DnMimkXZDOXqK7nlFwjrsdPnucTc3t7yOy4waqVem6VPmhE2sUAWeX5EV+lp+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAwr33h2VSkz8QylzcqOj96PKfwkTe4jCAgFTjxIaKPeAiEAseAoDqgje+/8IO87+3EKwhqx8yctrQ2iiyAdj5XAfZs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1362-beta.tgz_1507658014353_0.34335705474950373"},"directories":{}},"3.1.1363-beta":{"name":"meetup-web-components","version":"3.1.1363-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2968dc243233d31014b3c397a54202a8c3640b3a","_id":"meetup-web-components@3.1.1363-beta","_shasum":"8bfebebc3692c0becb148abeff9cd78430ec8961","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8bfebebc3692c0becb148abeff9cd78430ec8961","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1363-beta.tgz","integrity":"sha512-E9GTdUSTudamRQ/Qnre2FLW7OAk/G+Fuh1BJbHX2WDe7EQaKiDkFfCYjiG0wyRfRzciH87grDrcNxv3ecPddLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6F0U50P9r6l1NsIy6w1OJ/6fy6xsSzFdVt+l2e4KTHAiEA0ncD9Xi4FMkJdia3w0IFFWrvQHu4wIgWDJYm5PkQ2cM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1363-beta.tgz_1507658085121_0.9177667675539851"},"directories":{}},"3.1.1364-beta":{"name":"meetup-web-components","version":"3.1.1364-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"242984e0355563b053c63d57483087d015b74545","_id":"meetup-web-components@3.1.1364-beta","_shasum":"2c0b22a8911945d211aa3ecd876d9e04d9732dc7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2c0b22a8911945d211aa3ecd876d9e04d9732dc7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1364-beta.tgz","integrity":"sha512-314reQq2QK3VEGKM8Ti1yYYWElDxfdfy2++shcwMtofS6xzHYfrEyKwGcSr9J+XqGSbBVLROkB6TSXeI+6jVQw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBRMrpSuC9R8CQLpZHhB9Be7jnq8Rrk6gv+iZ05rcQx3AiEAsGwkoPcoVeA/SgKu0tiQNbwwypGH8m/+7bRr+dEuVWA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1364-beta.tgz_1507658203135_0.42570366198197007"},"directories":{}},"3.1.1365-beta":{"name":"meetup-web-components","version":"3.1.1365-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4f627dad606bd9f1aae0d9c939bb80f9eda24169","_id":"meetup-web-components@3.1.1365-beta","_shasum":"ed7b29a808b5eefdb2ad1543cbadeaaa01f34643","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ed7b29a808b5eefdb2ad1543cbadeaaa01f34643","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1365-beta.tgz","integrity":"sha512-sNtTEQVaadVvuXopVfE5KflOdNeuxHVcTQWVdpPHxBhKfud8Lizx0b7/6CIGz0BWBTD1nva7Pqeng43mFdYz/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHdn5BHCBHf0aET01C3yixC1a20fWJaqAIv6ju47K2S/AiAK3gq1mbYNoJFJYnbEi4E0+QO1PZm6Zc9kna+svozE5w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1365-beta.tgz_1507658228516_0.861386897508055"},"directories":{}},"3.1.1366-beta":{"name":"meetup-web-components","version":"3.1.1366-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b3984e79707a8aafb5430c40a38a584ed13a8b1c","_id":"meetup-web-components@3.1.1366-beta","_shasum":"12ec412ab3593d6fc5b5885f10ced7145479d714","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"12ec412ab3593d6fc5b5885f10ced7145479d714","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1366-beta.tgz","integrity":"sha512-3cokEazEKVcLXY0MUswqzkqHRYLbcQ73sk16GMBjZdm9PMFddMiZ6NZEb2VBMHxjsJ3+OUiG2IhJxOqUGpwJHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvoX671xIkS5zZdrkf+xbInCm+gUmqW054Wky8DfpVgwIhAO8KnqoOXev0nEW9QKPpjSDF4p7IOwdXeukUyYA0l9Ge"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1366-beta.tgz_1507658336202_0.7787335170432925"},"directories":{}},"3.1.1368-beta":{"name":"meetup-web-components","version":"3.1.1368-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4cf55ce7d1fcbbea1bb7c21044086dbcd94ae21f","_id":"meetup-web-components@3.1.1368-beta","_shasum":"804a7ce4e269b8a0fa46c171b41a15a4ddd1bb5a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"804a7ce4e269b8a0fa46c171b41a15a4ddd1bb5a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1368-beta.tgz","integrity":"sha512-9xH7fnAMaSaDSBlLAx+2Otg9bxwZV2/+5TZmWqyU0Ud7X+LTw8Z90BLIbQs5uR1aFmhbqGyoD2unSR/G3XdyUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3s9IkY/gUe5DYMV6qAtxb5riNhg3VFgEx3pCFtoCrXQIhAOoUTBytAkqeBMITgYvor7KHeiEIGYca0b0MA7PDfpYW"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1368-beta.tgz_1507658397041_0.3556168966460973"},"directories":{}},"3.1.1367-beta":{"name":"meetup-web-components","version":"3.1.1367-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"07e34a07b8320da36ef7edd5fcbc17c9e38e4594","_id":"meetup-web-components@3.1.1367-beta","_shasum":"49b86d6017dd09f75f0f8690b555de9a5b58280c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"49b86d6017dd09f75f0f8690b555de9a5b58280c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1367-beta.tgz","integrity":"sha512-WyVhg6cJq+CC3swFIHQZOzymWlZYmL6UJjNdC4qyfU00O09gYE7peNhaq6aTfBh/03ruIw7APJ5GSQKDXUdC9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSkTyxSgbgx8iSC4rFz+tOoiqn52c5bqTuutR1C75qogIhAIwZpjbGlXMC2HhCJ58x+xJljQxLZagCaG8MU3uJjBJM"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1367-beta.tgz_1507658431272_0.6660437900573015"},"directories":{}},"3.1.1369-beta":{"name":"meetup-web-components","version":"3.1.1369-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1dfcc335aea2cfbcf3e081bc61d38a0f7e2a90ef","_id":"meetup-web-components@3.1.1369-beta","_shasum":"8ccdea0e8e50f71dfc4462e8763015fd531c086f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8ccdea0e8e50f71dfc4462e8763015fd531c086f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1369-beta.tgz","integrity":"sha512-EmmtkzHVIT1O3V5yMUc7Hm+lCHbQRQMKrT6+XuZa6sZQByyks58likHq8Zl/1H+u6kqLQD3W2vTVRfuQFS/REQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB/wy0Ik3yrtH+20jrt0+JgaZKTqJGHHe01nuy/aNVArAiEAmQ1bUj2+T9KcUH4GPdLXt5Vo5CglPVnYF0K6aLnIZT8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1369-beta.tgz_1507658503860_0.23573838407173753"},"directories":{}},"3.1.1371-beta":{"name":"meetup-web-components","version":"3.1.1371-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7d70f7231c61d47bdaa6506f96552c9c569fc1d3","_id":"meetup-web-components@3.1.1371-beta","_shasum":"3bafacd4c39ea37beb2bfdb40d7c8515e248f41e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3bafacd4c39ea37beb2bfdb40d7c8515e248f41e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1371-beta.tgz","integrity":"sha512-KTuIZp6E17xb323WsBqcIqELX4nkMn7J0oJ2PPY1MIaE1Bip+U2nb28Y/OZs90Vv04l2PiuObiXKYapiDcKeUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtTLF2O4Ct/A2jyiQK68KVaFxlaLRmvlV72X1+x2E3xQIgL+MmTszHRoZup9tL2xa7HUKNu6uQapUMWidn4dHH6UM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1371-beta.tgz_1507658664521_0.6958290450274944"},"directories":{}},"3.1.1370-beta":{"name":"meetup-web-components","version":"3.1.1370-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"723e89fd58d05c0cab81e5fa1e0a4f69b31af676","_id":"meetup-web-components@3.1.1370-beta","_shasum":"48524b68cbc21ffafa0dcf3857107fa24569e1fb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"48524b68cbc21ffafa0dcf3857107fa24569e1fb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1370-beta.tgz","integrity":"sha512-rH08pcnA4R+hWCEroMKE3DRM6AIfgfAQqE1uYG01iMZ+67Fr6+o0EnJI+Ed1B1F0cF9J8AHrj4GD9rI2aCG0fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDscPtymRK9t79cAAjfchawTwh8zWHU+jbk+BYNSDrs/AiEA5BlicWj0XhIznYr6nAfcOeBVsMe23q+WDU7ypPz9tms="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1370-beta.tgz_1507658687658_0.8282083149533719"},"directories":{}},"3.1.1372-beta":{"name":"meetup-web-components","version":"3.1.1372-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"a60cfb4de779485f6b917cf9fb875db63a60c982","_id":"meetup-web-components@3.1.1372-beta","_shasum":"35c203c0ea3343e5b8cd8bdd230aa1f13920253a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"35c203c0ea3343e5b8cd8bdd230aa1f13920253a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1372-beta.tgz","integrity":"sha512-2JGUMQciij3+EA3zZdtF89vsblCSRMwjF91q7X+gahhtU82HID65u9upY+nu0Co0HtOz/oqBoLm+7/cKLsheNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMaYlJ0RKmUTQ19MPTT85WfSrjZxQjxdQhDH3uHaxxdQIgZHyAIQp7Pc8XoevrcLn4opeSK6r3PRnwtC3uWZk5Sew="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1372-beta.tgz_1507658703727_0.9524734066799283"},"directories":{}},"3.1.1373-beta":{"name":"meetup-web-components","version":"3.1.1373-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f95f5fdd8433db357b3c0273ec3790e82aeb1509","_id":"meetup-web-components@3.1.1373-beta","_shasum":"4133abae7d3c7cec164d6e1636d6d823afbf44e5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4133abae7d3c7cec164d6e1636d6d823afbf44e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1373-beta.tgz","integrity":"sha512-3bt7+1FM98COw8n1FK8EoRUdB5IoFu/nBG0ta7IutlqJ8GSIEBf6sQAS7arsOwZ3k1MuMYhZcLxgbpxyTr3RyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdwGapSkzUrzMdrJ2DPqtObINJk6aeuyAAlYKncvV5fAiEAt7oVx30ikadXAwBY9ZtuSY6j8/xtJ6h8aIB5HRiZbj0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1373-beta.tgz_1507658860134_0.21442415821366012"},"directories":{}},"3.1.1375-beta":{"name":"meetup-web-components","version":"3.1.1375-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5dbe8f4a30f1408d3e38b5631abb444abd259a07","_id":"meetup-web-components@3.1.1375-beta","_shasum":"f36b1782f29d61c3c18259ef115d57b92b973c3c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f36b1782f29d61c3c18259ef115d57b92b973c3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1375-beta.tgz","integrity":"sha512-02j2OsN7aeRWTfrnN4wyrq4tOMZGuajUMv4cbK1KOqH0rztUzFPX6Tu033sIwDQR1RgV3LI8TUWT7z0G3m0iNg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1n16lsCHVfj0769PXKXu+q8nZeSqGXUVMcOoO8I0IvQIhAPIWHh8xms2J19R3nwnb9e6+etmMC2ByaeF5mNUboawe"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1375-beta.tgz_1507658870331_0.6935608596540987"},"directories":{}},"3.1.1374-beta":{"name":"meetup-web-components","version":"3.1.1374-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4080171bf855056d619963a083deeec0c384e1af","_id":"meetup-web-components@3.1.1374-beta","_shasum":"55b27a6cc4a38d5cd565dfbdcb789ac5a9c1b1af","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"55b27a6cc4a38d5cd565dfbdcb789ac5a9c1b1af","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1374-beta.tgz","integrity":"sha512-exONkMiUJJjHz42NSfvP3YbFIx0jrRXD78/iXfr/c3OxHBkQCh/biSKjGYEUP7KP8bwdvFyMHwB9qY6/IbaVYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqI8UaeO2aV5fW+88sCn+8ju/JtxpQxfui8xJxQW2z0AiEA/05Wm5Pp/hSKfYdXK1kxYacqHQGfF6rbGxjeR0C7mFg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1374-beta.tgz_1507658877826_0.8285717815160751"},"directories":{}},"3.1.1376-beta":{"name":"meetup-web-components","version":"3.1.1376-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b78e6d883c0684066fc2b7ac557a735181aa3961","_id":"meetup-web-components@3.1.1376-beta","_shasum":"6eba0f66431760a658c28b2b32773ea4409f75c5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6eba0f66431760a658c28b2b32773ea4409f75c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1376-beta.tgz","integrity":"sha512-YgvHsdTH0F9WCCC8wI+9X9+zORlo+/KwLllayXkr+dDhW5GZppUpKDdZ2wXEbMEAlphr8tXNFvMAFvh/jT7tAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYhSvEUlJqwrRd+AJFCJPSig22UhfF36p3zGGFKvIDlAIgHGkyOpBGSMUI528xUdMde+343zXrniEz2ps/izmmgic="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1376-beta.tgz_1507659040870_0.1666404791176319"},"directories":{}},"3.1.1378-beta":{"name":"meetup-web-components","version":"3.1.1378-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f1d8e938f8e6c58f6ab078f7789f669d9e5ff952","_id":"meetup-web-components@3.1.1378-beta","_shasum":"5326567195fd49a11fd844ecd6ed090d7399046a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5326567195fd49a11fd844ecd6ed090d7399046a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1378-beta.tgz","integrity":"sha512-/odOkohcG1mR82bbn9AxUmUHuiF/lRf8fdyrEMLjnLmJ3Furrw8jsfr027ePSomXqH4h8QMBgM1gwIbezMSQ7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6PB59i1cdYR4k5tz0Jf9ow6gS9NlEStzogv/HniGp8AiEAxqYlrO+Fgmqi8bV3ByzyXQT+IzqBX59/EBaap5NeUOo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1378-beta.tgz_1507659072966_0.41732816747389734"},"directories":{}},"3.1.1377-beta":{"name":"meetup-web-components","version":"3.1.1377-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"881f592f980d63b03bfce8176f3012afd7a3efa5","_id":"meetup-web-components@3.1.1377-beta","_shasum":"916329c5ea6660b1efb5c7f22aa410ee0dd834af","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"916329c5ea6660b1efb5c7f22aa410ee0dd834af","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1377-beta.tgz","integrity":"sha512-bKj5+900QOrMIL34wS8TnErSYnIou+Axf+ZJwolBtqjiY1EyM2OmI+4uXsfnfSNtUMsWnR4HBRBwPSd5kBaWfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyx4U/YwFOhSrPjaF0EP56x91Jt77eEnFm5wxZf4FMFwIhAP7irSszeCgTXbaOnEGu8mmp0e5/QLybn9+Z7aKdaouZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1377-beta.tgz_1507659099002_0.818703874014318"},"directories":{}},"3.1.1379-beta":{"name":"meetup-web-components","version":"3.1.1379-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"cb29dffca4aafb57ce371ccb006cac180de44394","_id":"meetup-web-components@3.1.1379-beta","_shasum":"c9e96c36043c71aeddd9e5caec94a2ee6fe60e6b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c9e96c36043c71aeddd9e5caec94a2ee6fe60e6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1379-beta.tgz","integrity":"sha512-LrP6Spqqn/YbNkHyM8MwSSbnmtEF/yd7XVUIVdL1NIEoyg8yoJHitau2o614QeM9Nlw4k6WzI7xHXmECygncWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDxq1HrFJ8NBANU16KpQCXny4PZE6iSTWRaHnYw2tMGUAiEAx/mtBrpFGp2I9SeoYN2TOkiOWojYY5ZlFJxR9clgxLc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1379-beta.tgz_1507659225828_0.8371790973469615"},"directories":{}},"3.1.1381-beta":{"name":"meetup-web-components","version":"3.1.1381-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ee23a83c0113a07815a8816dadbf038d51b6ebbe","_id":"meetup-web-components@3.1.1381-beta","_shasum":"492a576712cd105b846f252cb33b9d03c3971d6d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"492a576712cd105b846f252cb33b9d03c3971d6d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1381-beta.tgz","integrity":"sha512-sQqEA0ZO1UoYH3K+2UiycJn5sXzDgGDn1EN5exRWYDRD6r7DR9DB3hU9bRD1ETACkC25XzzcwN6wpwSLXRxa5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkBsAgRH6sZMCUVGTAxct5RudOu0lk41lxN+x3F8+RhAiBpRI9RXWhytaMJWcD8UqMRJb6UYOAyiew9aifeodP8Jw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1381-beta.tgz_1507659267616_0.9238475922029465"},"directories":{}},"3.1.1380-beta":{"name":"meetup-web-components","version":"3.1.1380-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"fac7446a3e2fc9cb981287f4a14999b9d0f83cf5","_id":"meetup-web-components@3.1.1380-beta","_shasum":"cdaaac49b42e01a50583ab734d80ea0209cfbd65","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cdaaac49b42e01a50583ab734d80ea0209cfbd65","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1380-beta.tgz","integrity":"sha512-3BwoJ0GeR4N8A52pw3jHxnV48VxBicxIgGeGt1+NXXCqoHtfj6Z9hpH75lqaFsUmeixnZHzC5g1NNFdmbDW8/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBP/4dvIOiEchBgnm5nPvfYn3A45+MDw845gAChge6qCAiAptbgOJspfjLYNIlO7oLw3FeaS4msdMG/Agg5Af3DHdQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1380-beta.tgz_1507659328631_0.7791119532193989"},"directories":{}},"3.1.1382-beta":{"name":"meetup-web-components","version":"3.1.1382-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1d50e3aedd6df448814e738380b3d7ba47026ff8","_id":"meetup-web-components@3.1.1382-beta","_shasum":"bcd78ab5936afd5afdccc06590412807a951d451","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bcd78ab5936afd5afdccc06590412807a951d451","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1382-beta.tgz","integrity":"sha512-iLgm0+pvmrE4/JvLRbx6QysrZXd9HwWjXEUfUZ9lbv4HWsNP3vEY3rLGXFaXsE0uQYRdQZMIVOidJ0doplo3sg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrqfZnk4rB2vvKzBVdjFrKPN82sAYJhqS7L+rmxsG9uQIhANfPBdUMkvI2imQj+ResV0Qq3GCTEzxiFCLAjYsMfdIw"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1382-beta.tgz_1507659418609_0.08920746366493404"},"directories":{}},"3.1.1383-beta":{"name":"meetup-web-components","version":"3.1.1383-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5828f98d926c41835132f9be942a8546eeac4b3e","_id":"meetup-web-components@3.1.1383-beta","_shasum":"9ec4aad271d66774ce6a2466a58ed4de5a1460a2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9ec4aad271d66774ce6a2466a58ed4de5a1460a2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1383-beta.tgz","integrity":"sha512-zUkTA5ox7C2AD0xwQHT1CJXH6+myEbmDp+9/cq/ckjes9BX+V0/5blffvau1qEK9yOf1dbT8/dSWR78vMjNxYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHozuNUXlM+J9jotHSVs5bnfA0Zb6fop/UpHUZhfHArnAiEAgVU0xHuz2D3GLAQGjvcmb2VEIM4ds+sJR3gAkoKTG1A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1383-beta.tgz_1507659462755_0.9360477852169424"},"directories":{}},"3.1.1384-beta":{"name":"meetup-web-components","version":"3.1.1384-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b705844db177b9b1fe40a7f58cbe2db1ab6ec1de","_id":"meetup-web-components@3.1.1384-beta","_shasum":"9c66b34afa63c5ef8e970a21541d0c7280b827ba","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9c66b34afa63c5ef8e970a21541d0c7280b827ba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1384-beta.tgz","integrity":"sha512-7PZIztUbAeTKtXA75RzN5z+XCFGeDbRd2eGKeI5D/Lx1rLOJxWRre2Os0wEXgBJtzb/hSv6UfMkCy4eSMIrmBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDi6fENUqWa+KoN8R0kkajZc5QMJqMWauPzpqMdwfZDeAIhAOzHlFbLdVpfUax5phn1EtPIFJi/oVqtzVLbViyb0Rh4"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1384-beta.tgz_1507659542690_0.7354596867226064"},"directories":{}},"3.1.1386-beta":{"name":"meetup-web-components","version":"3.1.1386-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ad4144119189789d33d6900b01040aaa670fd862","_id":"meetup-web-components@3.1.1386-beta","_shasum":"02bfea7e09b235e32017234f516c495a2fc32c24","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"02bfea7e09b235e32017234f516c495a2fc32c24","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1386-beta.tgz","integrity":"sha512-kNycKcCrnFbd1KrGCsazTiHaRhhmdAg4FP3KnGufE6P/gSY486PvKnZnOXWXq1HN5CUUtVjW76Usstp9epD06g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrcOiClDrL56u7xvCfI+O5C93XMfbDSQ98YNo1RtkuBAIhAMyi+BfU4PXIHkn0c+fknYUwfZ7CfNM0KJ2Z3lpNsS1M"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1386-beta.tgz_1507659649666_0.5966638065874577"},"directories":{}},"3.1.1385-beta":{"name":"meetup-web-components","version":"3.1.1385-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"c83161eb5585eeaf063eaddd7c8ccb03ebe7d2fa","_id":"meetup-web-components@3.1.1385-beta","_shasum":"125d520e63f150f907fccb5ad682eff144b3ffc3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"125d520e63f150f907fccb5ad682eff144b3ffc3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1385-beta.tgz","integrity":"sha512-Y+I6iyz5FZvWkOxj5GmF7cWX2gnKaCb62H1oWV3kOfNY+RV1/GL11saO6y9bHyL8v5BXrAx0qlxVsu75O/Ex2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIArYOxH4la+G/QtkDZT/jYxJRlc30yt3/gBxqveGO+9RAiEAqIP21DTWxy5C4A7deW4LJ/Zlntk4I5U6EptoPLkoYwg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1385-beta.tgz_1507659654398_0.07520352303981781"},"directories":{}},"3.1.1387-beta":{"name":"meetup-web-components","version":"3.1.1387-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"abc12de5fa622f1b2458c98d491f83dcd5c8a1ae","_id":"meetup-web-components@3.1.1387-beta","_shasum":"c09dbdee5ec56c9a5ea061fc3b23f3295ba5c0be","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c09dbdee5ec56c9a5ea061fc3b23f3295ba5c0be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1387-beta.tgz","integrity":"sha512-JBFhVqvg5wuRsP52+5n1IZG11bzpS0EoisjGjeCeO2bAZkm80Dqs/Asls7mFhZ0ZopcaaW1qdzlRxGeOGAgbVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEhrYx790C7yArEB3OGPkR+kuCknpqzyt7ZggiGbJnuFAiEA6peaSOZCc1ew3Z/iRQ2ZTVOS1NQaihSMA+bMoHyPz6A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1387-beta.tgz_1507659712425_0.520172122400254"},"directories":{}},"3.1.1389-beta":{"name":"meetup-web-components","version":"3.1.1389-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"8dacb274967d099fb7fbb8102220789b67cf6122","_id":"meetup-web-components@3.1.1389-beta","_shasum":"dcd52c3b2c4f13025f8d8087b0a0b83edb115df4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dcd52c3b2c4f13025f8d8087b0a0b83edb115df4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1389-beta.tgz","integrity":"sha512-fWe1pXxjEZOVZIFAy0KO+2xMopQ0QA6P4FmHXyHRkSi9dU326tItonnzKqs9kL8iXZfNj67lxGfmBzTg7smhNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqD8hB9Plic41N7C0QWF4ZoQHbo3/B+xe4EHEwEYp1uQIgbtKanw0n4svrV3/k1K8YxMd6lUpSN6O6GyWzLIdPJIY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1389-beta.tgz_1507659855485_0.6461172162089497"},"directories":{}},"3.1.1388-beta":{"name":"meetup-web-components","version":"3.1.1388-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"6d304859d6509a52f124421672e4c0292cda9a66","_id":"meetup-web-components@3.1.1388-beta","_shasum":"d0f2af24e41ff9af96c108a4256844f51c93a760","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d0f2af24e41ff9af96c108a4256844f51c93a760","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1388-beta.tgz","integrity":"sha512-k2it+OApqyudD7hxoAimnQJFFa4CalA2VR0Qrd/S4mVfosHLtxQesyb/6y81LzF9Mm9WB8CkqFsPBxta0w9Qgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA13Yno+hd8JunNkuuxT+vqxMzXXjwx68aHCBbPZGmR4AiBCg4qBaipuYjHDMFrmND/TfprQDIDE9+sZmhjhO3kaRQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1388-beta.tgz_1507659895665_0.11328890384174883"},"directories":{}},"3.1.1390-beta":{"name":"meetup-web-components","version":"3.1.1390-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3e66cc5ffbfaeb1399b4b19b533c31c1ccd4283b","_id":"meetup-web-components@3.1.1390-beta","_shasum":"c9e4337a0f6e88031f79cad675e7e93fcc2d80b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c9e4337a0f6e88031f79cad675e7e93fcc2d80b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1390-beta.tgz","integrity":"sha512-qxhhhtg0/avQClsAqEx8kmBTz78Yz8rvMaPYHu7/SLEuTcV9ztnuyMUQAYVkcMsXZOVY5MmP9SJlR6+IQ+AYxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDJm/J954o3Zf/GgTQzxrZiP3b8qSQd04S/VJtSwJ8C3AiEAuPMx0xP0pmoqeHkacUSib1mtfzSGsORZLI9y/ojYro4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1390-beta.tgz_1507659917171_0.3037820311728865"},"directories":{}},"3.1.1391-beta":{"name":"meetup-web-components","version":"3.1.1391-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f10ca384a90b806961ba4af4d11f71f892124555","_id":"meetup-web-components@3.1.1391-beta","_shasum":"ccca266eabaaa297b919ded4c491f22501beec99","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ccca266eabaaa297b919ded4c491f22501beec99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1391-beta.tgz","integrity":"sha512-+YFCzWcerbXFG+b7JxIgSGzLkaBgWneE38Ebc5ZTahD9OlEHVm5hQa4AeQKkToiDF6hWY3WxkofSSCUSBDw5dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+TgNPfGJL+uds9hu5EVbSdlBoq1We60sMY2V+VE6lOAiAbd0/uUaJcRjbA6bxnp8O6PFwl4ghfZaLxgTI+PqCGpQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1391-beta.tgz_1507660025837_0.4088651540223509"},"directories":{}},"3.1.1392-beta":{"name":"meetup-web-components","version":"3.1.1392-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"056330a946896695cff61024d8ecf4eba80d4dd2","_id":"meetup-web-components@3.1.1392-beta","_shasum":"7aecea50ac17ee3a5087d13fe23bab97d5ade359","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7aecea50ac17ee3a5087d13fe23bab97d5ade359","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1392-beta.tgz","integrity":"sha512-iK4Oxl9SFhyFPrZBJlgvD1IbRPp6HlWerl+tm0iD6cmEE5sbQ26VPotGL6d+R772r1kCEbdglT+zzmyZ3uGqBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEk1zLQdwf2Zum6JoXs1i319zIij9O8qzxAYyRDESoCAIgaT+EQ8AwMH+kklzvYcgCLjnHh1aDDj42wGsSOsE6pJ8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1392-beta.tgz_1507660067538_0.780571723356843"},"directories":{}},"3.1.1393-beta":{"name":"meetup-web-components","version":"3.1.1393-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"9cd551ae8744d1180169f477b283dd5ce81dfd06","_id":"meetup-web-components@3.1.1393-beta","_shasum":"29a7e65be0b9b47bb3d42987d3f5c6d088592983","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"29a7e65be0b9b47bb3d42987d3f5c6d088592983","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1393-beta.tgz","integrity":"sha512-3R8N8V3W3R76JJnKu5hqZwY6/Mfz+nELUTlvL8WZS1EbrPtbVjGviyz+Bs4UM9x3V+fTPkpIys7aVkuyiwHMBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEQd36N9fMC985PCwcA00/uE2tPCJa9jGQBk/LIiMwY6AiBV0fdpw1f5FTii5rjiY/wepsG6ttn+KCnptq3arD8q7A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1393-beta.tgz_1507660099949_0.4172370289452374"},"directories":{}},"3.1.1394-beta":{"name":"meetup-web-components","version":"3.1.1394-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"8ba4016542d3e165f05901fe6d52a252cdf40d2f","_id":"meetup-web-components@3.1.1394-beta","_shasum":"9cc151135fe220e346ef81f9f93aa1abc270790a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9cc151135fe220e346ef81f9f93aa1abc270790a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1394-beta.tgz","integrity":"sha512-NlXvfw9qSvYY3Nq6lPZyMb7Wj7TL29teOwnFJ+m/+9Svwtn6JkRS9djRjMPMZDq4DJtYCRp0Mzp3GyGRusEJDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJvHqNAV56qJcn0+X0YfpZ4GwmPkfHtAcxHLczWW8vTwIhAPhqhVgK/czVeXjXFUvYbkpRE3yP80sXOe7OQeC7CEFc"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1394-beta.tgz_1507660215237_0.19625724432989955"},"directories":{}},"3.1.1395-beta":{"name":"meetup-web-components","version":"3.1.1395-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"cb9ace0cff09a2a622bcdb7946a67115af6c30a2","_id":"meetup-web-components@3.1.1395-beta","_shasum":"1224eebee200e445715134d75dc34a6b713212e5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1224eebee200e445715134d75dc34a6b713212e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1395-beta.tgz","integrity":"sha512-Zx/vxsnl7jVG+6Kw6983KGiI5FAOR8BpeIVXsROIM0xTN8SO6H9ES8EvO9c5B7aXUIzioxP7mWmosEYwwe4ZMQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDytplkNfEut01qBxKuOS65tX9yhDdg4tcLtiX/dxJ+IQIgalX65A0t+wPCVfg11UMf293yhICEDFXtoKP21XgR+XE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1395-beta.tgz_1507660245781_0.10207182983867824"},"directories":{}},"3.1.1396-beta":{"name":"meetup-web-components","version":"3.1.1396-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b898971b32c3c6d38a3e2d4764510a355087aa5f","_id":"meetup-web-components@3.1.1396-beta","_shasum":"23c9cb4f71dbdd8eae59121b6be804816702b8ea","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"23c9cb4f71dbdd8eae59121b6be804816702b8ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1396-beta.tgz","integrity":"sha512-17n44JiANjfNswKYlw/QEcyFl/19g5Opu2f471VFCKTqAfWLcSB26PqjGi5Zg5X0LlRStLQgrVm21jYRPRrgVQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZUYXFvTTgVNSRPSKNr2OBzsHsdacOwaIIC0Ty4QNTOQIgZjOiwSiIOlymjxtAPz1AlYHe5GCaZpV9ggRQuCCIJpM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1396-beta.tgz_1507660379730_0.23758928151801229"},"directories":{}},"3.1.1397-beta":{"name":"meetup-web-components","version":"3.1.1397-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"564fbe8625a849f71d75f5cfbe34db56b7da84df","_id":"meetup-web-components@3.1.1397-beta","_shasum":"f83bef4a61f3bec370324a81f8a81baf7511b33c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f83bef4a61f3bec370324a81f8a81baf7511b33c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1397-beta.tgz","integrity":"sha512-pBxzQoNVAYUxGMm6kGrlv94++JjPH11TZ0Icj3hjwwEjPFzjRnnLeMH9vbBpcvtERV+95jjpTe8swMUuxd7mrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGZABV8nQiRp08j8HDWyyY5mx8wQFkKvEdeqqK7R148wIhAIeJ/pcXO7Gz2i4QYg+96YVqyYSaOruSQEbEdVMpwhMN"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1397-beta.tgz_1507660409009_0.7608854274731129"},"directories":{}},"3.1.1398-beta":{"name":"meetup-web-components","version":"3.1.1398-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d726dc7515e9e38dd56b5f873a7428c1d1789e47","_id":"meetup-web-components@3.1.1398-beta","_shasum":"c536de6a93d2c041883ba28850c7b62369ba25f8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c536de6a93d2c041883ba28850c7b62369ba25f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1398-beta.tgz","integrity":"sha512-ZG5t5aRII2ypLCJOb2tHKg1Ja9bDy0ijZd0/Av+0ge8VfQajT8KASsbHqq6GybiTdd+KO1EFj/MmRYS524y2fQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOIGBF7WSnhbh1on6KBE8dvE/OVHtubLMKxdniYUGDjwIhAJqy6PbOlFtWB3bTdiJA4yMvP3SPxw4viZkDJZxakMem"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1398-beta.tgz_1507660426319_0.1663103725295514"},"directories":{}},"3.1.1399-beta":{"name":"meetup-web-components","version":"3.1.1399-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3164b5722b7c8e4e1d49c3d98e49f74323f48ea0","_id":"meetup-web-components@3.1.1399-beta","_shasum":"4ad3571a640aab653aa701d3c9fa331f24f2dcbf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4ad3571a640aab653aa701d3c9fa331f24f2dcbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1399-beta.tgz","integrity":"sha512-g6lBOu36+Kb+l3IAdIBhymVa+dyEL1nlB/uOx7+++J8IcNVZZnq+Fx/b1yUDIM86bTX8Dq4IHZ/0CjD9L1/M6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvHn/H7KxR9IyfAZn1R5c/TLjxXyTZZFukmz3jrNWq5AiA8hgqQNoN/aXq4Z5WRMzBxYgXcMGR9EuLXdUzigLi3TA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1399-beta.tgz_1507660570920_0.45642236224375665"},"directories":{}},"3.1.1400-beta":{"name":"meetup-web-components","version":"3.1.1400-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b9049d0f3d07e190b98557fa314af5b304da46ae","_id":"meetup-web-components@3.1.1400-beta","_shasum":"9eb56bfc58cdef9ad474687c5b07db66ca0541f0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9eb56bfc58cdef9ad474687c5b07db66ca0541f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1400-beta.tgz","integrity":"sha512-e4xxuo7gBa6UQFuddoirQs7Rk7nxXKoh+PUtJpQkKcy+tcGUNmE0SaIP48a+AEZeLgKZSzllvpUKCqlFxWWs0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEn0iehF2lyWkA1WtbOtieanClHjZnzTJ5bdIfEizbOkAiEA75epx5onPayOeUzy2tRgHBrxfVLY3lZWgR+Qlo4Vycw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1400-beta.tgz_1507660583801_0.2899736696854234"},"directories":{}},"3.1.1401-beta":{"name":"meetup-web-components","version":"3.1.1401-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4c6cfc6baff35c6cc5b4f63771be8838dd2ee78f","_id":"meetup-web-components@3.1.1401-beta","_shasum":"44576192ca9b6f174a07672a484b692d261d5217","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"44576192ca9b6f174a07672a484b692d261d5217","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1401-beta.tgz","integrity":"sha512-FzOUyuUMWN9WHySJHGhFBhKiGF0mUX/ZfkkpvKBIZBTRaWQ62ggnsTtP3k71rCnXZ84WJarrMMSlY/DlW5Jocw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJRERUN0UxoE8gNWbuxub6R2qmhcJo0qnaxFNOoJVTjQIgVgCzzgq4UXaZa+CYm6zpxCn//KZ5B5pOI0Ojb2FQmuI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1401-beta.tgz_1507660716804_0.5098501914180815"},"directories":{}},"3.1.1403-beta":{"name":"meetup-web-components","version":"3.1.1403-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7ab3cf8612af63e407cdbe76d2a52c9837bdb715","_id":"meetup-web-components@3.1.1403-beta","_shasum":"f5f0671ba5dcef3893a7082d95f527f76e77c7f3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f5f0671ba5dcef3893a7082d95f527f76e77c7f3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1403-beta.tgz","integrity":"sha512-DQhV5uEx/ScGmiGb8iIT+7oXBS2hwjyuHM0n90j7uDImV1ly0NAhjuuXikPuauos+8LtJHpCcjTE8exPxjLbWA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZEWvEOtmRR+cHEncY9EM9PU+seWlC+pCZlAzGRBFQvAIhAJOQV+Mcf2Y8QHondfuB+5lNFME5u1rnn/zB/ADpUlW9"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1403-beta.tgz_1507660755668_0.6429638706613332"},"directories":{}},"3.1.1402-beta":{"name":"meetup-web-components","version":"3.1.1402-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"19442c21bfa59f183775b00ee4e3101ae143165c","_id":"meetup-web-components@3.1.1402-beta","_shasum":"6af93aa429855b1406d875a4c204362c2e69bb3c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6af93aa429855b1406d875a4c204362c2e69bb3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1402-beta.tgz","integrity":"sha512-I5SxyosOUxrth4WD4UG5I5rf22ssiZXYhdFy9rY9vBe4Wc2TZhrJ5a2n0rMdmTZliYCHOce+Ns+4vFjj8sBQBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3ulm7XHJv2NtkOAdLqb9nTjdS92So/dY+HTUprpT/pAiA1lFeeOihDV1H66JbD+b+rD9w2lA/5Khr2fCuYthpQDQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1402-beta.tgz_1507660777663_0.48306265962310135"},"directories":{}},"3.1.1405-beta":{"name":"meetup-web-components","version":"3.1.1405-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5f639ff5ce8fb19dacb600831ef2fc9790022209","_id":"meetup-web-components@3.1.1405-beta","_shasum":"1cf9063d6cae4e0da3355b657b2df04bd29fe622","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1cf9063d6cae4e0da3355b657b2df04bd29fe622","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1405-beta.tgz","integrity":"sha512-wREu05WqkJZ3ajflEC1WcgM+yg4p8+tjkghRM967QWwi24EgnwO6uezmBwnjKStEPq2m7EkHI7l0rrQF4HXrKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD38yBasm+8Pzm8qxDjnS4iykFIW08vanD+SLY4lvGuwgIgIrD3XXEeYA8Rs3rOYi58MhRlJUcVC59Iz6T4AKnzogU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1405-beta.tgz_1507660927878_0.3955141131300479"},"directories":{}},"3.1.1404-beta":{"name":"meetup-web-components","version":"3.1.1404-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"74b641276e9394623296dee024842641d571b083","_id":"meetup-web-components@3.1.1404-beta","_shasum":"0c9b68779c1cdfd9983a84a588272935f02bb369","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0c9b68779c1cdfd9983a84a588272935f02bb369","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1404-beta.tgz","integrity":"sha512-HOOW24l86gkdRAVFdFtbtCbsHJXCGiVw2QXhb7TVcbLu0qLV3eTcrPFqArX1uDhjSpXFjRM987oZN9j6Z0sQFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfK1W2mny0uy5HdTK8GpscGgG6KqJVAnX+K41CqbPfzQIhAMuaY0aF2E0IzVF9RCslmpicFBzhYEHZd+lte0Y5TpXh"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1404-beta.tgz_1507660949192_0.2534433100372553"},"directories":{}},"3.1.1406-beta":{"name":"meetup-web-components","version":"3.1.1406-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"e63a77a936a95ba947b3f665864c0362b8ea3897","_id":"meetup-web-components@3.1.1406-beta","_shasum":"67c2c9ff3e89e92bed147aada5b4c6077ea227b2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"67c2c9ff3e89e92bed147aada5b4c6077ea227b2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1406-beta.tgz","integrity":"sha512-XL21M3DZRwcewDrnHEUyS4hkK5kRhsg6tc4y4H7n7vel8lwueAdM5VnoYXtr1zpfppk8nq2kRmSL9Vh7/RfiKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF9Yb4QYIb4rxMjP6++JkRyM/buVWv837bzIxlQcPS43AiEA7w5TJbCmkdRmAXvvQjwGK8nPhvsqv0gXX4jfXfZxJIY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1406-beta.tgz_1507660956421_0.9499503085389733"},"directories":{}},"3.1.1407-beta":{"name":"meetup-web-components","version":"3.1.1407-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5d71563bf2d182440e330b0789def7096f351c60","_id":"meetup-web-components@3.1.1407-beta","_shasum":"d2e105296c9d269120778efc701bbdb8b73d334d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d2e105296c9d269120778efc701bbdb8b73d334d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1407-beta.tgz","integrity":"sha512-A18oimkzDqxftkc1nE6Hx7U04Q6VQpPcACrnvR1l3P8mRwDHXbG+3TqXbKzGqhLBRpvKPZVW3yjdpDz0+4HWhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkE7tXWEK0vzFibj8TgyhEICuENjxVLiAeFAmyWV4FNwIgWTg1xorq7mCI/Tnl3idHXX6nM29LCLkBvqB2Bc+NqhI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1407-beta.tgz_1507661096169_0.8601818885654211"},"directories":{}},"3.1.1408-beta":{"name":"meetup-web-components","version":"3.1.1408-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7a80ec9c52fb7cec11ed6d7cad48f1cdf3abe707","_id":"meetup-web-components@3.1.1408-beta","_shasum":"be6d27704877975ef2f6eb828499f673b78387f4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"be6d27704877975ef2f6eb828499f673b78387f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1408-beta.tgz","integrity":"sha512-OHSPeZaNg9zf7MXu+ASqkthB/aVWSUElzndK0uNtg/G//AlDF0kS7CNStc+iv79VmcnaFBbJ5iCnEQsScREoFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCocofYQSZ21kxZn19N2CTHpPtKUtgIlsw/Yn+D1rh9eQIgFIrEGlK6Xt2bkjoejkOT2vquLmSWb8jOgPXGo5cejB0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1408-beta.tgz_1507661124762_0.9442919734865427"},"directories":{}},"3.1.1409-beta":{"name":"meetup-web-components","version":"3.1.1409-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"de7640eba4448c84ccac6695df12765da1f71f91","_id":"meetup-web-components@3.1.1409-beta","_shasum":"3bb43c8e2d21f90356fdd86b9ebfd5d95985eb4c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3bb43c8e2d21f90356fdd86b9ebfd5d95985eb4c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1409-beta.tgz","integrity":"sha512-YuE7pi4JW7a4hLReJmt5u2cp3raC5gvvxcnuIEQMtQeQfl/dDOYM2lXNX7F3R1cwN0VUiDlaPj/gdfyZZqHmtg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpHSWxl8nlvubk9afkok1r5d3qWSP4WNh4lFHLQiH/JwIhAO2RHQYFC0lpO83F24JUmb+VO3sHlz6tdBjSflwAqgOj"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1409-beta.tgz_1507661147467_0.23253202973864973"},"directories":{}},"3.1.1410-beta":{"name":"meetup-web-components","version":"3.1.1410-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ca0bed8de6ca1c01aa3b848ec27fde43017bfe71","_id":"meetup-web-components@3.1.1410-beta","_shasum":"aa0e7cfd14f98fe1f248db84f0ab65cf52aad04c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"aa0e7cfd14f98fe1f248db84f0ab65cf52aad04c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1410-beta.tgz","integrity":"sha512-katTbX78KnRsFP01ljcfcFsMKJk4kP8rz1bitANlgNe4Idm5K80zFRJtI127f3QasvXILqtf/+0PybJBm595Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGctcTx/QDq5TRlBe9TDagHc5zetbXGeeoqAZTXkL8OdAiEA70IQuRgSOdTcV/kgBAMFSB0xC5MYB/MHAQnyefR8p3A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1410-beta.tgz_1507661267637_0.46190877771005034"},"directories":{}},"3.1.1411-beta":{"name":"meetup-web-components","version":"3.1.1411-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4e5a45db753e355128654cc185d17a902d62262f","_id":"meetup-web-components@3.1.1411-beta","_shasum":"94308f605019a278199d4e2207dd1a6c14fe5327","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"94308f605019a278199d4e2207dd1a6c14fe5327","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1411-beta.tgz","integrity":"sha512-BqTO1VgLmV9HO0jHRpj7xjgQtH64y7HZnXXqpqSnnPH9dnQXTHZpNeqHYLc/DJvCWhej9RN0aWjS/xiah8xmWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTriqurGglk7keLS+hTrb40hDZUl5EU3XODhLyXeCjFwIgEk/JGqd/EkLp0a9/MTjSeXj4GJV9silwLB1HImbCJnA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1411-beta.tgz_1507661302738_0.3026203860063106"},"directories":{}},"3.1.1412-beta":{"name":"meetup-web-components","version":"3.1.1412-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d5f3bb2f1f7907bd392b8633b4a4e5de2d6b2431","_id":"meetup-web-components@3.1.1412-beta","_shasum":"2f5e64ad392f7b6a350c39ba97f5ec5ecb39f9a3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2f5e64ad392f7b6a350c39ba97f5ec5ecb39f9a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1412-beta.tgz","integrity":"sha512-9YwFuVl58qmZqQ596Lyo3r+AweoIyVQt4Ktd2O7wgjbyiCDz3t2QG80fcwmnnYf1x4YnD0TsFyJMr1WoUyjVvg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXEuHzdYg+fPftnePwDOBuLMHH9BDJ1oJhrD2GUhuS/QIgTJrxRSEkZ5zCkKx+XTLRJVxd76jhiwR4X7Re6oomS1Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1412-beta.tgz_1507661376258_0.6221025798004121"},"directories":{}},"3.1.1414-beta":{"name":"meetup-web-components","version":"3.1.1414-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"16237e459df22745e47e30d439fd0213c370fe7a","_id":"meetup-web-components@3.1.1414-beta","_shasum":"0a72b934f61ab8bafb0da6a17a671f1f0b8ea02a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0a72b934f61ab8bafb0da6a17a671f1f0b8ea02a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1414-beta.tgz","integrity":"sha512-A/elmAhRQ6xUgPBIvtjdXzPg+PdxaibodHZNKbl57uoMU2b6waseK0t/3WMEw0GUmhFrT0vTTx63cUknS0EufA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkU3zTJ5KHTJ9IOlXZ0nMskiMvxwfp1Dfp+OxCBNH3bwIhALS11EFTWkQ/6M/5UggRX0TRBJeXBjE11aBoUouzShe6"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1414-beta.tgz_1507661470180_0.7300047245807946"},"directories":{}},"3.1.1413-beta":{"name":"meetup-web-components","version":"3.1.1413-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"fd2a7e2a15046cfe98a070c738962922501d7aa7","_id":"meetup-web-components@3.1.1413-beta","_shasum":"c77ffffdef3a10ad045889ca97edb597e86f1bcc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c77ffffdef3a10ad045889ca97edb597e86f1bcc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1413-beta.tgz","integrity":"sha512-0t61ZjDS1iNM6z/sp6CRAkBOo28L8bEc2Mf/MZMP1+KV3X5VUjxuS5fy3u7ze3TBVh88z4KEpeF8OymGlTqYTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAssaY20sUV5681+8XJ0aAm1HOB+Fnl3QdnnftEa7r8qAiAWHgnKZ8BqRMm7BwGqhvmjopVc10Gkyaw2nTGnzZ/5lA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1413-beta.tgz_1507661486827_0.5202229188289493"},"directories":{}},"3.1.1415-beta":{"name":"meetup-web-components","version":"3.1.1415-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"8abbb519c5f67a67c15157f6cf0c7ff8e89a8184","_id":"meetup-web-components@3.1.1415-beta","_shasum":"5e0ccc919bf1b06bba477f8cb852c6abdaa28100","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5e0ccc919bf1b06bba477f8cb852c6abdaa28100","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1415-beta.tgz","integrity":"sha512-Z6F2R1HR9FegYrpEIMhcMs7Y2POyhvld0OKlffmKeyvvvFxG6R1dnJYEQ/v24SejrnIK00hWsupbnSKWzFFZwQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC1oc9/JFz9wLflC9zjIk+YGVlKk6pMJRmLJ9nX7DiakAiBw1ziNJLVJWd9sN8M2C3kIqWak6pGqNZHtcfY0iBQIOA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1415-beta.tgz_1507661559830_0.8822630036156625"},"directories":{}},"3.1.1417-beta":{"name":"meetup-web-components","version":"3.1.1417-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"68d2b441e8135c13eeb143a3735690094451f0c2","_id":"meetup-web-components@3.1.1417-beta","_shasum":"89dc9b67ce8b59023be21d7d9eb2a10ea372064f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"89dc9b67ce8b59023be21d7d9eb2a10ea372064f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1417-beta.tgz","integrity":"sha512-tWPLswmnwUYyou16cInagOcpkN3lYNBREgI7ucJTwios3C6YnWzEaaxbfoa7G5rrnnJf9yHJowYZhFdeyKblMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbA6DCFU1gZcWBpO/YpZt568R3Zi052G1RHk195aUAKAiEAzoiCwNQUiXJz3o6vX6BvCVLoAyRdcC/87ezp0e2LhDA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1417-beta.tgz_1507661670730_0.14058357989415526"},"directories":{}},"3.1.1418-beta":{"name":"meetup-web-components","version":"3.1.1418-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"31a2c0caf89f7c17699cea8c60ed5492ee66135f","_id":"meetup-web-components@3.1.1418-beta","_shasum":"438c0e1a55d15ec3a6ea0d6ea7e1477f6579bb7e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"438c0e1a55d15ec3a6ea0d6ea7e1477f6579bb7e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1418-beta.tgz","integrity":"sha512-WLlUsV4jFcNjNO0b3aSUhCPyYCgSTepSK+Kaz/tSj68g5TQ6FBdZNifg3p1RgSKQHz//xe+UaXm3gFg59yLzKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDidlRzAw+g+mGleyg4tjazqKJUtFukOop5zABFgejR0gIhAMQd6HGHCEa7XldOLvO7l0KtjR+joAyNQ9S/4P4q0PiU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1418-beta.tgz_1507661745362_0.06871256767772138"},"directories":{}},"3.1.1416-beta":{"name":"meetup-web-components","version":"3.1.1416-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ec857b2454d75eefceb8c213e008640a29be2284","_id":"meetup-web-components@3.1.1416-beta","_shasum":"424d706925d45bdb3e7462b67a0a599367f7548e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"424d706925d45bdb3e7462b67a0a599367f7548e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1416-beta.tgz","integrity":"sha512-o3IxG6bZFDU68DPma7ILVdBwbJwpwmbUMfOthtom3HVukzUKEJauE2n21m4K3JmK+ijTQiJz5UxFv2hfOe6DcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICY23oFoxQkMirrBWTxBq4z2FNKh8TMwPn86BI+bT47lAiEAh36/uZHjhkX8/qJWtYt57f0ifwBKaNLxzaUJMtamYV4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1416-beta.tgz_1507661763312_0.05472646118141711"},"directories":{}},"3.1.1420-beta":{"name":"meetup-web-components","version":"3.1.1420-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"49a76770cfda66e523bef5de78a2ee4a87fd89e9","_id":"meetup-web-components@3.1.1420-beta","_shasum":"4edd1a2c357c0caee0bd235d91a740e1b54d8f29","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4edd1a2c357c0caee0bd235d91a740e1b54d8f29","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1420-beta.tgz","integrity":"sha512-wvQyi1Wl4GJewM2uUBvgMXuq1wR7JTZGjYxZdvyMAiXLq8OIqRTQnPRCkjC30rqPyo5qYy9h/35x6Ybb+DdxgQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOmpDlkc4As1L96VLxiLNRXtNoIIqJpSsk/p8W3pbiWAiEAkZ958tf9+zlo2iYgUx9iXg5XRAmxMYaY72gWf4HtjuI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1420-beta.tgz_1507661908001_0.7700603699777275"},"directories":{}},"3.1.1421-beta":{"name":"meetup-web-components","version":"3.1.1421-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"0b009f7c04425622454044da19dc8f2a30f1e44c","_id":"meetup-web-components@3.1.1421-beta","_shasum":"f45a5025feb8149629a10424bd29e14bcea7fe36","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f45a5025feb8149629a10424bd29e14bcea7fe36","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1421-beta.tgz","integrity":"sha512-OJY+gCDaiQiOWAoomY0VJQDNgU5qZ9lPfMdFjT4KzIc2aevsFs1oC8/mOg1li2ah2pLDHGNtB4taOVdPg23isA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFaj1hrKXKxUVv6cKi9GGnKuNr+zqADlwPc+S9GaRSTRAiEAhrFsTXtpzgLbGbXn8KCcFhvsGXVwDy+9mrXo9T2bN1U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1421-beta.tgz_1507662002432_0.680103656835854"},"directories":{}},"3.1.1419-beta":{"name":"meetup-web-components","version":"3.1.1419-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"fd3fdf29db36042189747ddfc09d8fdcc1149d47","_id":"meetup-web-components@3.1.1419-beta","_shasum":"366bf3e68fb4d47710ce39a487db4ca1a33d1c43","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"366bf3e68fb4d47710ce39a487db4ca1a33d1c43","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1419-beta.tgz","integrity":"sha512-wYNg8bYoO+oSQ50S6WxFElb5BvqT3F1oQJC2eKDJCbfYbdPRIz4tNdKAa7P7LJv+Ef6xBit0lXUNvMBDmytAvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDc3e9cAStE43ecVStWg+NYHjyI+cm5jpGXE1MyC7PuXAIgdM1pMIlcIXZVSGdfm9Hk+y/8F7g4m9ZxuG3njy4sXLk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1419-beta.tgz_1507662013637_0.4429799783974886"},"directories":{}},"3.1.1422-beta":{"name":"meetup-web-components","version":"3.1.1422-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"cb3a9396a75088685aa926c9c5e84e9bd96143bb","_id":"meetup-web-components@3.1.1422-beta","_shasum":"ff6fec950f619deecf909461d21cdb57bde13e8e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ff6fec950f619deecf909461d21cdb57bde13e8e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1422-beta.tgz","integrity":"sha512-Ix06aq14A5hU+mGW0PYdSYknLyhhm4I7WEBsiiawFEo7SfxSyz9h1QYu1TgX53+oglSyZ002irrLU43HsHTMcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvc69fnDQZyOEf5LoMHiSLASHoECPD8wj9pFC0WQ0EeAIgf3tMMZKXCC+TR1rXEDEJKxMR7rLMen15x65jts/bIMc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1422-beta.tgz_1507662083683_0.23200288810767233"},"directories":{}},"3.1.1423-beta":{"name":"meetup-web-components","version":"3.1.1423-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f3ad7d930b53db9ffa98ccdc1cdcae914fefc5c2","_id":"meetup-web-components@3.1.1423-beta","_shasum":"a5497676964282e0676fe8c637e4b32cc740fa39","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a5497676964282e0676fe8c637e4b32cc740fa39","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1423-beta.tgz","integrity":"sha512-hFsDLjFg03+byejKAdel/6s0zDnzZKsjGyaC/EJn5laM734Jlcb4MOgoIQtzyPIsWXLwyD1k2PVll4YnGDOCmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEtHKLZpl/cQ+3DSZVWF+UrNkhNs0aw8RojhQpREGGDwIhANAbtsv1cwcQR++nln+Lz2GA3aAVhFcKrQ0555bB9oax"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1423-beta.tgz_1507662275614_0.8831943476106972"},"directories":{}},"3.1.1425-beta":{"name":"meetup-web-components","version":"3.1.1425-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"9a76b9bec6550f70a6f2e459676d5018450fc10e","_id":"meetup-web-components@3.1.1425-beta","_shasum":"9d7653e7d0fe4c2ddbed5ca7eb94104c949da091","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9d7653e7d0fe4c2ddbed5ca7eb94104c949da091","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1425-beta.tgz","integrity":"sha512-c0y/I4aKISRmcpppPtlfwgqxE3VoCqR9NhgRWyE3mdaJidlxL8f/n+fVelhRDFCRnIRyMnL7XhJWGRVs4oxUag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0KZxpA57q1O2cIWT19wLg2cpKhEhJLlr/RBGnQs6WmAiAi3+4EkvrDkd5IvCK5M3YqdrqnPb6kxNOoWXrjU2DFQg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1425-beta.tgz_1507662301100_0.6330909493844956"},"directories":{}},"3.1.1424-beta":{"name":"meetup-web-components","version":"3.1.1424-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"abf6785522f4f5f6a84ca357867d21f6b6320ca0","_id":"meetup-web-components@3.1.1424-beta","_shasum":"a5dcc0cc762360bf619b0561a8ca7224b69b391b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a5dcc0cc762360bf619b0561a8ca7224b69b391b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1424-beta.tgz","integrity":"sha512-CEEF/PPi4riYRcUgOmMMNU/5RbU1SSCjLMTgq6kriYtDpDocTtXee8uV3wat4LqQ7IFi3WqB1N7xRkd4mf7Ugw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDfkaeyu/f5/VWBFyeQ+Ceh6s6Czcu/aqXgkKCUfVmeQIgauQRk+9zRVgi+Ly5lMQa6KtS1oLNkaE9JwZJkk+H6Zk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1424-beta.tgz_1507662372596_0.7244251354131848"},"directories":{}},"3.1.1426-beta":{"name":"meetup-web-components","version":"3.1.1426-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"20a4c32a27636e816e13a77b679f7daac1e1621f","_id":"meetup-web-components@3.1.1426-beta","_shasum":"ceeee79c391b99f8f9de7756b43f72fa8bbcf521","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ceeee79c391b99f8f9de7756b43f72fa8bbcf521","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1426-beta.tgz","integrity":"sha512-kN/PURKrD0oxREnxy/MIHSV1slXR61qZe51ZDKofD4fcpq+DQziCf25j25WyFSDOJcBp+9TzFB7I6nceq3Y5zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0m8/rMOtfXyye8xUytJQsKyDJbkPit2iBhLqLkqX8TAIhAM5dC2UN8C8mub7vhaJHUPKwEfdTf3+KCX+csOlDhvFr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1426-beta.tgz_1507662447892_0.4639365782495588"},"directories":{}},"3.1.1427-beta":{"name":"meetup-web-components","version":"3.1.1427-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b8b86d4a0b6ec31a29885cc5d0aa362e39c97e1b","_id":"meetup-web-components@3.1.1427-beta","_shasum":"b9e8f88a9fe16ba0585242219078539e73d0d50e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b9e8f88a9fe16ba0585242219078539e73d0d50e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1427-beta.tgz","integrity":"sha512-coWLM1uBaba+0xWpAvse5u4OehHloP6sPL4/sBICh+dL29n+dirPHKYUY+csX+oJTLd7HjF4IqRlvZY4I5qG7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAhNcFokVTBzEmb+AlU7XRBWJ9Jb1Ti+57PpebWWiMPaAiBYyuTfCOsC2dOLnVb3YUiMEaHCWxZLeQu3aOHHVBdH9Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1427-beta.tgz_1507662515164_0.5483504401054233"},"directories":{}},"3.1.1428-beta":{"name":"meetup-web-components","version":"3.1.1428-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d2cec06ea644e4b60ed0789bfceb6a267ddd5ca8","_id":"meetup-web-components@3.1.1428-beta","_shasum":"dabce45bc90535609c34a5c95c99b53248977002","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dabce45bc90535609c34a5c95c99b53248977002","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1428-beta.tgz","integrity":"sha512-WMNJyn69mPhg6PiuH+ia8viPkptET3H8NpeXgHvDuYa19ifNHiHHMnipVroumB7vDrkr6kkfWVBkwe4biYy1hA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFbB7V370nju/Fo4aoAM8nk3sXyPTq85wpN7NZL0n6VRAiEAh6JjVWHw7+i3tHnexEKJ0ARiySehTn2JPNa+H4xK+C0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1428-beta.tgz_1507662554609_0.4896259375382215"},"directories":{}},"3.1.1429-beta":{"name":"meetup-web-components","version":"3.1.1429-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"0c520695e6a499e935effbfff64ae6c193b30a25","_id":"meetup-web-components@3.1.1429-beta","_shasum":"a8d329d2960cbd1277ecc48fa677a49528cde2fb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a8d329d2960cbd1277ecc48fa677a49528cde2fb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1429-beta.tgz","integrity":"sha512-9p9ual5geBPRS4srH2idIUXnpjCqHBK1EwHXQN4OLHPkiJCaTwgDPRgQO4kNIESGbNb6fML3Vct9OalCQC2Hgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6VB9UuIvbRSAaJvHE4wkgoIlUv1qxrS92qK/hRMwv3AiEAzWcQ/ba7aA8PbWOCJJsJw30lGmVxIXBmNyPj5le4hI0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1429-beta.tgz_1507662661244_0.9868262859527022"},"directories":{}},"3.1.1430-beta":{"name":"meetup-web-components","version":"3.1.1430-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"55fb1450a494bb5fcf00379bba59445b12c31733","_id":"meetup-web-components@3.1.1430-beta","_shasum":"ea9a517c2946b20df1f5982b2b4a508360f33e93","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ea9a517c2946b20df1f5982b2b4a508360f33e93","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1430-beta.tgz","integrity":"sha512-E5P085jI10vIj85GPNGvReVmuHw1CGXa/FV2QtrVP4DBuI000lkVizrMrsSYxZzpLDk/vCqg9o7NwWKrfn1CSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQrUP5VfZmlafk+rVLJbsyOVgE5jtapchEuzWHnXkZbgIhAO+yZdF0xIJqfeIRFIxLiWnfLrBYl2vyeZ76to7XKzlR"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1430-beta.tgz_1507662763063_0.028639754746109247"},"directories":{}},"3.1.1431-beta":{"name":"meetup-web-components","version":"3.1.1431-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1f8ee049a0b0627a93d7a40def1fc45a30a150f6","_id":"meetup-web-components@3.1.1431-beta","_shasum":"6e9347ea983ee99c9984ca73fdcce6474c17ae06","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6e9347ea983ee99c9984ca73fdcce6474c17ae06","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1431-beta.tgz","integrity":"sha512-ZMNKNdbPnm1Op3Y8r1vo1KPZBbUK6/qfPJaT34QTR3wdOonCwYNrSo+4uhd7rHi7Tqr0lHVus/ObNwmoGbjPAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASMQbSSc97GRmd/6WaqwHV0Bna2Vd4Ls7fSaD7Uj3nqAiAZcuEGFBa1nYtUDlBUURx3X/ShYcvD4EuHorK+uQK5nQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1431-beta.tgz_1507662779220_0.23129360238090158"},"directories":{}},"3.1.1432-beta":{"name":"meetup-web-components","version":"3.1.1432-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"105a8dd6f8c0a7e67be6307cdd6dd0369c9f1a66","_id":"meetup-web-components@3.1.1432-beta","_shasum":"b2cafd029419e7391d0377ac5e949ae7f22df00c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b2cafd029419e7391d0377ac5e949ae7f22df00c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1432-beta.tgz","integrity":"sha512-hzH3VILHJt37fMkhiQtsit3PmFAfLplJmLRAFZFG4ZdLKGSYVCsUONMdnzzidOYUGC+id8KTwDEhydxvstPTaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJs0r2Cz7NUKoenL6FvNpzPvjGYA1eBpKZbsZUIcV33gIgF0uFSPRzn+QU5E9jjk+TJLei+vCP4srEdS5tG1k4Nos="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1432-beta.tgz_1507662839604_0.32220610906369984"},"directories":{}},"3.1.1434-beta":{"name":"meetup-web-components","version":"3.1.1434-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b08eeab18ad5328d30cf47ce23118290400ed39d","_id":"meetup-web-components@3.1.1434-beta","_shasum":"bb83c5a0d830f3eb3d9ee0c5cc0f7e1b41d15ca6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bb83c5a0d830f3eb3d9ee0c5cc0f7e1b41d15ca6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1434-beta.tgz","integrity":"sha512-/CbW3yc0mu73ESbv3gGQPu4czJT6FZGadzpx/q7J1ej/1hmI5/zIwkO9EoxY6lrjucPMBnXZmcIo4XfgT3RrGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhinGxxG6lGZIFQMaKnqRnEAT31Kyy3YL4qsHx5lm8BAiEApf/IJbtU52C6l7+2MiGW5ez7YJ2laxs5DjmHes7Oj5M="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1434-beta.tgz_1507662965177_0.15084341308102012"},"directories":{}},"3.1.1433-beta":{"name":"meetup-web-components","version":"3.1.1433-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2869068ae4fb0a63aaef509757986b8797f266ae","_id":"meetup-web-components@3.1.1433-beta","_shasum":"b23620d4fca667203b7cf3f0ed01bd17cb7feff0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b23620d4fca667203b7cf3f0ed01bd17cb7feff0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1433-beta.tgz","integrity":"sha512-EDEarfQ/+sxbNZRaWzOSRf50ifsWeORHkCZEnd8m8WLHsUTx8T64ZqbF2RnP+v9Z9/TUpnusRCp//JTjgK9tkA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEnEEwGhsBRT9yvRjuxKfV/9dyEGidVSakG5cvd1SRkrAiAlWgzzWa89H6dF0g8syyZZFPby/1XmmIGSOGRUMlUTBQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1433-beta.tgz_1507662976424_0.8967392293270677"},"directories":{}},"3.1.1435-beta":{"name":"meetup-web-components","version":"3.1.1435-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ed8f9670e2ac5ae1102efdd1991551102eed5570","_id":"meetup-web-components@3.1.1435-beta","_shasum":"7fc6985f9bc4464cf6fcc3a9bde85ccc5741d836","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7fc6985f9bc4464cf6fcc3a9bde85ccc5741d836","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1435-beta.tgz","integrity":"sha512-z1fB2u7eA58U1csBWGC60uWEib0HZJnXsZqYLKMalgjbWHz9r+BSrZz5+Va0uy8vcOuxsKC9YX25fP+rujg45g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAw9BbHQtgv+IQ6Rdxu7TfsTY950FUPi0k212cbpPZRPAiB6KlhqRmvjR8aueDKkt+dWtQUDd2QS17yZsObdlyMpCA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1435-beta.tgz_1507663130898_0.619845351902768"},"directories":{}},"3.1.1436":{"name":"meetup-web-components","version":"3.1.1436","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2f2cdb748372d6db0e4acfee8da2cf6891e60151","_id":"meetup-web-components@3.1.1436","_shasum":"1624a04f7c37c8ffe4b21f34da74c10df6e90bbf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1624a04f7c37c8ffe4b21f34da74c10df6e90bbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1436.tgz","integrity":"sha512-5IaqfZue9AI1lWuSr1wAI0/HWVZq8WYgNLE4zzdsQ7BDFNh9XUNiBWkN/rmzgYqdegY4ZPUchlA31fzA4NAc1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlvfqXcUQvJy2kGbJO41ESfCWKc9XGwz01pbwvOI7udAIgQHNuWTBBtPoqFSJrB5Ifo5yhIJJ5vf3+9WGNkD55pcw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1436.tgz_1507663135159_0.6538285531569272"},"directories":{}},"3.1.1437-beta":{"name":"meetup-web-components","version":"3.1.1437-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"86a2c48cd0961de73aad9a44e55a044176141452","_id":"meetup-web-components@3.1.1437-beta","_shasum":"a0c1d16c1d6e0bb8612ca8d09afc536bd66176c5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a0c1d16c1d6e0bb8612ca8d09afc536bd66176c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1437-beta.tgz","integrity":"sha512-+fPPlH30bSGOvGjRZOYlHj3nbqjlcE1EfRHLcSFUMUqgZ6kdT0xIJxaecpnB+ID0Tsu08lo9ywK9c6RNphOSfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAC9AhtuHCCZa+5KpnD1Eots6uUFvaNo+dFkMH6qe3RrAiAfGOrT5bCaxXOtWPez3MlGWrl2AjsARMHcGIMMyLlIBg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1437-beta.tgz_1507663167118_0.19039193727076054"},"directories":{}},"3.1.1438-beta":{"name":"meetup-web-components","version":"3.1.1438-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"bac96eff0404de74484b50d7ea0c3273cb41a3f9","_id":"meetup-web-components@3.1.1438-beta","_shasum":"05654f5df16167a6653cabbdade3fb322d1d2417","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"05654f5df16167a6653cabbdade3fb322d1d2417","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1438-beta.tgz","integrity":"sha512-ep3TPss7WHOCO5p0gnCUuyM2mXcVBgQ/pvTHzITJwFy9wRF/BEL4Pe/1U4GCqaHYsAIFXtudfcyAD1FlZGVhrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2Sk/Ah+xD58UIWtDsbnXn4FGpWNU9QoCQcBB7xvI+BAIgXZA5O6zVqRMLb2hpbPoEGaJub2PbKf8qGYKHrWq5BfQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1438-beta.tgz_1507663339598_0.5185681474395096"},"directories":{}},"3.1.1440-beta":{"name":"meetup-web-components","version":"3.1.1440-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"864778648b7abed056117ef0a01ecf90f8caa7c9","_id":"meetup-web-components@3.1.1440-beta","_shasum":"169f51cb3a2029588311736824a0227158022f92","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"169f51cb3a2029588311736824a0227158022f92","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1440-beta.tgz","integrity":"sha512-PP8Ldm3JFp1OpyH64+YJy8g+Cauf9z/KzFJfAaLeAFFrlvtLYGrIPzItd8BKZCIP1fVbtrZGYb4RzIZP2ceAag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHsHqOdhAoepIEdue4T8yaG853yzet+qKQHaZqi6fVl1AiEAj/b0zYItY811zWo2utgpejt5ORksMRZx55uZfdU+Dqo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1440-beta.tgz_1507663343436_0.7525079492479563"},"directories":{}},"3.1.1439-beta":{"name":"meetup-web-components","version":"3.1.1439-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"dbeb8897ca78776faa5857b2a896d0493eb98dc3","_id":"meetup-web-components@3.1.1439-beta","_shasum":"5c2958d02f40873c7718a65cb1e403d75c6b7d93","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5c2958d02f40873c7718a65cb1e403d75c6b7d93","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1439-beta.tgz","integrity":"sha512-B4faesEbapO7Sl7TT+wHLV8AH+wBhSZOGnV7obJiR7nbGlNFUyCYFhHBkv4d25z6vgdhdEa6byaKsLYf+R//rw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChnF8dU0RSPcmv/jgxAZNTZWA1EiNVb3mKiDDWfFkpBwIgBKUjCL8Bl1Y5wji8e56ErSiT/FNZdSd2TqSvLFzCEjI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1439-beta.tgz_1507663354807_0.5376161977183074"},"directories":{}},"3.1.1441-beta":{"name":"meetup-web-components","version":"3.1.1441-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2b486fcb5804f0e99adb3ae6f679c4a3b231c4df","_id":"meetup-web-components@3.1.1441-beta","_shasum":"6c9d7a587d726bddac6711e88e3efffb3d6da0a4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6c9d7a587d726bddac6711e88e3efffb3d6da0a4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1441-beta.tgz","integrity":"sha512-njP80Cmlns3CaK6IL8BD/c9x2gDKLEW4s4DrpHpFJRiOcgW7n5yjFkZLpycSpdnkImcfZig4MsAQx8iH4xScAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2ikCmCBHc91gplRqMqShROt2M+hzXn1GzPJabo4WfKAiBlxxuHPfgqG0x/wLjUGMPpN/ECjWGOB1D3X45I5X/TDQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1441-beta.tgz_1507663372475_0.4459747411310673"},"directories":{}},"3.1.1443-beta":{"name":"meetup-web-components","version":"3.1.1443-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"74b04613bfa285433b224025c3af8525e5c8d292","_id":"meetup-web-components@3.1.1443-beta","_shasum":"93d85a85b7e22e68e7709000f7d43f2903fd07f1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"93d85a85b7e22e68e7709000f7d43f2903fd07f1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1443-beta.tgz","integrity":"sha512-zn+7yjajrAZYgSGIFvFdbVyO2m6L3KTTs51Mf6qrBYKSmNRwOmzN7kLU1Zy7th5CFHT9FOwDovkTCUMBU7Bbnw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGpgK37QEeBlSW9aGFSS1WwHwhqOkbBr0hux12F6gLdBAiEA22IBBC7eF3FKYf77EhDTVrxFsDZOhERFIkxyjMVXhmI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1443-beta.tgz_1507663666406_0.4086434463970363"},"directories":{}},"3.1.1442-beta":{"name":"meetup-web-components","version":"3.1.1442-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"084e4ef9f80daba6163e970c6c5f1eebef11558d","_id":"meetup-web-components@3.1.1442-beta","_shasum":"d4c5ff90973e7b20b313afc38c52dffe80663e44","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d4c5ff90973e7b20b313afc38c52dffe80663e44","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1442-beta.tgz","integrity":"sha512-+4WmEpIsjRi9XGcMDmzVzkhUnhf07F19OFMILbbBRSCdENR3ZuDpEH/H2Z2UHlDcrvi2IXMZUugRnRmkKEzHVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFYhaxebfQ4Db3qO74wW+BosYxEDJ+MEv/DMT+O62OygIgHWCnkDpPIEjH6ObP4NyXVbySYD5NjUxK1qIGGgCdljo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1442-beta.tgz_1507663682702_0.7426192632410675"},"directories":{}},"3.1.1444-beta":{"name":"meetup-web-components","version":"3.1.1444-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"441548902731f422aec2cdc7a488d6b62517fcbb","_id":"meetup-web-components@3.1.1444-beta","_shasum":"c2ad33ba65802309ea0742eedec0e76b1c650c44","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c2ad33ba65802309ea0742eedec0e76b1c650c44","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1444-beta.tgz","integrity":"sha512-HwNWH9KlzefVJ0PeQVwIF9oP+42wcCu2qCCpBdKt5BwZ8nbs/jb4Aea7GELQ5248Tocrp1SY3ujNl3RtoU0L3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIES1pen5+UnGpKt1+t2etwbOUNAb8raI+Ozl2ZUgVOxVAiEAvq6YdF9s2ucD51c/+Ii5Yz5XYJV3vita44tKUve5H9w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1444-beta.tgz_1507663700185_0.30258738342672586"},"directories":{}},"3.1.1445-beta":{"name":"meetup-web-components","version":"3.1.1445-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"25daa5e7d51b31afb78a879f3a46edb88c5e49ec","_id":"meetup-web-components@3.1.1445-beta","_shasum":"f2f62c91cdc7dbda2a2002a3c7c77bc1b05fe77d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f2f62c91cdc7dbda2a2002a3c7c77bc1b05fe77d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1445-beta.tgz","integrity":"sha512-A9qty4Rkg0aSP2QPsJgWVwE4P8luTcq6ckAwNDRYKc2yzrMLE2TB9hSfSK0qF8f/iFL5V3E4ZnMWPd6ewHr79Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGid011uXYPQlwUclbwEvdcZtSZoDpLTITDY8PfgA75hAiEAuvcfAlCEy6bvOaRbswn4P9TStgRKm5YXHaL2fV7Ywzc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1445-beta.tgz_1507663921138_0.8002799106761813"},"directories":{}},"3.1.1446-beta":{"name":"meetup-web-components","version":"3.1.1446-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"665f4a789ff7b8c56952b59d46002e7d85fd736e","_id":"meetup-web-components@3.1.1446-beta","_shasum":"5e392bdf3d209d43464886c1c63e3c53b71c7343","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5e392bdf3d209d43464886c1c63e3c53b71c7343","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1446-beta.tgz","integrity":"sha512-7FrcfeiAAmnoh9BGrzUL9YM7eKzTyNtcstorsWxEcnhX1zVOU3dEJzL9ApRAgehzMsrLiLgAif8sekSIiTMeNg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD08EWsdgSJqZAMlouP7T6jWGMJS6HtOPZW+zpnwpOljAIhAJsqfrFYQ7JhdChFm3t8jzs58pD1E541UblWEowiyp4x"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1446-beta.tgz_1507664528395_0.6123729390092194"},"directories":{}},"3.1.1451-beta":{"name":"meetup-web-components","version":"3.1.1451-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"dd75553b15a0e5d5e318cd955afcdf77eb70cb4a","_id":"meetup-web-components@3.1.1451-beta","_shasum":"2cb80fbe835fa1fa5fed9a829475e6221d5f872b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2cb80fbe835fa1fa5fed9a829475e6221d5f872b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1451-beta.tgz","integrity":"sha512-xfEQa1VYU5Gh/cpncihxzYQrj6wu/oLyY673yHidQuYuQEo4v8iBHslfDanpL/KHLiBuMMbQzM0JOByVaXYZ2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQa7MWxqTEa43Ct62u0lffMYVhn3yRSHOsTaB/wpMLfgIgXNL7uxSGqH5KgHfC3sw/KZNTDMV3+n21YQOiyEPNLVM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1451-beta.tgz_1507667003959_0.5509702975396067"},"directories":{}},"3.1.1453-beta":{"name":"meetup-web-components","version":"3.1.1453-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"44d19adc476d3b1807218021555df2e9ee156f52","_id":"meetup-web-components@3.1.1453-beta","_shasum":"9456339fe1e080c0ddbb0676ecc66463e6630009","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9456339fe1e080c0ddbb0676ecc66463e6630009","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1453-beta.tgz","integrity":"sha512-s+H78Q7PfDfWCP+Z6vcIdkwSOIRFv2cDO5TErm/ZCaM4KMiVnX7//qy/FwjD0vbHvxBRiGYtijgVZefjCEUhjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDW2b1bI1omEtxMGUCdecAj/UAbHkskSpWpBozlXEMfEAiEAxHhSIrLHvxRJvxGsxSd0VBHZXs6ZvVK1753Y5y4k2Zc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1453-beta.tgz_1507667272686_0.43737308331765234"},"directories":{}},"3.1.1452-beta":{"name":"meetup-web-components","version":"3.1.1452-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"004b7baaefa138ee87f0b2a80234d2bba52df993","_id":"meetup-web-components@3.1.1452-beta","_shasum":"6fcc1b11d25c386c188f930ec11cfcf7ad522c66","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6fcc1b11d25c386c188f930ec11cfcf7ad522c66","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1452-beta.tgz","integrity":"sha512-CtvLPNn90Np7IatTrZ5xSNONfUZlLrrtTva3tQtIz2rUxnGncMFRssJHHlfPsQjV7wT3bdsvQqjZv5Aqw9L1xw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/WaeoWgr/YWgcXzLz08SjF+0KxmywyocWiRPzrtDbOAIhAJZ31tyIGeP27WA3RAWg2APgQk5US6zlPuAZIii3i6kL"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1452-beta.tgz_1507667309802_0.5789014510810375"},"directories":{}},"3.1.1454-beta":{"name":"meetup-web-components","version":"3.1.1454-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2e0532bd1418558fe9ae348a60a8988c6fa1fd77","_id":"meetup-web-components@3.1.1454-beta","_shasum":"54d5da99fd09782c25b8e40981dfb67935f83ae5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"54d5da99fd09782c25b8e40981dfb67935f83ae5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1454-beta.tgz","integrity":"sha512-AKNPR/sB/mbLDj1L0q8KcvZ+1Z1WU58ZEOffRKVj9Intp39BAgtj4dSI6C/WRKiTJvVAg16fYnBH2QsRx2mzAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrwjNIVdJr/DMTtmMTr3pU0KBRzr4ocup9EP3cFEqEzQIhALLjgnXJ6Y2HHYGNgkoCEhrW6jbwwg6pUwJn2wjNkNA1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1454-beta.tgz_1507667456773_0.09520086809061468"},"directories":{}},"3.1.1455-beta":{"name":"meetup-web-components","version":"3.1.1455-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"fb892ef1b4da3beca9190f4e381a49672b187d23","_id":"meetup-web-components@3.1.1455-beta","_shasum":"2030c39b4d4c813b93a412dd8419b4256265f64c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2030c39b4d4c813b93a412dd8419b4256265f64c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1455-beta.tgz","integrity":"sha512-VykjXeXX+XLj7SFLeMTwvv/8Ha8rdyhh0YUbPJM22oPcXgTn0Q+0pMq0m2GtxQfO+Rzd7K35kAyda/Lwse0f3Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzHwYyK5mg9Yq2KqhKHfXezDCgVunWoPtn6NasAUXVrwIhAM4lMWCCqE3f5UDOVPYDyBpQ0Z1jY2Kss2d7oSJuw790"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1455-beta.tgz_1507667517986_0.6940604445990175"},"directories":{}},"3.1.1456-beta":{"name":"meetup-web-components","version":"3.1.1456-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"20603d974f42a50586221aa4badb929ae3f715e0","_id":"meetup-web-components@3.1.1456-beta","_shasum":"143b3e565286d3818a18040461f4eb697b13c261","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"143b3e565286d3818a18040461f4eb697b13c261","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1456-beta.tgz","integrity":"sha512-mlkQEisT1dAmKEoar7eVLO2tbwJt26xMhgOAuk9bfi1XRd3xeW4DE/mdeGmW6vMdO0wmFLROfBRERzpjW8evQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLonBc0r166hNOIZjPc00plJRfBclas/bNIpEJloXE/AiAt5RLNAl1fIaR6Ux8s6xtqliWFLyS94pLsZHTFbl8Unw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1456-beta.tgz_1507667687271_0.1894908924587071"},"directories":{}},"3.1.1457-beta":{"name":"meetup-web-components","version":"3.1.1457-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"e429ace9766825daac0c70a61c9ad3989b5b3b53","_id":"meetup-web-components@3.1.1457-beta","_shasum":"276396b6625172e583ef5c30f32e13333cde7cc8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"276396b6625172e583ef5c30f32e13333cde7cc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1457-beta.tgz","integrity":"sha512-kROziDGZSQoZRNtueTyl8PeuWyOF1PVHM/UhnOnmDwtY3L/aFL3gQsR1O/zwlR4ipdgGs5/HRootH6p03ddpTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDR9WqjXwGHLaZ8h4mJknRGSgPG1KulDJ+34pVv9OMhFwIhAONU8zaXy1Fk/RNIRpd0ibTdVmJivFrXbDbh7zOCtgCT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1457-beta.tgz_1507667701642_0.16356944316066802"},"directories":{}},"3.1.1458-beta":{"name":"meetup-web-components","version":"3.1.1458-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"c513c2aaffbf614fe37d9a64d6a60340a9236059","_id":"meetup-web-components@3.1.1458-beta","_shasum":"ca9bf53d463ea7d3b6ad8090bd77d15644772186","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ca9bf53d463ea7d3b6ad8090bd77d15644772186","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1458-beta.tgz","integrity":"sha512-7fCS2XlsU/0hkS0V96dFmibN8D3etEs/OFatxySa3qPmI2H/3qUybkMgYGSQ6g/A7tHJaxIBx1Zw/UKnkdLqyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBWAgi8+c9fJQ53FfakTIa2ij5lW4SL0Vk19i6aFAWKgIgSFRuxFs6ACsHOZbkJlV7Zi/EJXlqC2EYG2rjh8Jdn5M="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1458-beta.tgz_1507667850086_0.45390513236634433"},"directories":{}},"3.1.1459-beta":{"name":"meetup-web-components","version":"3.1.1459-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"a012b672f1c6b176337dee51541dbb6301722a20","_id":"meetup-web-components@3.1.1459-beta","_shasum":"031fba7485a43ca78ffbe9905c5cfd90c0a6a171","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"031fba7485a43ca78ffbe9905c5cfd90c0a6a171","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1459-beta.tgz","integrity":"sha512-+Aq7ak1kgwMiutL8DS7e2L4Faf+Njx0MZ9wBV4JWDnWGzjcGu6qnZlZiHSOfbmTNq5A/Hs5kzVcSYtH/1aF9SA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDv2naFB3tQk4zAZ9R4Xo1emySXtf9cWssCJ3fHFVZrzAIhANUIn4HOoYZYpLEurhhpyCqulahWiEIDKjuGp/uN47C1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1459-beta.tgz_1507667923668_0.6118095866404474"},"directories":{}},"3.1.1460-beta":{"name":"meetup-web-components","version":"3.1.1460-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b3857acfca8d1dc1396c8ab76b2e2330b5a0adf2","_id":"meetup-web-components@3.1.1460-beta","_shasum":"b506749eeb6c930d4c0fd65a997f8bd4eef7dea8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b506749eeb6c930d4c0fd65a997f8bd4eef7dea8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1460-beta.tgz","integrity":"sha512-rEGNMRLq8zDMIcMQ5qD3++QNFQhK5jtwLZoS6no/aX8p0XgXNTOYFfJa36oQw94u9Vkj9F/G+7JgWiex8/HfQw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRn+2laVTqFOIQi9n1C9KgF3KfxOlYe+zdefjSiSp7cgIgIXuheXDhQBHj1HbJ7c5QtsmSr7HQclt1OP3vjWuHpwQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1460-beta.tgz_1507668077610_0.12854116689413786"},"directories":{}},"3.1.1461-beta":{"name":"meetup-web-components","version":"3.1.1461-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"eed168a98c3618f05d58f0b2e79c0d4ddec96b92","_id":"meetup-web-components@3.1.1461-beta","_shasum":"4315f2f5ee3f90dd9f05f7aeb4f6bc404283e498","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4315f2f5ee3f90dd9f05f7aeb4f6bc404283e498","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1461-beta.tgz","integrity":"sha512-xsAyO69YW4joCKytydAJgWmEA6QPS4eqCwCfT63Fskm6CNlsPOkpG+KT7SBZWq+3V0zu4lQCnvNFOAn+BhkqDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOI4YKoBJc5v/nLVwf4Cn2agUSIFPNAejVIRfz/N9GwAiAUQaQcJTeoxaGnFuSbFER25Ro0KoKqRUh6a0uY5g+LPg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1461-beta.tgz_1507668162931_0.6025569811463356"},"directories":{}},"3.1.1462-beta":{"name":"meetup-web-components","version":"3.1.1462-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"73c3c755a58a40e94d1947972d1f3481d99c4326","_id":"meetup-web-components@3.1.1462-beta","_shasum":"06225bd791fc5b75cf4e92baf667bb2d8498d352","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"06225bd791fc5b75cf4e92baf667bb2d8498d352","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1462-beta.tgz","integrity":"sha512-H+lYjQdCE/7aVD6rvF5Y1nlxDprMYbyP+L1d6vhohEojaSWWjqTNj/ok/2FWTOapxNs+t//1QCq7QSf/DI3lYw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD41munJkdpEd3kXiSXZSmFJ/7dsiPV3t3fgo7wHBdqYAIhAJygQjuVqd/biXbw1meTwWMweolJQdXaOiz0SnMtJ1Ii"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1462-beta.tgz_1507668267276_0.6364052114076912"},"directories":{}},"3.1.1464-beta":{"name":"meetup-web-components","version":"3.1.1464-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"9c4fc95ccc62ac946216bc2c2170a10efb856913","_id":"meetup-web-components@3.1.1464-beta","_shasum":"938b3e56baa45d9442662507d068300fd4216de9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"938b3e56baa45d9442662507d068300fd4216de9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1464-beta.tgz","integrity":"sha512-nK7LJD64XjGbQDUQAZqkWVcO7GWFBnEgWqQFkLCiO8EQBw6Tvf4PDK1ctejH5sPLENmtSdl+GrkdTBNP0HOgIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgRDggcb75cAY+fPN1EzTMFiKtGIOOq/JPmYOnz9tjKwIgLXH7VVE09vRTSL36AfRSLDnnBvJlekUcbHWMwzfz0G0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1464-beta.tgz_1507668453372_0.47375916270539165"},"directories":{}},"3.1.1463-beta":{"name":"meetup-web-components","version":"3.1.1463-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f0605739e7776770cca5100124202731f5437da7","_id":"meetup-web-components@3.1.1463-beta","_shasum":"c819aab18bd103dad434c4e1bd71989600e0a2fe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c819aab18bd103dad434c4e1bd71989600e0a2fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1463-beta.tgz","integrity":"sha512-5Hg41XKJeMltNipa1+ma996bf3OYehmepCz9mKWocn+zgKOKfc7jJ2fG92YlLs4+UPudhD0t49k2cJ2p/UqeRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjogdx7tygFknCNWedf8Qz2/DyAU8kbQJHhW1TCSSj2AIgXv1+ylWcMkMuU1co8dP3CtV1xIbT2WDhhyzgZBPG2cA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1463-beta.tgz_1507668505530_0.17355851945467293"},"directories":{}},"3.1.1465-beta":{"name":"meetup-web-components","version":"3.1.1465-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"850b6746b8559c9c4660faaa816c027cc26789ab","_id":"meetup-web-components@3.1.1465-beta","_shasum":"bb994a8fcc986f80cabda18a13491634d2546e43","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bb994a8fcc986f80cabda18a13491634d2546e43","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1465-beta.tgz","integrity":"sha512-GnCOgoFAamMqZtg5tkJXTEZ5Tbm2Pats2Mv5OIs+KZL0/LotF5YbmtGVeSlJclpjnK4Y6N9zkZ8EIfKxpX2p8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFv9dFr3q24us7HEgwBlvkDzp6yEKoDjvvQNrPA4s8cAIhAMYmNkvyQ3CSqxw8AumrSlDjOrLEwdgVspa0ZLZhNlB9"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1465-beta.tgz_1507668714108_0.8166430306155235"},"directories":{}},"3.1.1466-beta":{"name":"meetup-web-components","version":"3.1.1466-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"8f389feae085319e5164844974b917c5a1bc7c50","_id":"meetup-web-components@3.1.1466-beta","_shasum":"4e24dc81e81d837ed775ed04f373129462bb2374","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4e24dc81e81d837ed775ed04f373129462bb2374","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1466-beta.tgz","integrity":"sha512-evqI0vVPD9VVsxELyDdNj14CZWchMcSjfKFYPsBAw9b1M7j1u41z80bIHko1hui918nAECwRtwQ/zH+cmr1YnA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA5pnUPSLhBKhaMDfUtHMbr+sSonQt2uXUb6KZqlX/IKAiEA0MGrOY7V4j7R+9rUsKktjcnTjIlICgWqJ69HEuW3W8Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1466-beta.tgz_1507668762374_0.6271784752607346"},"directories":{}},"3.1.1467-beta":{"name":"meetup-web-components","version":"3.1.1467-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1ddb1bae16d52c6692c14a13771099f0cf2b0b31","_id":"meetup-web-components@3.1.1467-beta","_shasum":"dd805ad186e8ab5e41a6173f180584143cb74eaf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dd805ad186e8ab5e41a6173f180584143cb74eaf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1467-beta.tgz","integrity":"sha512-GjmGXpXR/lxfKbqogG5JC3WjIXeiae0kNYP7sk021r5BDA34gILEDYICvfW6w4+KjpX4YLEeshGWlDdLpdD9Nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhpOxDBDPEf8PBzUXsxwXhKiA/u0KL4XN+iy7cKi+2YAiAB0PPb4s+BNrksitJcuzCZe4tceUj/da4EeIv4rZ8Azg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1467-beta.tgz_1507668882421_0.07098308275453746"},"directories":{}},"3.1.1468-beta":{"name":"meetup-web-components","version":"3.1.1468-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"a469e585b268ea0c57d7eca27d08eb4dc81d0e52","_id":"meetup-web-components@3.1.1468-beta","_shasum":"9eee2434407ea2d334c8846494a9be3fdd168c3c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9eee2434407ea2d334c8846494a9be3fdd168c3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1468-beta.tgz","integrity":"sha512-PjfoS924ex1ogSBw798je9N16VEzwEHVMjVpIuEoGVaFyE7i7EZn5PQFVn8H1y+gLu8hclW1JOOEOXucBR8Nqg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDK+vHUyHbpwaQVPQrm5NBlwekht26MiBUtckeRyvMDtAiEAu5SCJwa9bIQSYLzy91AFQi52lKLuW5jmawcTJovZQz4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1468-beta.tgz_1507668987724_0.6022303944919258"},"directories":{}},"3.1.1469-beta":{"name":"meetup-web-components","version":"3.1.1469-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"2328343d11b62432383c64e189bbf0cb38622620","_id":"meetup-web-components@3.1.1469-beta","_shasum":"9412198c0bf2acfe73e31950823179f92c8b649e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9412198c0bf2acfe73e31950823179f92c8b649e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1469-beta.tgz","integrity":"sha512-tipbvPAxKJtxQio0rsXDC0SjbWHw1sYb9JUrOrWJVDynkVLoTShl9dbJLjAXvzHVYTnYmqM2eQrzac0OTc4EcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1kfrhoRJ0fr22mc9SOEUR68Tjljgo5o3/HDE44WAivQIhAKTbBmhAswyObeReduS2OM8zbwa+8uBgl4CHjUZAm5Qs"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1469-beta.tgz_1507669053261_0.10539823863655329"},"directories":{}},"3.1.1471-beta":{"name":"meetup-web-components","version":"3.1.1471-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"fecd1f83ee425cc45465e6b79598408c13f5a2b4","_id":"meetup-web-components@3.1.1471-beta","_shasum":"ca94240e774a1841822f5ec7be6f3b284f665573","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ca94240e774a1841822f5ec7be6f3b284f665573","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1471-beta.tgz","integrity":"sha512-AD5KGATgXArNA0sJ1VA4Ubfu9M/INyz15GOdDYh+SN1etqQ1H8Lryk4TYjNQst0A/tKa4ZSfJcjsyWse3A0s2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDu4AH+BANRhRKeCZWwnBdRIC0NPx/rN9i1V7/bQ4GutgIhAIiwHeMfAn3dZaYbnEi8hzB761Me6dDqkfNlwHrXSvVD"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1471-beta.tgz_1507669194353_0.739355759928003"},"directories":{}},"3.1.1470-beta":{"name":"meetup-web-components","version":"3.1.1470-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"fdc143425fa9b0d8d1ef2478d266cad99f1335e7","_id":"meetup-web-components@3.1.1470-beta","_shasum":"32f8141d6310f349f08eb6a32c1c54af2b88f9df","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"32f8141d6310f349f08eb6a32c1c54af2b88f9df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1470-beta.tgz","integrity":"sha512-tEUowmi0QyaEqDWAjAX03jOamjQA2yr0EtHdo5Ao9RnSQFmK6AB6apK5DgPuVrX5GOgkwT5O8+jFj7B7wg6rBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDODUmUtJ7dnicHmW5J1XI4jz1dIPmESG3AuV4VjdgoEgIgMn/k6Fh+/eCvgxKSTAi+Fl1DZQcPGq3aFLw3VtBaL6E="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1470-beta.tgz_1507669211054_0.5318069232162088"},"directories":{}},"3.1.1472-beta":{"name":"meetup-web-components","version":"3.1.1472-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4e1867ee0593a35a1a3c8b0be4356babf2ca2190","_id":"meetup-web-components@3.1.1472-beta","_shasum":"8019fadbc1356b2785d938292074a1be54eebcff","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8019fadbc1356b2785d938292074a1be54eebcff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1472-beta.tgz","integrity":"sha512-qhRvLeVlruXkyD/WyVD47fCOvZPiLXSxNMerBr4LbAKaoS6u9qNxPZBQwmsrLkboRSED2JmmfX5PhBFLT/DBYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlkbbWEOqE055WDKRWiZi186McSK4tuS7FEKFHnYYqFAiEAyEfY0GP0k2sa2Cu3lQtB8al7BK7q4fvIVRjXJ83RK3I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1472-beta.tgz_1507669253153_0.8388820351101458"},"directories":{}},"3.1.1474-beta":{"name":"meetup-web-components","version":"3.1.1474-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5b944541a888fb44681bb6218896644c9e148d06","_id":"meetup-web-components@3.1.1474-beta","_shasum":"da808917a3b3dad246cbf75dbec87ad410886bb3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"da808917a3b3dad246cbf75dbec87ad410886bb3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1474-beta.tgz","integrity":"sha512-wsgkdrmVE38RNB+MM9xIRzuJXcU5puOR7Q1f2DYI7OkKTSOItGbbCBKjpcXgEYoEnjioDB2IdYGbjahQz8hR1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo73B2h7TpRVVsS8LneK6bOfiNUMbNjecuD6wJcyuHegIhAO1XnfILQfTXHRNVpD3emHvgPC/vepwDZZFw6d2BbtI5"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1474-beta.tgz_1507669441241_0.28331684810109437"},"directories":{}},"3.1.1473-beta":{"name":"meetup-web-components","version":"3.1.1473-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b9a4edaef437eaa841c03d74661f377003c905c1","_id":"meetup-web-components@3.1.1473-beta","_shasum":"3f5c481d067987dfc7103df8a5387232d01d09c3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3f5c481d067987dfc7103df8a5387232d01d09c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1473-beta.tgz","integrity":"sha512-1IMTN4PlBbFyNeN5rgpRJ8oaxP9BRvYCKnQDCaRc3N7OfHudPAOGLIL4t4xVsVhavTp+ah5CvHm2OEvGr+AR6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEEXoFq12gtzFlvm1Z764kJ1jyRbghuy7MhLZ72SKPYaAiEA7tSjQXV2IKXhr0fH8mhqb+7Lpqzt3vDBQnMg3koqFEE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1473-beta.tgz_1507669444914_0.715381303569302"},"directories":{}},"3.1.1475-beta":{"name":"meetup-web-components","version":"3.1.1475-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1878d6f183c66c35e4b93b9368e8de42d06cb6b7","_id":"meetup-web-components@3.1.1475-beta","_shasum":"f93386c6b955a93d9ff951131f568bf62870c08e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f93386c6b955a93d9ff951131f568bf62870c08e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1475-beta.tgz","integrity":"sha512-Fo6nhYClMfHcz8VFISl5PuM9z3KVKMFH0cNfnUfM+QFbO3eVNdZW+Q/huv1QCwfwdNIwNEz0lB4FruJDQiuTDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDy2QMh+G4S4cbutKo26k0DWeb/pE92V43mFih9O6PYVAiEA6z3FT2hbeTp8N1qnQpd+iAhfJnEht9P0n7hpCpRPofQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1475-beta.tgz_1507669474959_0.47153381491079926"},"directories":{}},"3.1.1476":{"name":"meetup-web-components","version":"3.1.1476","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"17469709b302b8622ba22ac6692d53b55652b931","_id":"meetup-web-components@3.1.1476","_shasum":"39b49c8e8c0e69c84a0bca1aba93a343b950a6fe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"39b49c8e8c0e69c84a0bca1aba93a343b950a6fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1476.tgz","integrity":"sha512-xXVdaINKGrb5+ENu7flKaeqiviH5lrEPAxTr6oMNlxax2njNiHSJrauZo7EgZYht6R0JQTCOpjfGVpSvDwrExw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBC3KD2TzFjAOfVqQtBLxcjoZT2mEomTfADJ1qiK8tPqAiBLrbdReYGyKHATjV4Qxja02W3LgvBDNVjyJfzgIXERDw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1476.tgz_1507669573028_0.8231115562375635"},"directories":{}},"3.1.1477-beta":{"name":"meetup-web-components","version":"3.1.1477-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"faa4033a452cc4ded76673e6e6e6234aa42d90fb","_id":"meetup-web-components@3.1.1477-beta","_shasum":"45349b81fef2d7ec5c60eaba84620a022adec527","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"45349b81fef2d7ec5c60eaba84620a022adec527","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1477-beta.tgz","integrity":"sha512-tiKrgei6GrjG5xpvX86vlxoDN9t1NbzrM3FdtrY+zSr8HYfhGsoiGJ8QbAW56Bqr/oNvoJY49LrcQB897UIBFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDdzDmWPANAGgAp0i1vg84MRMoKsBL8TdauhLwGM6C2mAiBYRy5J/2ey3jkgTEvbflQYtRBmjAn34SSK81iNvG0osg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1477-beta.tgz_1507669638838_0.7139223602134734"},"directories":{}},"3.1.1478-beta":{"name":"meetup-web-components","version":"3.1.1478-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3f397c83ef7697764a99c3c238bb88734c65fb65","_id":"meetup-web-components@3.1.1478-beta","_shasum":"3f146e05c90bd9b3243350b0186541dbee7d69ff","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3f146e05c90bd9b3243350b0186541dbee7d69ff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1478-beta.tgz","integrity":"sha512-/4T00mjFNdfSY4lwNq/lZM/ThjlaG7BMtBwKMvGXHCJHgrjcVGYmuhAFnIvtKWCi9VhuMqEUcbEsQ4WaisL3Dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+NkcAevT9YP8W7kcFyvv6dIeQd/p1TwvN6/gwcUzzKgIgMaRLCjXY+AyMYG0trjVwqjiNLp1M9CoLI1m2/pRw3K8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1478-beta.tgz_1507669649522_0.4339942855294794"},"directories":{}},"3.1.1479-beta":{"name":"meetup-web-components","version":"3.1.1479-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"cbff2910d70f391495b35e23cb66de04fb462486","_id":"meetup-web-components@3.1.1479-beta","_shasum":"a92f950c3ecb431ca00ca20ec02e2b44eaae72ef","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a92f950c3ecb431ca00ca20ec02e2b44eaae72ef","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1479-beta.tgz","integrity":"sha512-UHUV+2yDETo7BbgwUzs86Vy+DL7EnE4QAf8yER4vZPN+MPj1mVg1FB1yYx/7LESOO/zmKkp7VdwAYBpeu1qhHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCm9y6D8SjzDlTPgeCGIc1/Xh2jQ8a2Hy7yDdME8MqKzQIgKEMYRa5ebG6RDzF2FtyFA7Cc2Yehf60I9T2lCoem2xs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1479-beta.tgz_1507669750962_0.16450654179789126"},"directories":{}},"3.1.1480-beta":{"name":"meetup-web-components","version":"3.1.1480-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f6f06919bb0ebdedc034ad8e803c9a134d5341aa","_id":"meetup-web-components@3.1.1480-beta","_shasum":"118e9c9d3db65f0551b21ca93fbad3778fcb5655","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"118e9c9d3db65f0551b21ca93fbad3778fcb5655","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1480-beta.tgz","integrity":"sha512-shygfJtZzIEzhdrmzAAC2pLMSGI/bPztUEJIEWo9kTQzVJFRZwWuqAmEUxuTGfxzJ8IWi4NF3HrY/yJeWBvw8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEcchuOnK49Gec/EoORwn02qqcn6jIdTz4DGwSJGAlZAIhAOc9+ikR/7IQYn35kZSvdKH0h77d81LE+hABpyflf0wf"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1480-beta.tgz_1507669774766_0.06752840289846063"},"directories":{}},"3.1.1481-beta":{"name":"meetup-web-components","version":"3.1.1481-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"12318e301da84d3290132c616c4a2b6adaa27e0b","_id":"meetup-web-components@3.1.1481-beta","_shasum":"5a45e809281e0b7fcbbc0f2c44d1c831ccdf71f4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5a45e809281e0b7fcbbc0f2c44d1c831ccdf71f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1481-beta.tgz","integrity":"sha512-FlrJwB4QX8sV/SH7EK2nxYKMG98FwEk2ecmOWIGm3dvVgDJ3uc0hgbFzTSvSIGkm18i3thbypi5x8er3JkU5aA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6hIfcZDAsGTIP0vC20L214PVgA0Ur8Vd+CHiC7db2lwIhAM0ftVlG1JaTc/UkXANskmR1+FiQLJHJiY/2rqbFN8ME"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1481-beta.tgz_1507669829908_0.7395234724972397"},"directories":{}},"3.1.1482-beta":{"name":"meetup-web-components","version":"3.1.1482-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7dd68404c8eb754121fffb5491d0f7af0c204656","_id":"meetup-web-components@3.1.1482-beta","_shasum":"52b0a9f231ad6465659b7d429210f8469c915fd1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"52b0a9f231ad6465659b7d429210f8469c915fd1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1482-beta.tgz","integrity":"sha512-axU2HUF6WXF9IFdftjYrCCBI8HkD9FKKy75mvgTqNE4FQAwMZYpq3e+t+vD9uJ6zyNJJz1qAVGtxVu8kaCvIvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDu981ERcatijhiuDrYppQ7cyGoeEKGgxBEkL/4rmHWXwIhAM/SWSf/s66fGjGOAIz5EPzGx7dSfgCYySz8JKKytiZS"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1482-beta.tgz_1507669895716_0.8415543504524976"},"directories":{}},"3.1.1483-beta":{"name":"meetup-web-components","version":"3.1.1483-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"39fe51be76b7f79ea77528c03d105d5619e9b7a3","_id":"meetup-web-components@3.1.1483-beta","_shasum":"33b52ae89b3e434d501a7811a5ce2ffdd463db25","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"33b52ae89b3e434d501a7811a5ce2ffdd463db25","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1483-beta.tgz","integrity":"sha512-72ZN0cZC9WyK9LlHpGcPybWP/P9PEW4JAy1JP1+9+M43wSGuqDSeBjZRbzUuDjpf/J6P0dI/Ahbe9L09zdM54w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyaMBPaJBX9mZbwZ66hiyUVSBEhBNzjBepYLcrRZvy6AiEAl1OREtCYtUFV3YUXWrazMZLu3FWcGnHWDZTu9gA8rQ0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1483-beta.tgz_1507669955068_0.2752600705716759"},"directories":{}},"3.1.1485-beta":{"name":"meetup-web-components","version":"3.1.1485-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"00e45bc79fce758696a20f64575c5ebbee825593","_id":"meetup-web-components@3.1.1485-beta","_shasum":"12b42d8af2c23103e007b0e0f0970e4a5eb582e9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"12b42d8af2c23103e007b0e0f0970e4a5eb582e9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1485-beta.tgz","integrity":"sha512-25hLn9PdmurxDh63QztLL67pgha3Fcp7gB/z/JYwOrzFJQStDG37y7joRYdFJQhOj09/+9Z5Y9HPJrHGFfDzuw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLgmPu0naWZqtfCQm49m25CXm3tZ6zUBBmZJj/qYvZ3AiA1M6FPgv0DAd3PNNOPvvxi7WL0RSX5MXM+TeKN212CSQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1485-beta.tgz_1507670014130_0.48956362274475396"},"directories":{}},"3.1.1484-beta":{"name":"meetup-web-components","version":"3.1.1484-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"b0d2bf436b5663284ec676594a2cbf8d0786402e","_id":"meetup-web-components@3.1.1484-beta","_shasum":"b78488f6ced900b662ba45fd4fab833f774a37bc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b78488f6ced900b662ba45fd4fab833f774a37bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1484-beta.tgz","integrity":"sha512-C9KJUywa/43OryYkAHjxLCXpV93BPbIdRSk1KFQUIG47xmJ1oWv185zs7DUE54XKLEbtXrWwwAVDdB3DPnxHCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtdLLRBVBHwtn82EdvRHGKfeAKknyraup+uQdWQLwewAiA22d8QBRiJxSwDjQHfhAINaYcOiE0fnCCdWt0bJkVUcg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1484-beta.tgz_1507670100521_0.9411989555228502"},"directories":{}},"3.1.1486-beta":{"name":"meetup-web-components","version":"3.1.1486-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"f1f6b4780793886d1d3a60a94311a5a8a0de2ce6","_id":"meetup-web-components@3.1.1486-beta","_shasum":"72b7ee2a6d8eb8e90f84f37c5ac491452aaadff7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"72b7ee2a6d8eb8e90f84f37c5ac491452aaadff7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1486-beta.tgz","integrity":"sha512-6vy9vgXjCuCj9lAgVoJcRpv58BpSt+Jcgi4pSJsrEe4GUJFy2thQVlUPd4gygQN8JCuOx4wPKYuIMcP761JJFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0nhsBnWAceQvBe0EucdSW6e+S0/nlk86xlPOfAs1abQIhAKdN/G0JhbEE9CvRED3RpL+pxrrZ6Apa9wFrJ0vB8fmk"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1486-beta.tgz_1507670125092_0.31815553386695683"},"directories":{}},"3.1.1487-beta":{"name":"meetup-web-components","version":"3.1.1487-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"09ac2b455acccc91fdbbbf11dfcd0562cf76ab82","_id":"meetup-web-components@3.1.1487-beta","_shasum":"376dc66ed2565570d66b0a94a43618d9b6287580","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"376dc66ed2565570d66b0a94a43618d9b6287580","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1487-beta.tgz","integrity":"sha512-21W5kw2S04FJvCmu01gy2Zw6/idgS2HI1N/pJUPPVoBVUbwwouwlTatchG1f43+rcb34q/zBAPi7d2LyfLop5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYLefhmxfPXFVkvNjBhrNQ+XJberr88SlJiAZEkkGjdQIhAJTTVqUkgKEFuRzAAYvw+kf5vOHMkwcj4AkMDPbB49SU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1487-beta.tgz_1507670146854_0.18444810691289604"},"directories":{}},"3.1.1488-beta":{"name":"meetup-web-components","version":"3.1.1488-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"c474b1cb3c8e17fd2092dd5d698fe8efcfd397a2","_id":"meetup-web-components@3.1.1488-beta","_shasum":"2865adfb56c765d298a2a371f99f4b33a39fc0f0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2865adfb56c765d298a2a371f99f4b33a39fc0f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1488-beta.tgz","integrity":"sha512-Xb5MNThtm/sOq2vSlhtJKHf/OlAzf6jJjdNdqwmT1xPGtIb5Jqcsf9Yz62RaWP00+S4+mTAhKQzhzs0U5n4wFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6F6reFyTyS8qcwFUw3YS4inZt+f5x12c8XPUuNlDzPwIhAKa2YZCL8DxUeuff0ga3kKXpoSQpqrywCP7RJz16YNP7"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1488-beta.tgz_1507670212372_0.7503451080992818"},"directories":{}},"3.1.1489-beta":{"name":"meetup-web-components","version":"3.1.1489-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"e20d9f43cf26eac8c727b8a9f5e5524b38b870d9","_id":"meetup-web-components@3.1.1489-beta","_shasum":"d49e10f83f5ebcec9f0eebf1ba367071acd9702b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d49e10f83f5ebcec9f0eebf1ba367071acd9702b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1489-beta.tgz","integrity":"sha512-gHsJWQaOYhFL2rd7TFlMZ6eVQ72HE+r8iLUtYNFZqLzRtqeUQcLM3pyo5h0of4alGClLhTNU+rIB9VTvEYv8aw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/NaUjcShgVdnhHBw5nhjYuD3oP3G6QB2ZlIhpved9yQIhAOLul4k6r2HwwsXapZee9T3rrXsVIopeLddK3ZUHd2a+"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1489-beta.tgz_1507670308797_0.14617807837203145"},"directories":{}},"3.1.1491-beta":{"name":"meetup-web-components","version":"3.1.1491-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"97d043944b7120022daee866d64b2690090cfee3","_id":"meetup-web-components@3.1.1491-beta","_shasum":"d36d45154e9a41c0ece6dda748e673204cbdface","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d36d45154e9a41c0ece6dda748e673204cbdface","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1491-beta.tgz","integrity":"sha512-eyKP9l9iSh+ciyXKZspryg1H+puX3r/XQAIl7gpm3iY7QJ2hFvmCjmeWoJY/IzpFLL/tOxcVTGsHWwNDo1MkrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmvGcBFArbvsMmA3c/84MGptSvbWZvcEPyaHkIKg9S9QIhAN2tEYRwbgXvQlLbJX8UcSjtwURQ5j3WNc0GcT9je7cf"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1491-beta.tgz_1507670425975_0.43281713011674583"},"directories":{}},"3.1.1492-beta":{"name":"meetup-web-components","version":"3.1.1492-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7ed78ec8a424c2da357cd12c99c93203c905da05","_id":"meetup-web-components@3.1.1492-beta","_shasum":"2bbf9e2ef8242b112d4ca24e7204e8dee6ade813","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2bbf9e2ef8242b112d4ca24e7204e8dee6ade813","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1492-beta.tgz","integrity":"sha512-Fk8Kl7tHwYWQtZtDWpzjhM28JSujfoJWROlyUENMkswF+kJgmz/OHfqvxMTUHYMQkuLXOCd/12jhreUe6NgPdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEAqHrvz0ZEAHW3Hgsrw9SILqfM4UsJzpKfrTX1I4AfgIgPzl62hsuKUbB0D9rzvfx2TV6yHiTBfxi+ef9xZM3oOk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1492-beta.tgz_1507670450465_0.8133243713527918"},"directories":{}},"3.1.1490-beta":{"name":"meetup-web-components","version":"3.1.1490-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"97eff87f02072fd36531a4a4d88b5404618f73ee","_id":"meetup-web-components@3.1.1490-beta","_shasum":"e8bac4e164d3e5dd898f47966b3ceae8f1f78981","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e8bac4e164d3e5dd898f47966b3ceae8f1f78981","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1490-beta.tgz","integrity":"sha512-5758GfAPyFdQprmrdJEihMaQRHxYbBpJ/+tYcPhq46CCNNxJ6b5HOSAcidLD8k8s8lFu+a+2AF9pq7oYJWi5FA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJJluhijmDATwumVu8IK7bnWwU3IEWjl160M6kpn88HgIhAP14ejBIBQlWUYdyuWhbnUhDEYLsnYEeEdCwCWnOKxqz"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1490-beta.tgz_1507670454079_0.6915966393426061"},"directories":{}},"3.1.1494-beta":{"name":"meetup-web-components","version":"3.1.1494-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3e2200877765015505214ddc33f450b211f6e7e9","_id":"meetup-web-components@3.1.1494-beta","_shasum":"efd70d0d56bc399f18fe497a3ba20bfb72449ffa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"efd70d0d56bc399f18fe497a3ba20bfb72449ffa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1494-beta.tgz","integrity":"sha512-HsHCLDZHLOXc+Na3loxjr+/wPT44SeZye6N6sFeteD6XTIJnLq/VrBzhs8jnrg+jwRfTzM1jExNjwtpZI8zysA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCix2ep3/WcA//qGb17l7L7ZS4yj/Rt9FgotJCMSAzzYwIgd+PxeqC3re+mVu5EvWYqjUfWymU93o+7tJJyYfReTq0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1494-beta.tgz_1507670637247_0.5418763018678874"},"directories":{}},"3.1.1493-beta":{"name":"meetup-web-components","version":"3.1.1493-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"8f14725871dca7529b13924df536411f1d1c1b0c","_id":"meetup-web-components@3.1.1493-beta","_shasum":"081df6f6f189d7fa3917b5cd056949d3f99d0904","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"081df6f6f189d7fa3917b5cd056949d3f99d0904","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1493-beta.tgz","integrity":"sha512-VS6IpDImP2HX0reDgA7WxnoC42+Yclarp2BkqZZLlxL/XNBa3lAO8MBMdjIX9sYhWcu0va4R1bgzEPzH6VjISA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICSbxF2EKnbmPeClOV0QoibxIX1myIbonj3cBcy3CKM9AiA9fklsE3jeGk+LVp9oT7wo1utw5LrZLSJkPz5nXY/S3A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1493-beta.tgz_1507670657926_0.07782860612496734"},"directories":{}},"3.1.1495-beta":{"name":"meetup-web-components","version":"3.1.1495-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"84469c2b1dd98f4b363cf0d55bbbf9b6af49c0b0","_id":"meetup-web-components@3.1.1495-beta","_shasum":"99ad0d58cbab3aa08a01e0b81baf94bc3f8adfeb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"99ad0d58cbab3aa08a01e0b81baf94bc3f8adfeb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1495-beta.tgz","integrity":"sha512-hL6tZslYdab5mcFDPqkKf40d8ZvwJSfoNgHiiVIyXr151PkwmvHSJKrC0q400uQndTnCVTLszqE5Cgw33De6TA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbp9zs+qE6fF4JH/tzueJx41iFgyI6NFh0d2q8G/N8rAiAoDw7GZQMmC1oDS7OvFFiwUP54rnsqgjdQsdfvsCv1Ww=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1495-beta.tgz_1507670677404_0.627824519528076"},"directories":{}},"3.1.1496-beta":{"name":"meetup-web-components","version":"3.1.1496-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"75e2339e42ddaf42fc1ac096048f9a6f7ed8a4aa","_id":"meetup-web-components@3.1.1496-beta","_shasum":"0eb687d519281e338840bb0fd407c00a4011b968","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0eb687d519281e338840bb0fd407c00a4011b968","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1496-beta.tgz","integrity":"sha512-yQGlulLUIc7O07c1jiNs33ecQXV/XoLYX83BP5WZLJzpLDzNT+HOwSTJbsKtsHTyuUq/xDSBzQVBjGkUIwnrWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1H1FSMNkdG5Is0+u5onNJr1PEGhFWZoMFI/cJUYQaNAiEAx6iaN1xFwcUIy5pmIcboOJMGErDYByAtdcYWj67eCaU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1496-beta.tgz_1507670770797_0.39596098312176764"},"directories":{}},"3.1.1497-beta":{"name":"meetup-web-components","version":"3.1.1497-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"4b1f2af350375b40980f2ae2c0ceecd56ac93bda","_id":"meetup-web-components@3.1.1497-beta","_shasum":"dc0974fb7e3994627c20f1bd233f334a14c4c41d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dc0974fb7e3994627c20f1bd233f334a14c4c41d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1497-beta.tgz","integrity":"sha512-s3FHxSyhfap9DR6dJ9gpP/AbhJ/e3G7LbSJbJSeyQ0qpDrJc/TfhBFifLIO4OoHMWHpiI1AQv7SbVSBLueM1RA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy1Pz2ma4V3eVWLHMK2HeCP052bpzmhxc3e7YdBq79/wIgdjyEIWz2gGAXLOmXu9pOWbIii3Oh3CM95vHaJHfGEpE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1497-beta.tgz_1507670835866_0.5129055550787598"},"directories":{}},"3.1.1498-beta":{"name":"meetup-web-components","version":"3.1.1498-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"0d7821d7684d706fbc2a7b1c39a831426ec7ac77","_id":"meetup-web-components@3.1.1498-beta","_shasum":"4ae8460899ef7fc6148cda64bfdd7a066d5a08f8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4ae8460899ef7fc6148cda64bfdd7a066d5a08f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1498-beta.tgz","integrity":"sha512-ShzxFE9raKnUp2B0xWvnL8IASwzfLf+gvvVtylTweZs42daX+r73az6Or/oubSFWXKgJcq+INpyx+B+hxKYjRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5xi3A2fWeN1VjzB9vmcMilews7Ud/ItJiWocsJx543gIgAgb+2lwgifaMvFTfMtsX7MXPwrmoUVG3DvT6BsyNE/Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1498-beta.tgz_1507670858864_0.09016509028151631"},"directories":{}},"3.1.1499-beta":{"name":"meetup-web-components","version":"3.1.1499-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"20cffc6fe3c1f441ba777efb4ef1f7558dc4c7e7","_id":"meetup-web-components@3.1.1499-beta","_shasum":"a73a70fa964fc4839736dc6c1f51f6b8c28814e1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a73a70fa964fc4839736dc6c1f51f6b8c28814e1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1499-beta.tgz","integrity":"sha512-8F125ELOw6zZ9HJ2ymXMvlMqZA2OyiFGCrhUuq/VdyZgqyGYMXsJcy/76XUZdsddOgDOaB503MRbnzw3Bur5ZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMHltRrA+UFTzN561Mk8RAFRLCqtR+eHoPTbvQqA/zqQIgf6wd/TD/w4jqAkg1m7OLSPaPTDz3Z+GvygTOyFyy6wk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1499-beta.tgz_1507670890585_0.42456016363576055"},"directories":{}},"3.1.1500-beta":{"name":"meetup-web-components","version":"3.1.1500-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"d4f89e3a7a33f7b441987139cca1066cff3cce3b","_id":"meetup-web-components@3.1.1500-beta","_shasum":"1e8554b9a44e49b5008c340e9ae06a50bb7318fc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1e8554b9a44e49b5008c340e9ae06a50bb7318fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1500-beta.tgz","integrity":"sha512-AknSnBUa5MDMwo2N2yiwAHzvEcxM7TyCQMj6UKhx1CoJttWjb2DozAyXB/rQ5tV/x9G1qYb++gLdj4KH0hK0sQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHOKmK5wSXHJ1THWuMeLtqiNHKOtmI+9ov+e+hSMSymOAiBJFQE6xXolQSaVfy5rsl2k7IVZXuGJfP8xPXVz0C0LZg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1500-beta.tgz_1507671004642_0.42003372125327587"},"directories":{}},"3.1.1502-beta":{"name":"meetup-web-components","version":"3.1.1502-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"5de03ef80bc76845b8d67ba9c5a9a3898b3bc23b","_id":"meetup-web-components@3.1.1502-beta","_shasum":"a23a7fd7d10a5ace8e7f6d38184c6796fb3df8c1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a23a7fd7d10a5ace8e7f6d38184c6796fb3df8c1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1502-beta.tgz","integrity":"sha512-CSn3/+6VfVIKi+FvJqQioSE/BKtQSvNT+JbrN/3p+a4ExMhERrdjsak/nBU+KIRVSSOEtmWW33AlIzm1/MFsKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8eSN5CBYXkvzQ6aGeOVs7sFwajxT2KVN3j/EOLciTyAiAgnRzq0E08zVWecfpfcvs1QH9f4KRS3yEpOZAQa7YDPg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1502-beta.tgz_1507671114502_0.9915746024344116"},"directories":{}},"3.1.1503-beta":{"name":"meetup-web-components","version":"3.1.1503-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"8b494ee33d459d06790e90b513dc6ba5502f6224","_id":"meetup-web-components@3.1.1503-beta","_shasum":"0634f2385e270d5dec6a467f72d8e71fc7333bc8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0634f2385e270d5dec6a467f72d8e71fc7333bc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1503-beta.tgz","integrity":"sha512-9U2Z8/ziXYMZ4cALpiOJz9dAOrSx1wF3s06B61rpNj6EyhDHuYGJsYRrbYvHHwqxcvg9lIJXZiBwQ3l7nQOfBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrDCB6mhjJaL83ygu8kabJl/Nbt7jce8xagmtwxpoY5wIhANgq9b1bggzBXuvP99uP3IQp6emAN5N+YDTqBM3o9Jv9"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1503-beta.tgz_1507671152794_0.9176787484902889"},"directories":{}},"3.1.1501-beta":{"name":"meetup-web-components","version":"3.1.1501-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"32ac2517fefcd63a488a5e772ce2c8092dd37ae7","_id":"meetup-web-components@3.1.1501-beta","_shasum":"6005bd5388326cb577b35abbc70bb951344889e0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6005bd5388326cb577b35abbc70bb951344889e0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1501-beta.tgz","integrity":"sha512-4zNNfarOnuRh4RwYI2FRHH0VUKbmt9VHO8lh7w977vmF/UQSpuWrtBVhPkadSZoJvIZL5b+lkye+aIVor+Iulw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFgvbrLLzePY9vtc3AegPUyFw7N3QGneBn/isEGsqPetAiEA377W7mIG9b9HOPWPG/UWccyzJU6pmRKEawLcpeNkDHY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1501-beta.tgz_1507671173562_0.2867248929105699"},"directories":{}},"3.1.1504-beta":{"name":"meetup-web-components","version":"3.1.1504-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"78999a86ef8dc46df256f07992a87e23a65f2780","_id":"meetup-web-components@3.1.1504-beta","_shasum":"3f64eb29d6194a7b84886d3d84e139f3e00c8ebf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3f64eb29d6194a7b84886d3d84e139f3e00c8ebf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1504-beta.tgz","integrity":"sha512-HEOghBIGmqbQq9jYAojj6vxjiXe+GKd6dQCfrLN3w7UBNI0IQ/uSX/UfYCxT94SCYE9267HCia+ySl21s7flfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDajWyjWx5S4NDWJHrLoTGyl4VU8yuZd2gt3dzxYLBBygIhALSLr9KypKOfGmVPcTuDu5zNixjaawt35EcaboEDaBUZ"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1504-beta.tgz_1507671340633_0.8309122656937689"},"directories":{}},"3.1.1507-beta":{"name":"meetup-web-components","version":"3.1.1507-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"7db6c27ca8097ffb8a7df598c68219561e509c05","_id":"meetup-web-components@3.1.1507-beta","_shasum":"ef332605533a1bc784430e6c7dad147d8b8a7d11","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ef332605533a1bc784430e6c7dad147d8b8a7d11","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1507-beta.tgz","integrity":"sha512-ONccdlEYl8SgA7xQ0Q2B6NjsG/WeV8S8AXB5xP+aO0WOlGVrnnxT4jgtt4ebihzD+1+XrhU4Jd/CPBTqgSz0rg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICmVTj+DXmaDqoYM8Y5GtsQdTVu3CefFjEXunf8BZ8PAAiBt+ZW6WKSxpFKTzYKM6BBzj7Ag+HQb9V1u+oOzuDmGmg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1507-beta.tgz_1507671356394_0.2792824385687709"},"directories":{}},"3.1.1505-beta":{"name":"meetup-web-components","version":"3.1.1505-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"1a4a8124c1458b52b89e9b4988485db2e7588c08","_id":"meetup-web-components@3.1.1505-beta","_shasum":"373a3c2c2ba2edf8c822029e9724912ffebaab39","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"373a3c2c2ba2edf8c822029e9724912ffebaab39","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1505-beta.tgz","integrity":"sha512-p0E3J3T/zHfNUD73M0GIQfoo/FlqqH9LrChj7i+TdNZjKvYAMF/jfdmOH6la/Y7bKjH4lgnPJXxwv+JKDTRPsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/I4pJGqbXyA2Zu/eTTfelYUYlrz5SmpSL6dk2HehzEAiEAkL07DW5dhJoFCzLTZCVjd+hHpi93irY2Mk7HryNNi/A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1505-beta.tgz_1507671375046_0.26290176645852625"},"directories":{}},"3.1.1506-beta":{"name":"meetup-web-components","version":"3.1.1506-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"0ce4a9a01595e70a12b6ec36a11816cfdad80c1c","_id":"meetup-web-components@3.1.1506-beta","_shasum":"ad3c43b62c580578244861d4390853c5adb67e5a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ad3c43b62c580578244861d4390853c5adb67e5a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1506-beta.tgz","integrity":"sha512-33QvYNokJDVXRdkdi22iSGLtNW/AX8ljUGihETvX4ThxnLSEp3hMBKjK+h6kAXOkXX7JGulZIsT0pWsziP1w5Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHBScTJzecP76hCTvs3OiFcndPcD6ziA23+XZMJqgITAAiAwU/nQieoIrELg4beazXhZBqYL1rBEfo9idUBmy+bL/w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1506-beta.tgz_1507671393202_0.8464858715888113"},"directories":{}},"3.1.1508-beta":{"name":"meetup-web-components","version":"3.1.1508-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"0437725f9fff6787aa5dbcfa3db891695952db89","_id":"meetup-web-components@3.1.1508-beta","_shasum":"cb7bfe7e16d0520e11abd7c70e18ca701897daf3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cb7bfe7e16d0520e11abd7c70e18ca701897daf3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1508-beta.tgz","integrity":"sha512-RKZYiGMjDYRjXmoV7lNQwVKnsEorFzI9OIDNrdGbk9I/6MisNrEOXevpxpk4QtZriW5SC9WhPDwZ1I+TICtDRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpIGjGTNSUDek8sQ6CyjLNz4Q1GzjjIaR+eyBvCw7tRAiEApzcwpwUA4bXpScylxrEl8efo1TieAYOn/1bBzmCVxh4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1508-beta.tgz_1507671520925_0.9483536200132221"},"directories":{}},"3.1.1509-beta":{"name":"meetup-web-components","version":"3.1.1509-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"ebeca84e1c7168220f0ae053893c5164c28f04cd","_id":"meetup-web-components@3.1.1509-beta","_shasum":"6357ce262dd95ecf430628c71297f11d325cad96","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6357ce262dd95ecf430628c71297f11d325cad96","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1509-beta.tgz","integrity":"sha512-5eCjWvtbfXwUmam4FD0vOO4jW1zb2IU2+J/dKKiSllc5V1Z6OY3ocHnB24tRTkTfdUAHs4wnXygI04YsuUyGmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBn1QJBxvQAc8c5NCoBLRudf72lY0M2T3/74CbkW2HmCAiBSjun7ofi/gfs2HVQxKVSjRqI1qF49d7sUGrjQp4VBvw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1509-beta.tgz_1507671524801_0.9366391100920737"},"directories":{}},"3.1.1510-beta":{"name":"meetup-web-components","version":"3.1.1510-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"457aad7f4e8fc4054e6fc5d520697e969957bfef","_id":"meetup-web-components@3.1.1510-beta","_shasum":"f5227ef2315c162783c7dd973348691c26d5b20f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f5227ef2315c162783c7dd973348691c26d5b20f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1510-beta.tgz","integrity":"sha512-v+teHxth2GRYy1JUahe09HoYFY/+QxMnE/jnVv/eO3eU4GGQfK2XONORx9C0TH55zeOk3jFRcIOos0nE4MbsJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCizWhbs+gj6p89V8hLe4+q+KwquREeeR/esEqbOWkNmgIgBzqXfNM7Qbhxe6yPOTSe0jm2QmTfIKAKiQq8RWgScrg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1510-beta.tgz_1507671556832_0.7461393477860838"},"directories":{}},"3.1.1511-beta":{"name":"meetup-web-components","version":"3.1.1511-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"da7b2829f402e505dcee5d2cc7ffdafb402b252b","_id":"meetup-web-components@3.1.1511-beta","_shasum":"fc23d4464d370fa7af9f3b47a3e0a222e05e05d5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fc23d4464d370fa7af9f3b47a3e0a222e05e05d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1511-beta.tgz","integrity":"sha512-KsAGtP42aHkzNqegZOeYFZTyD3fXCbpqtMbkRu2TTea7xUvq2brWyCAgO1GNSR+0k9hSAVbGqZVPPhQdYQU9mA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDk37tD/Jau8u0ahdxyioPOBS5N1bHqT4u75kh0YFmHEwIhALECalr9jsBJfRuz5l9/XNl2HFYHbArJlBbHDj0z6njC"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1511-beta.tgz_1507671618587_0.07399871503002942"},"directories":{}},"3.1.1512-beta":{"name":"meetup-web-components","version":"3.1.1512-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"12b06473d173124d97dd25625888bef100b05bb7","_id":"meetup-web-components@3.1.1512-beta","_shasum":"2538ac9a525edb11fa5e84a16d4d381ffa40d681","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2538ac9a525edb11fa5e84a16d4d381ffa40d681","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1512-beta.tgz","integrity":"sha512-zGJd3VK1MpI1zG0bmtnSMJvwoNSV5u1zDV77lrSsUC8klDxSJGBhD1oLm80Z8WuVaiGVFb4GG3mOANy3uYlKwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbrreZIeeVZuJBkyz002C+r/hh8UzNhxeSOJEV/RYsdgIhAMx+FhaoJ7rq00Y76EkAS5DKabazmUPtullQluqxyVa1"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1512-beta.tgz_1507671642249_0.29862148337997496"},"directories":{}},"3.1.1513-beta":{"name":"meetup-web-components","version":"3.1.1513-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"3d0ce091dce403c501b01308660cab9367c621ac","_id":"meetup-web-components@3.1.1513-beta","_shasum":"84ecc248d32ffb579fe3c2788f83a5aa04fe3395","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"84ecc248d32ffb579fe3c2788f83a5aa04fe3395","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1513-beta.tgz","integrity":"sha512-vkUKryKPyoekAfHAQ9kS6uEh13cUDHM0Ppr4D/YhZs3f3184E9w/VP7B7ZQ5hyt1wB5empgDVLL+V7tdRr58Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHt85Z9cK3e+NtjjuHILCzH1Z3zd7FkFtW9IpQjankgAiEA0epUzEV+rHSdJkNrtV3KXt3dCXjCbEbYQWEnkMaa7lQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1513-beta.tgz_1507671743322_0.7038011709228158"},"directories":{}},"3.1.1515-beta":{"name":"meetup-web-components","version":"3.1.1515-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"331e51dbe5f76ec3e60f7dd5f41fb782d4171cdd","_id":"meetup-web-components@3.1.1515-beta","_shasum":"1af0d735768fd61bbde30288047df636a8fe7810","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1af0d735768fd61bbde30288047df636a8fe7810","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1515-beta.tgz","integrity":"sha512-qhHyOTa0oGR1uRzwsRcgcUjMyRiw9SbazxTAhs8gS/zOY7jiwZQXdTkWoTrBMR7MqVarXiv3cJ1HbvRQx3b9TQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIrN21L8ttdF+E1tMscYhWfgPWrAHYjKJd2/XXbE8BVQIgA8RZjGzUE0bwSyOXmJuNiB/HH/o/luTwRnmAuF/2tQA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1515-beta.tgz_1507671791436_0.32758869673125446"},"directories":{}},"3.1.1518":{"name":"meetup-web-components","version":"3.1.1518","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"2.0.135","webpack":"2.6.1"},"gitHead":"842f044c51be09bd08eaf608ede6ec2cb9ccca7b","_id":"meetup-web-components@3.1.1518","_shasum":"e8b020d3d0efd0a5c13287986a923a479a6f0d20","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e8b020d3d0efd0a5c13287986a923a479a6f0d20","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1518.tgz","integrity":"sha512-wIQC0gLrCZW6TJHT3EAy8AQJskXNzfTP51KL/E5Yb7Jcg9yBy5wes0GGVAj22RVK+ynkU4DvBdFO4gkBTr3lgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhV8JborYNJPFjxEFt9us4QJK76NTEe6xt1HAvy7nnaAIhAPJuEDdvWtA1TXd6Qxh2lNfCCVXMgLNNG8+bw9TEbFAs"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1518.tgz_1507671964216_0.6908690312411636"},"directories":{}},"3.1.1520-beta":{"name":"meetup-web-components","version":"3.1.1520-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"54cb0086a41d116ee8213f6bc0937a99b06f1fd3","_id":"meetup-web-components@3.1.1520-beta","_shasum":"ad2918373f869759fc771ea5d1cbad16532e8bea","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ad2918373f869759fc771ea5d1cbad16532e8bea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1520-beta.tgz","integrity":"sha512-AoyVoRNhDH7TqzbWdKKjdwJaED5Wk7ws8nFdst8joXVIZ8dz6yGETv3Lm/luYBXKFoykFNOQHV7sYy1+Dpspgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxbmpiQzF004hrno5k2wrqnJPBoSMiYz/PWDChy7qrVAiB8MItewQ/W3bQEIc3b0NGG7C0ZsumcRgu/kzSHucfhFA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1520-beta.tgz_1507732835872_0.1734149914700538"},"directories":{}},"3.1.1521-beta":{"name":"meetup-web-components","version":"3.1.1521-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"4210a8ed42f69d0f294eb4e9d823315351962e48","_id":"meetup-web-components@3.1.1521-beta","_shasum":"52ec636b1aac039269d5005b446e594c935be199","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"52ec636b1aac039269d5005b446e594c935be199","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1521-beta.tgz","integrity":"sha512-5+NUDtZL2bjJA3qelqt5x8lbV45pYMne4ZZGvAA26HV297lOe5omhKEHigbkffu6UwA9uQa/EhJGfHGnGneUhg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW7NCFAPodJAmzChj39vnwhLhVEhC8KzBnYFg38XYCagIhAOrbQCsDv0Mc+xnTrjod3gnhxZ+bxzleaRhcagw+7h2a"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1521-beta.tgz_1507756343560_0.03241004887968302"},"directories":{}},"3.1.1522-beta":{"name":"meetup-web-components","version":"3.1.1522-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"64cddada74284cc3821e53dafe4d1d71743de7f3","_id":"meetup-web-components@3.1.1522-beta","_shasum":"4bdb4d293e8f4f358e371b3c0a422b2b6855bd5d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4bdb4d293e8f4f358e371b3c0a422b2b6855bd5d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1522-beta.tgz","integrity":"sha512-ZoSxvd8xLhM/EhkIYgTqHtk7vuDjcN/ikcyqBwhSJOz9lTzw3fm4erHE5hSUmTC/Y1c/g/pq8cuVnCubqmvJEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBEbk+k7Z2eBpXbKenB+iUpdkFsbJxc+eOP52KAGsDvHAiEArxBGuExxixQRXIMa070IZXfDQgCZBwjkMuPHEAkrmos="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1522-beta.tgz_1507758710224_0.23976617050357163"},"directories":{}},"3.1.1523-beta":{"name":"meetup-web-components","version":"3.1.1523-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"ea81af32c1c0dce8638113709665791e6a7abdf2","_id":"meetup-web-components@3.1.1523-beta","_shasum":"1b274a7d7b040bb356d161b7abe8ea1379311602","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1b274a7d7b040bb356d161b7abe8ea1379311602","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1523-beta.tgz","integrity":"sha512-eSMqiB7kiMXMhP2JuLq3Xbg6pU4dPOFMnDsN76b5sfo1HAkRMZp+7KaxNWq1g0wDwW+imh7f4XkQ+DRXKSHaag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICIwaUdcgnERW7nF7odSkTRjPB02FrcgApGFcBBpjxsbAiBY3LByiHmqJfRf0MJM3mfY1hMxSeS16LhfxOtJD9Coyw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1523-beta.tgz_1507822768358_0.5911464216187596"},"directories":{}},"3.1.1524-beta":{"name":"meetup-web-components","version":"3.1.1524-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"5bf3d21e10f6731f74b827b690d1f1d59287f72c","_id":"meetup-web-components@3.1.1524-beta","_shasum":"f8f18dfdf93eb044490773817173eaed248583b2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f8f18dfdf93eb044490773817173eaed248583b2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1524-beta.tgz","integrity":"sha512-J7GhVliG65o4rLTKTxwK2PofJXsiDqBu8+0PCkzOrKDIMWyQkoZwrLZlCX0pS2/ZALB6VwX76ngy7D1OvC2fpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBGcSsm2FkA2xAt6vG0ZHiSFH4EYPG/Tkl4KEBPydlwAiBRybpxUu2g3SPBnKhRx/EwebTd6ArOSYPGhrQohuT3vg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1524-beta.tgz_1507823308301_0.14199804863892496"},"directories":{}},"3.1.1525":{"name":"meetup-web-components","version":"3.1.1525","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"4cb1defc9916a2d2143bc9680bc2d398ffa5c98c","_id":"meetup-web-components@3.1.1525","_shasum":"a663adb0a2b8b4d44631c6efa326240770aaf0d9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a663adb0a2b8b4d44631c6efa326240770aaf0d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1525.tgz","integrity":"sha512-wt4kUhp9wdh0uq6uRKmJlKpBcE1bMT5G8luTkn8fmXZ1hPyNfL1J2NrDU4kDY0OBsIqFefthlCH/oh4jPxL2YA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQRaM38s7JQqGSdwTwSP9nZ/4wUTw40orjuaZAvIS28QIhAMkg47Pxcjjgu4hL507uFNQKyxp0SRyCkLCg/TN0QAu9"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1525.tgz_1507823542223_0.04376456863246858"},"directories":{}},"3.1.1526-beta":{"name":"meetup-web-components","version":"3.1.1526-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"6574f08f294945a7d505b76969ad8fbffed8375b","_id":"meetup-web-components@3.1.1526-beta","_shasum":"a12d2a10c0cafddfc4224128877d9c5108beed20","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a12d2a10c0cafddfc4224128877d9c5108beed20","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1526-beta.tgz","integrity":"sha512-Toa0BTHLFLNr+ubFlDb6+kuuL/TLpD2sSbaHEy28GS0P6EVoNqZHS345m8DS2llOWmXZNnOxNtWF/NPzcehH3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE2YUcFG01hN2IGgqfKekpsbhuB/2F9soR12ZQ5WLLXhAiEAzBq3prVA1iwjiolB2E1CxUpRzlMLOmT1rnBmnCtZAkE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1526-beta.tgz_1507836080110_0.4504939056932926"},"directories":{}},"3.1.1527-beta":{"name":"meetup-web-components","version":"3.1.1527-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"2efec85d349a91485876a6243a5694fd78a82912","_id":"meetup-web-components@3.1.1527-beta","_shasum":"073f07467ecc42b7f74c15a06c1a5593eff1fe48","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"073f07467ecc42b7f74c15a06c1a5593eff1fe48","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1527-beta.tgz","integrity":"sha512-COVcf3uSldV2UZa+9fPzZ0D1iusMGqa+5DH9SyFc0Jur/Bhcfmy49TdojmPrSKRS7U4UKAzIlq0Q9+7tGlGKhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCy1gqzB73YJEADL22hZSx7/1TjSaci05ShnZpg36M4vwIgYv9rSeO8UKgu2qe24vqbjqAo1biq7EhWxDMbPkFhepk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1527-beta.tgz_1507846295868_0.4266055228654295"},"directories":{}},"3.1.1528":{"name":"meetup-web-components","version":"3.1.1528","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"57cf4397d3b2ddaf27d8ee7dc8dd71e6b10496c1","_id":"meetup-web-components@3.1.1528","_shasum":"9bcf965fe6fc42ec627a3121d6eaeb07e0b48897","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9bcf965fe6fc42ec627a3121d6eaeb07e0b48897","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1528.tgz","integrity":"sha512-8B7mhT91N+JXtH+aWPoPmchq4vUZ32jRa8c/NWbLsu3WOpBsTAOoDNw3Buq1Imd4VUnGW16+0KFySCEO8MEnbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA99ETqPg0cYNDttWHe702EytgsREL30P9tT8BOQRjjOAiBqovD+3hJsCHkV/gPdAetXY4YW38sN2D3uLtQHtSZmHg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1528.tgz_1507846743040_0.12296237051486969"},"directories":{}},"3.1.1529-beta":{"name":"meetup-web-components","version":"3.1.1529-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a1d33b7242a702745dd883169972ce13c4b39883","_id":"meetup-web-components@3.1.1529-beta","_shasum":"c3cc6941c395b1e561d37fa325adbf7b19e3398b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c3cc6941c395b1e561d37fa325adbf7b19e3398b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1529-beta.tgz","integrity":"sha512-gVNac7rvkpQhYM3IpZ2Ooj0wtQGxoOd2P5p8Dn4i828JJaiRx0ABEQBfFG8iVhi4KTjaxgcGGrVyWg2IUE/eww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDG6KzUfOzu0lXXgmRF79p0IcnK7Y/0ZVrIRKSMNB92wgIhAKhPYwvX3kzdaxwL7OqdsIw6uBPGDx/bJw1qUxI/W41r"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1529-beta.tgz_1507933573896_0.7875806393567473"},"directories":{}},"3.1.1530-beta":{"name":"meetup-web-components","version":"3.1.1530-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"47b7a783ea7e40da9a085a2b095dbae4b68bb457","_id":"meetup-web-components@3.1.1530-beta","_shasum":"431fd4df48d4c0ca49b1384d7fc3139166fcb0b4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"431fd4df48d4c0ca49b1384d7fc3139166fcb0b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1530-beta.tgz","integrity":"sha512-Kp4GFqzr5haQ0IdZ/8VWhwIdMUrj22cIgQ9P1rpl3LfaYEf/83YFupn1PA1Z8Ln4prPVVlVPiD6TUJ+4ty547w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw1J0zkx7khzz2n3pIuf+kpJO+VKl0n0aGmlM8fgefogIhAMvU9zscT3WuCAJCA4m499ldYsG5dBYlB+yGKzRJXUto"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1530-beta.tgz_1508129625896_0.27929003816097975"},"directories":{}},"3.1.1531-beta":{"name":"meetup-web-components","version":"3.1.1531-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"4533f1199d6d553e78d4f4d24007d5a47230ac49","_id":"meetup-web-components@3.1.1531-beta","_shasum":"7a9d6823d7e95526ff440030c11c86624c9cda58","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7a9d6823d7e95526ff440030c11c86624c9cda58","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1531-beta.tgz","integrity":"sha512-GvBEm4VTgehopEaq25wjzdg4R27NkPv2OdKYCwIGp4xHUeuEueN053+nEe3KFtLxLZdtAtR0htD4gdMU2WzWag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsP75F4iz6schPodBq589BRxySqaJZiDq8Vv/7gIAgdAiEA6qDIB3lCTYygNyF/o7RTtUAGv6YWTC5jwxmWREKfqgA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1531-beta.tgz_1508130738502_0.6935781110078096"},"directories":{}},"3.1.1532-beta":{"name":"meetup-web-components","version":"3.1.1532-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"45a1b54d2fb460db2202ef0ae3872e5989374aae","_id":"meetup-web-components@3.1.1532-beta","_shasum":"b89c3a01c6f8e1bd0ac5b4a8ed5b8fa9c026ae4b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b89c3a01c6f8e1bd0ac5b4a8ed5b8fa9c026ae4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1532-beta.tgz","integrity":"sha512-jHuzLUFS8ABpJ+BHlL5hXw7KWvtG5ziyMidQXVHyyb6s/cxZrLjieNMHKOHB+rRERuaFluB/AWn8z+XXkeJA0g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdZfSfT7Jrae1fwZC/j+gOCv8ZfGx6Zd6IAWW/6jsyWwIgVOLTkvgg4RVkuZTjudKebTzGY2xiqRq9jU72GgBJS0U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1532-beta.tgz_1508169265255_0.2440845083910972"},"directories":{}},"3.1.1533-beta":{"name":"meetup-web-components","version":"3.1.1533-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a02fcfa13bb4255ea00f14ea285847be5836029f","_id":"meetup-web-components@3.1.1533-beta","_shasum":"85dbfdf4830f7c02bb1fc06270ff02633daf9089","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"85dbfdf4830f7c02bb1fc06270ff02633daf9089","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1533-beta.tgz","integrity":"sha512-u3evCY3FAxLPP7/FMmZuy/dK9XP46aU+J1y+NBf/HhQgETHzQN/FHSJkKRru+6SCxXqDknWPtr9Auwy/RwXlCw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp4OINhmnSXQqyZsb+MQv38NY6oZ4CFihq4SjUaT+irwIgfJgiupkg2eKSWWf8KVts7nqgPwJ7h80mQgcAbhb28k8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1533-beta.tgz_1508192898360_0.32987681147642434"},"directories":{}},"3.1.1534-beta":{"name":"meetup-web-components","version":"3.1.1534-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"55773008f19908b4c2bc2c7a562ec392fe6e3168","_id":"meetup-web-components@3.1.1534-beta","_shasum":"b9b4fbbe262ce8ae43dd3a31654e3e7f8a7ebdb3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b9b4fbbe262ce8ae43dd3a31654e3e7f8a7ebdb3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1534-beta.tgz","integrity":"sha512-ndnytNa5OUwOOURj+Zjocxg9VIC42rnXwbIZ5eNSrF9FGsN+8FHv1CpY3b2U2jhbS5Gt4d2OCxLmWWN1pV5h5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFY/ugMQW27BpNECsJDarb0vsf5scHkfBIXu7LYO2xXeAiA1ftRLU0hb8n43BDXmaF6MXIEnWl5yl7b2FFiqAGnujg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1534-beta.tgz_1508203781082_0.1887479613069445"},"directories":{}},"3.1.1535-beta":{"name":"meetup-web-components","version":"3.1.1535-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"0d124db6d895c37e9d662616afa118d9e78edaa6","_id":"meetup-web-components@3.1.1535-beta","_shasum":"acd38b1e4bad9fed491ce7a5a87b38d2dcd9a7b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"acd38b1e4bad9fed491ce7a5a87b38d2dcd9a7b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1535-beta.tgz","integrity":"sha512-5bf0dB8SSiyCQsIsvcFpOXHDfMzvLojdxO+hZJTaaiQU5nrdCaG96/d4MXkccOF9xCjsuO9jSYNeaeUjRs71RQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/n5o+DSh399V2C1HCnWacAv0B9wzAXd5sYdoGK0CFwwIgJeuAmdGPG26a41P2qIB/DbsJiEFq4OntClV/+3EtBIM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1535-beta.tgz_1508260745246_0.6936291924212128"},"directories":{}},"3.1.1536-beta":{"name":"meetup-web-components","version":"3.1.1536-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"4e95a7d109913b2014e4d682010e6a7b781d2251","_id":"meetup-web-components@3.1.1536-beta","_shasum":"17733b57643ab2880283a90bc4187f7b573c13f3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"17733b57643ab2880283a90bc4187f7b573c13f3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1536-beta.tgz","integrity":"sha512-kvTmGZVZf2KvuotVj2zjrqfke5l2vcqjMHpsPnGJuM84W8/zi+nWm2rGCnawvjsAfwILOb/b+Pg4katLroNLQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIARvBVsGGpUQWfc1pieOml3NfcmrGQUMCpk1PQYJa2Z0AiEApGz5uO/ZVgjnNrY2i1PWS2ua79cMEGsuLubxNxKgQ2M="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1536-beta.tgz_1508272687196_0.4669387855101377"},"directories":{}},"3.1.1537-beta":{"name":"meetup-web-components","version":"3.1.1537-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"5aa192bf432e95334007666b01ccfb0177b2d597","_id":"meetup-web-components@3.1.1537-beta","_shasum":"9a0bfb99fd6834f488617d2680bd7d1deb5ebba7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9a0bfb99fd6834f488617d2680bd7d1deb5ebba7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1537-beta.tgz","integrity":"sha512-BqbGLWiTOgLYqEqcYaYYUPDvrY/xtyJ4fl3DGdQjUmAxHrJantPUvgnhIspII3b4H8PWkIu4lcUgNWOUPmntGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUVG5RPQ7V6PdndS8gMAjkfTdmoSybL+XWRJtBtLYDsgIgEguLUkvxUA5iV1IM7/doSrQatLVCvMQZRjQwuO/bmhk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1537-beta.tgz_1508272764879_0.40922465710900724"},"directories":{}},"3.1.1538-beta":{"name":"meetup-web-components","version":"3.1.1538-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"3dd75594df8c2e3f7f748211042e13fc42acfd56","_id":"meetup-web-components@3.1.1538-beta","_shasum":"227dae5e99edd46512e93d8ec0775d006c480822","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"227dae5e99edd46512e93d8ec0775d006c480822","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1538-beta.tgz","integrity":"sha512-yC498oGClOTJi/d+vq/j4QSMfv4mjXex3W7orJieLuJhlxWq+I2oXsgkJCma4NOIqmaaGa47GXXJ8E7WphjFdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDc2DNSMPy7dcEEE9vrJdqHsrVtmCK22CnEgNUV2QDV3AIgAKXYEjEQZARFqlaclXQzmdKKknKvex1FDyEVImSIHdk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1538-beta.tgz_1508273386621_0.6948315664194524"},"directories":{}},"3.2.1539-beta":{"name":"meetup-web-components","version":"3.2.1539-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"7720e4abc06be427ec57847c4fee112af7af53c2","_id":"meetup-web-components@3.2.1539-beta","_shasum":"aa344aff540b2bae3d5264ea4d90db46619e6e7b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"aa344aff540b2bae3d5264ea4d90db46619e6e7b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1539-beta.tgz","integrity":"sha512-CiNwAulFQ0cyTtBE0lNhWNd4Y0+AcCwA69BApcQHf47WAdTHxFkxgAIhMX4J2qCcR74vP8txqNChLlab4NWyTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmX3iAGa0uQ879F6rI9bJ6qhSqeBwQA/WT4+sf04iQTgIgU+AzodKXjd6Xz7SxytMVa4pIe3OksQimw5PO/IlweGk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1539-beta.tgz_1508273665718_0.657666910206899"},"directories":{}},"3.1.1540-beta":{"name":"meetup-web-components","version":"3.1.1540-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"cfd955f2268fa70cca694f83b6f073b90e2910bb","_id":"meetup-web-components@3.1.1540-beta","_shasum":"cb9e3aa6fd47e7640a6d0cba28a44081a6d6d9b6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cb9e3aa6fd47e7640a6d0cba28a44081a6d6d9b6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1540-beta.tgz","integrity":"sha512-MIzlF4DSHRMkXKK/vYK1db/vzUHY/fJv9Ol4HeHJGsBY/c0onoWUubZJg5QWn+86rhRcEN5XXHrVe5qDQ6K/uQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAeD4EpI2ftl0+01qJJJV0JA/yE6jwkUmsHWRNNDx1xAAiBETP9nAbVHswCulk10bKVFzEZNY6/aGcFOsMH8cxtLtA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1540-beta.tgz_1508273996080_0.8489734393078834"},"directories":{}},"3.1.1541":{"name":"meetup-web-components","version":"3.1.1541","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"6154f4cde0c5e7e0e50a961313b196033ccc5025","_id":"meetup-web-components@3.1.1541","_shasum":"0fab92cf5b39618ef9ebe95b8f4373ca20f50cff","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0fab92cf5b39618ef9ebe95b8f4373ca20f50cff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1541.tgz","integrity":"sha512-w0ke0XFbyTF3oYKVYbKU7C8sICrT2az28Yuwk0E9uaObYdbTL0QXZ6cXRH0vKuJqr2L5M6BNzwpTqXO/seorhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPXPGAYyEL8F4oVO2bc7tUbGQU+T4uExkKp0vtNInXGQIgew0tGUGXMCNblHSy2FvH3T6MwwQm0rRqdI2UyriSoiU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1541.tgz_1508274640677_0.7486545001156628"},"directories":{}},"3.1.1542-beta":{"name":"meetup-web-components","version":"3.1.1542-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"5c08bc01027775644e5f0670489270bc19979ff2","_id":"meetup-web-components@3.1.1542-beta","_shasum":"7a7749251da075b8dbb09da4298837597a9eaa11","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7a7749251da075b8dbb09da4298837597a9eaa11","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1542-beta.tgz","integrity":"sha512-LKOIeBdxIhPkUTx6yZO2A8hVlMUc7wGutEtnfme45NJ7tSIk62bEkc/sUMEc9s7fxNKatlIUyt+fsdsdrTMzgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFiHsr5ZpAa5Cix8qb7Glzb6g3zieIDPnSS5WlW2ItCKAiB4bGnvaBgEIYrCLTNBtajo9GNL3Kono70fme8kuZXeXg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1542-beta.tgz_1508284622761_0.5871863758657128"},"directories":{}},"3.1.1543":{"name":"meetup-web-components","version":"3.1.1543","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.135"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"ce1a6945fd40d8d69ee0b5f202df75400a21d8bc","_id":"meetup-web-components@3.1.1543","_shasum":"ffe9b0c334f0253c738691722fbdba3cb93a6d91","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ffe9b0c334f0253c738691722fbdba3cb93a6d91","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.1.1543.tgz","integrity":"sha512-AzxEyv7Sq9pXT6FWjR38mkHQkVj9dSGUtsdRYajw6W9BxNFiIraIb8VT094yPoAIm5b0T6Mb3eOMkR8O1fZ35g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGtzPzvkNecjJ+65ix3vXhe2jAC8f5kwTjOHpYGr+nPgIgdRiptqQYRewUEwF/u8YfMz9zktvG3Gf9feQVIa2Eu18="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.1.1543.tgz_1508354757752_0.39765094337053597"},"directories":{}},"3.2.1544":{"name":"meetup-web-components","version":"3.2.1544","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"14ce7a14abb815181885c00a407fa9d4562ed94f","_id":"meetup-web-components@3.2.1544","_shasum":"d82a642e954c781731e9ed2a25b172c64a546e71","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d82a642e954c781731e9ed2a25b172c64a546e71","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1544.tgz","integrity":"sha512-9mnqBevs0JtO6dxl/++8iXrykiNwzp8bg6GAhRUjk+AMebASiY6x6iQamqWNQgSXgAbnVPxX7Mdsg58l3M8Deg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHxmg+UeP0kAruPTmlDurCrrU9IHFf15yuMV6dmfmP8eAiEA2czFPcNAFTMjXqOdzBubONr/8EEEpmV0pfwj5HTi9a4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1544.tgz_1508363981606_0.04339310014620423"},"directories":{}},"3.2.1545-beta":{"name":"meetup-web-components","version":"3.2.1545-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a8a22714d0e7d8c8536ddd27df1f18541cb7b2ff","_id":"meetup-web-components@3.2.1545-beta","_shasum":"da43df26b6e82965b549598802e8a518d9568ade","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"da43df26b6e82965b549598802e8a518d9568ade","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1545-beta.tgz","integrity":"sha512-JA2ZqHcTk62RJLaKlDJit4yS/2yrKmm7FmFuha9MN0XBViT2uIN1A+ENd46VlUtYFY7DoJHmUVqX1zesFpsh1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNspQdNKuTnBYBZVTIzqpy52esqmtpi6pK3Tmr33oXVwIhAJtLPOe/aU61p7lILkOrG0cH8ZUhTT0NEDgJl+iHexmB"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1545-beta.tgz_1508367197709_0.03649141965433955"},"directories":{}},"3.2.1546-beta":{"name":"meetup-web-components","version":"3.2.1546-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a6e7b8baa8b80b6ff7a0cb3885de05358333b131","_id":"meetup-web-components@3.2.1546-beta","_shasum":"a988d8cc28ec6447af6cdd211261ddeccd4008cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a988d8cc28ec6447af6cdd211261ddeccd4008cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1546-beta.tgz","integrity":"sha512-9knmZWmiXn9RBsg1IKCD4M2rj7QHGIkVPYlZf7eAh+rIbyUnbDpX+1ogTvnzw+t+UStblI9K8J1oRT6Rct8fTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKoTzqQz7kTr5Du3RSNe7L4A9loIDrhl+m2OuEq+p8XAiBiVH+bxzF/MHICGY6YXfTJ3n3Hzwht5g1QCCa4pmoYuA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1546-beta.tgz_1508413270649_0.24008315079845488"},"directories":{}},"3.2.1547":{"name":"meetup-web-components","version":"3.2.1547","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base -- --silent","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"2.9.1","enzyme-to-json":"1.5.1","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"da1e2087ee9da3de8473cf237c5c2aa29a059863","_id":"meetup-web-components@3.2.1547","_shasum":"6b0722fde6f578355e14736a8dbab1a57b769fe2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6b0722fde6f578355e14736a8dbab1a57b769fe2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1547.tgz","integrity":"sha512-KdaA83nLIqqSafAodYX8UsW9YjE5hGpGrjZ4F1FooBkrAoaCaw4f7AJ3aL5ABGLeSAI3+ec2/1knDhM1u61MTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyF+sFxAOZpfASXtkCA0AQLvqkbnJm/SmN0Pp++TWJQQIgXDYTNsqVJoO2psuUFyWKrSmngpcVDNh5dhPNf7+dIS8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1547.tgz_1508445741111_0.2745646459516138"},"directories":{}},"3.2.1548-beta":{"name":"meetup-web-components","version":"3.2.1548-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"d831d54ecbf787ea284fd0f1af16c3d5a674e671","_id":"meetup-web-components@3.2.1548-beta","_shasum":"b59483d19c25d7a3770b940c515237d177f9f6da","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b59483d19c25d7a3770b940c515237d177f9f6da","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1548-beta.tgz","integrity":"sha512-q8XtE1ZlJerN8U5Seb6f0ugvxduZNKEAqR2AJJ4+PWsdxfegheHRbJvVyygFso6NynSpGAiQPJhuzQp0oS6vWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL7R9B0fvORYzdwD7Xm106sGNFsigXs3hvcKVNsLo8uwIhANXTsDHzEotpgDh05lGYCogzBvsl4kzJR2PKa2uDnSOX"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1548-beta.tgz_1508461411070_0.510246594203636"},"directories":{}},"3.2.1549":{"name":"meetup-web-components","version":"3.2.1549","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"8fbc343dfe2ac9c1b53ac57365e9592400ef6505","_id":"meetup-web-components@3.2.1549","_shasum":"09e321efa1de080635c8cbe104a2e1ceb4e34fd9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"09e321efa1de080635c8cbe104a2e1ceb4e34fd9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1549.tgz","integrity":"sha512-pDLO1Y5YttFXdAyhJ4ru3cpaDc/uEsKMzaJpJ6fSSvdzZnm2oTdTiex1hCVVzABdOWd35AKiAVv3QG8VKSvyfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC80dcuRyaz9EGv/4tB4diQoDUa57uJ0rIJ3F/eM3IKYAiBIndUGoaA9vknuXgNub7050G0Lb+SI4xnD7m78V0cK6A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1549.tgz_1508461546283_0.23640227667056024"},"directories":{}},"3.2.1551-beta":{"name":"meetup-web-components","version":"3.2.1551-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"90fc8cdc10891c7b906a9355966cbfa7e73d559d","_id":"meetup-web-components@3.2.1551-beta","_shasum":"a14e551e0bc77ce8b2c36bad8b676883704b1f81","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a14e551e0bc77ce8b2c36bad8b676883704b1f81","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1551-beta.tgz","integrity":"sha512-dKpc2Wct3mE6tqQc8eW8BcOHZj4TgHgaItPK2XygKk820CDkZSKRPtAwvtGyS54jWfz8EI39kAdnJTLowkj8Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKagZPT9vUBgz09jKIlHRlO/6LTEyc7e9yWDk5iY6a5gIgJS0gC7o5RJBUCDA3o8NvaKamWgRexTtKs0xyV1StmSY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1551-beta.tgz_1508511896974_0.5188747746869922"},"directories":{}},"3.2.1552-beta":{"name":"meetup-web-components","version":"3.2.1552-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"e14a71e38ab3412e5786a18a8924ec25588129ca","_id":"meetup-web-components@3.2.1552-beta","_shasum":"9fc6f20710081a6a48209c0749023a73a74f9c0e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9fc6f20710081a6a48209c0749023a73a74f9c0e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1552-beta.tgz","integrity":"sha512-Hen+D/y3GGtCkitcukQbm7cmuDZsixwh6QSWsWKAiwBUSh9svmkYiatqE0WhSK3hHlfaXRY+952W+Inl+mzt4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/0LDaXdw0l21L1dbaEosoognuojGdhNxvnoIYlpqwSgIhALbBuVXNpSRkaQtOzwcz5JKHXk0E47E5ig5j8CTXiIPw"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1552-beta.tgz_1508524331544_0.12764460477046669"},"directories":{}},"3.2.1553":{"name":"meetup-web-components","version":"3.2.1553","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"cda0ee39c978902b2df53eb98f47d7e5edb58656","_id":"meetup-web-components@3.2.1553","_shasum":"373b481359953d3a0ed2beddbe47940e61c8170a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"373b481359953d3a0ed2beddbe47940e61c8170a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1553.tgz","integrity":"sha512-DMEiOvn74iZh35Pk7tgM/kavhl50k+IcQsvWn9HrRNsiCnGxdAN1/8d4N/7+rRGe8Vm3uIUhsGlwtkg4XWGUQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKVCKpK3P/ZpWdC7RYI3DnOqp3aoV6VdL8zsIegPSD+AIgIYqLdScqbw+hcTWwcmYROcduu6nrFPsvL7OLcDzyBuI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1553.tgz_1508524633831_0.6122783240862191"},"directories":{}},"3.2.1554":{"name":"meetup-web-components","version":"3.2.1554","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"98bcb26f02f13cc3742187fef5c3ed2f85f3c9f9","_id":"meetup-web-components@3.2.1554","_shasum":"970a5335895d2f9b0b73ceb66b75ae3ced5bbdc8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"970a5335895d2f9b0b73ceb66b75ae3ced5bbdc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1554.tgz","integrity":"sha512-Eli+ra21fexXA1LckMzraHRb+htkcJhmc3xt4LpN87GcBaBhaSkfvOKVsK6QVEdRPo5RnL8Wbf8zPbuD/mxA6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2snNrqUyWvwZYcEREwhuRZIxvUqMyrH7M3hSBQanuOAiBX91bK1H9ebwoGy1PAJ/YKAbftnRXQREoJhzOMkYuG4A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1554.tgz_1508531467856_0.074173724045977"},"directories":{}},"3.2.1555":{"name":"meetup-web-components","version":"3.2.1555","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"f65caa0cd93611a2acea194513dc197a881227ae","_id":"meetup-web-components@3.2.1555","_shasum":"8518a85d53724edf216adf343d1490d1b7a141cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8518a85d53724edf216adf343d1490d1b7a141cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1555.tgz","integrity":"sha512-a4MZI9Y13IZ+8q67l55xE8IF4iUGdjI6T9KoCV5FUeQ5j2Htm8FO4brQwE3WgtIyDZZXrTKKfYix7g8uMej2pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDU3bW6ctEADL6rjSxSHkJWJG88leg/G3OQbStV8ta4ZgIhAPTKeeGHoD4P2Fnda7Tz1UNaG4r0Dg/9MIVjWH1LO8+9"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1555.tgz_1508540639507_0.5891747244168073"},"directories":{}},"3.2.1556-beta":{"name":"meetup-web-components","version":"3.2.1556-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"dd7f45d78938cbf605a5643a1f229867d2bb0588","_id":"meetup-web-components@3.2.1556-beta","_shasum":"0998fd4e6c42a229d7637cf0b82868fc86f24f23","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0998fd4e6c42a229d7637cf0b82868fc86f24f23","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1556-beta.tgz","integrity":"sha512-8IvZCNAcI6frd58Vu4wIjasDVCQZk0O14FGcHC4SS9ThtTprpl8gNoiKc7AweO4V/Ks7dGbM3trYQMGHfJsCHA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE2QUZVudpvV8UPsN88+bXDDHe0RCJsIFGPfWaAh6WKGAiEAnkwa1DXFfgij8kUKegLeb9ZyfOvpi6PzUAT8wULVJsM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1556-beta.tgz_1508771676487_0.5475443094037473"},"directories":{}},"3.2.1557-beta":{"name":"meetup-web-components","version":"3.2.1557-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"c6dbf089315774c9e688ee8a1d6faadd141b39ef","_id":"meetup-web-components@3.2.1557-beta","_shasum":"58fb24b5dd624c0698566b9bc077b99626e4eca6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"58fb24b5dd624c0698566b9bc077b99626e4eca6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1557-beta.tgz","integrity":"sha512-eMqmTGJvOxMJtJh+bab/CYGSz1mPaS5B0j+aGmh+LgbGiDNBmLguzByx5bEUKPKiyqR8+yH5xKsJE2lQzSzv/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDON6qVTjBqCCYu3yNUvTtV/3eQdDxeqxzyA0Yd8ndUswIhANFPxzbu4OTLna8CDwjQ2vi0l0i710/OhQz71w0dzVXr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1557-beta.tgz_1508772239943_0.006795294350013137"},"directories":{}},"3.2.1558":{"name":"meetup-web-components","version":"3.2.1558","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"2fed2ec420e157bc74bc989eb2bf04f76aa8e683","_id":"meetup-web-components@3.2.1558","_shasum":"ebf8e6fe49021799fe03d7dfbc898be611580c2b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ebf8e6fe49021799fe03d7dfbc898be611580c2b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1558.tgz","integrity":"sha512-dKty3V04pHcJfVt7PWpWLtaYb0TeB7zyqHaZ0h8qjYezxNCmDvu+1zMy9IqjJKE1Nxy94tAKMFd5KPrTfyZXJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9ogLYslpPP5JYUjtkGkTg5KyK+ekn5yQreKU9xULHBAIgArjNIsR2GIlpfyVjOn6SDlbZQ83unpaEyKkLWsF3BGM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1558.tgz_1508772576242_0.29764668457210064"},"directories":{}},"3.2.1559-beta":{"name":"meetup-web-components","version":"3.2.1559-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a03ba37590d3a565b0dc92f95cc0e3d0f3297ede","_id":"meetup-web-components@3.2.1559-beta","_shasum":"1b39af0e33f637811afbb5e9e2cd9568ef186412","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1b39af0e33f637811afbb5e9e2cd9568ef186412","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1559-beta.tgz","integrity":"sha512-SjiP5A4w5ukiRW/MYJKzBllPc21bJ91qbdDCJKbCFhVTfUYljatgGDZOVUjLH2qwE9vBD0cL+aEsQ5NeTrdjtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVvw9UAcQbt3Sp6jIQIKiOSX0Cs4HFKBaNH1TIXT9sbQIhAPFqunNLDv4iq/c92Bw43o9EIbLGOBOkjSoRFkShyHnV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1559-beta.tgz_1508775077093_0.8221440822817385"},"directories":{}},"3.2.1560-beta":{"name":"meetup-web-components","version":"3.2.1560-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"313a30bcf5ccedde7cd566229c8f076035c643ab","_id":"meetup-web-components@3.2.1560-beta","_shasum":"6ad7c065d9ce479296b8aeb530757b07c2744390","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6ad7c065d9ce479296b8aeb530757b07c2744390","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1560-beta.tgz","integrity":"sha512-HNap/9MY+wcST5rnT64flZaZvx61E6c/5Vk/otmGaEH0oZwNdkKL50ZilstmwBU9qPHJSyf0VScFtXRIAYR+XA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICytMPF5HyRZaqRdrSsIML8UeoHX7+Tfme7260NDKwDkAiEAs/sgTpfPGAyjUwB990Zl17JhnoSVUGJrZ4qeVIYTHMk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1560-beta.tgz_1508775615860_0.31098905112594366"},"directories":{}},"3.2.1561":{"name":"meetup-web-components","version":"3.2.1561","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"6379d15585e619b36eaf13b959a64b836584b7e1","_id":"meetup-web-components@3.2.1561","_shasum":"0b5ae3fc3c4dc1a1b3233afa672f8840a8486eb3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0b5ae3fc3c4dc1a1b3233afa672f8840a8486eb3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1561.tgz","integrity":"sha512-r6VNbBBo1i4kMRNEOkEqF7qCXLiHvI7N82upqi0uNwm7EOiGpVh5b5Z4M+DzBsutXXYCb5Qn8iUtEhfzXe1oxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkEYr4Uu8yBEsoJe4IeTACmuXSsjGnZbCjnBfYxKHmZAiEA9eIcDpAOZoReb5NMTexeWfN9Gg1s5q2yMEQr4Io5Mv0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1561.tgz_1508775662495_0.06783564062789083"},"directories":{}},"3.2.1562":{"name":"meetup-web-components","version":"3.2.1562","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"4b66a9574e8983e75d3f36dc48d2abebe432d4f2","_id":"meetup-web-components@3.2.1562","_shasum":"8b8afbbd0887b2251676d1311e9fdaa9aa661962","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8b8afbbd0887b2251676d1311e9fdaa9aa661962","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1562.tgz","integrity":"sha512-Tm87ZhkMyh4zVmZyjVGuJqISgZB1ROSAu99VAuH2ISxAkXi56l3DIfiGx24BaeuFmTFzHntuZFWlkG2ylGUzRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQMEmDUPgL7FByXdKKIiAieI+hvzufgKFs4aoxUr38MAiEAwwOIt19Yu/gfHZBl3cYZkrAJD23RSAB6Tho0azdED3g="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1562.tgz_1508780361298_0.9992402042262256"},"directories":{}},"3.2.1563-beta":{"name":"meetup-web-components","version":"3.2.1563-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a73c5228cb124f9001954d0eb5be28b0ad02b15e","_id":"meetup-web-components@3.2.1563-beta","_shasum":"cfbd73fa905946f566af28e3f4a04047dba71d3e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cfbd73fa905946f566af28e3f4a04047dba71d3e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1563-beta.tgz","integrity":"sha512-2Hm1l593sfDC5xWCgG8zpsGOdHGUjAFrtm+XEcKLo5Ns1K9f3PJwg2hHH2ld8pLKC4b7hq44CS40tQa4PFJtQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjfpaHrTNsrDIhQc7Cu2TD86U9nZTk+4ZymT8ZDBsRJwIgVDG6rJF09j8YuhxTwWi+m5/MrcdQ5pkU79fhXHYlhNE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1563-beta.tgz_1508860618602_0.799454145366326"},"directories":{}},"3.2.1564":{"name":"meetup-web-components","version":"3.2.1564","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"7695b4ab40eecdb65c3eba9696a143817e07fe80","_id":"meetup-web-components@3.2.1564","_shasum":"cb85564b6ee528beab3286926804329be6b5b370","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cb85564b6ee528beab3286926804329be6b5b370","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1564.tgz","integrity":"sha512-/YXDlIOIf0LBNdNm+ssNZTjSes9RR7mB2No9kFoDJjH8ySS7xqX+n6MGYLYg86utWA/XBXait0P/yVVEmVYgUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGzJQqSx07GVgh3SBFsA9nXISQuyLdcH3v4uwaFWdzl7AiBUz5ANJ9jpnjAeaGy91dDQWk524y6VX44VdCv1Imw86A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1564.tgz_1508863179826_0.8986764696892351"},"directories":{}},"3.2.1566-beta":{"name":"meetup-web-components","version":"3.2.1566-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"d791bcd3d7065fb2c490caba49be1d3ca8fe73ba","_id":"meetup-web-components@3.2.1566-beta","_shasum":"df3d7bc9daf38bfb1bf99d3792367f749a4b29b3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"df3d7bc9daf38bfb1bf99d3792367f749a4b29b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1566-beta.tgz","integrity":"sha512-xV7zMBml4wKF9QLHE0dp03wQ7Pj6N4nqyIE2KJAlSWLLCsAepxeHykMEbCAMnxOkPyWs/bD8Pq+zs/Hx84+GJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoAesFuF/E7nlQYoIW3bn+yQAE9calJMkos8aujFoyzAiBHxNF+bS82iL8AWqtunsBTwt6gT5pOHO+6BK3XJFRPSA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1566-beta.tgz_1508879366634_0.4182351191993803"},"directories":{}},"3.2.1567-beta":{"name":"meetup-web-components","version":"3.2.1567-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"5eba8d6e3adc789317694a5f40b3066c5d260010","_id":"meetup-web-components@3.2.1567-beta","_shasum":"7667d77c3258735fc262d3852321987e66e35a10","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7667d77c3258735fc262d3852321987e66e35a10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1567-beta.tgz","integrity":"sha512-HfpMVjDT/TjSKEpRjlIWifRO2/PRtgJoq8CxJDzLsKzTvHwxjQ+x2Gg8uacVBEr0KmJM50ozUeH6tdizLsL1Fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGOaQBT2s6criNa8SGNYONgn6bzquURpvZKsrE87iptnAiEA6ojNBaeZRleP5E/5I9TchfmgRdY0BGwqTcYhi2Z1bNQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1567-beta.tgz_1508879834253_0.19137472426518798"},"directories":{}},"3.2.1568":{"name":"meetup-web-components","version":"3.2.1568","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"974e94fd1618bf515354c3aa6c7d9607a7f3178c","_id":"meetup-web-components@3.2.1568","_shasum":"91e88070313e4c695a6b09b28e9c89e7d3d6665c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"91e88070313e4c695a6b09b28e9c89e7d3d6665c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1568.tgz","integrity":"sha512-2Y71ZK3wV4/7Nkt61kZKitMXm0PHgJgVFHDjvnlZdH+l0yaRwM86NmJHFF5j4H3QyFJhmLKWgDkHEUziSA19VQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtu3v8Z62mTdDqMZMhY72zm/GaXR3mNpMHMCfAEZ27owIhAMjMl4lEeKxBHxgAR3oLE35+4OC24/cSDSZpngxEyhME"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1568.tgz_1508882616505_0.5576683168765157"},"directories":{}},"3.2.1570-beta":{"name":"meetup-web-components","version":"3.2.1570-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"2.2.0","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"38f89dd71f3e96d63de494332533cb29006a9c84","_id":"meetup-web-components@3.2.1570-beta","_shasum":"ece9a02e7c502c715de6042cb2f0c575e562e1b7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ece9a02e7c502c715de6042cb2f0c575e562e1b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1570-beta.tgz","integrity":"sha512-2ZFRIVBptDgZ9HId68aDqgUvlaKjrnZl0HakodB//2Nj2g3eOTnykWXJ3JElDDQz41pK0x74irvoGhSUP8BAow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvAUE3DX1hmKiWEPQH5jD/Qb3sCZd8kf2U/yAKgJNE9AiBUCYa8Cp8LjVeAoa7wrqA5LxfZiBrIfISA5jRGFJqsaQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1570-beta.tgz_1508892698129_0.19266416202299297"},"directories":{}},"3.2.1571-beta":{"name":"meetup-web-components","version":"3.2.1571-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"713e1b4cc37d9ab2b5ef487cb2bc080f3a0dfb22","_id":"meetup-web-components@3.2.1571-beta","_shasum":"b69769b16635a024cd792d2e18825ea2970f4b82","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b69769b16635a024cd792d2e18825ea2970f4b82","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1571-beta.tgz","integrity":"sha512-DyrCsL0xYdJugg2yD3zv+1GAtEun/6Vf4Q5HPdBQN3vPl1WmYCpBx6/X6ABul7k0rA2snydcMZlaPClpH4nuTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGI1mBdoj2S6YdZ1wyyMoOFfAuGr7aODPHAhiemaL53QIhAL0nYbizpWLGRIDjc4tgN+10+UMQiACZ4H0YH+eXAojK"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1571-beta.tgz_1508951831847_0.7604050459340215"},"directories":{}},"3.2.1572":{"name":"meetup-web-components","version":"3.2.1572","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"2.2.0","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"cc75235936c4e0073814d5404ed54115edcc1113","_id":"meetup-web-components@3.2.1572","_shasum":"bebaf4b75b24b54bc23c6b3c6bb08d8a8934e7d8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bebaf4b75b24b54bc23c6b3c6bb08d8a8934e7d8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1572.tgz","integrity":"sha512-TGu7fscd8pe1qFglBcPKMkLV9bL8g1Chyn5GEnc41llNaQxiQtPPdH4y2X+nySHqwllS+rBDUdENCyx1AnJSrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4vUV19Hl+sDdnpsf+Wh1RsdxnnERUgMP7vFMp8Qjv1QIgEblsqePFBxr69kVUKMI9QsCnofANvp7ypEVticsmhS8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1572.tgz_1508965836165_0.4072474567219615"},"directories":{}},"3.2.1573-beta":{"name":"meetup-web-components","version":"3.2.1573-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"2.2.0","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"19c63c1fbbfe5969698e959bb6e4f5007162e834","_id":"meetup-web-components@3.2.1573-beta","_shasum":"e0198237562bdeb84b60cd44be077550a998ebad","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e0198237562bdeb84b60cd44be077550a998ebad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1573-beta.tgz","integrity":"sha512-SWMLZc299/LLnLklcB0JyQORY/dP3bLxYJEjvSkoYZlxFXOlJsyKGQmlZkrMKhAxwawAQ1ye1+sX4t/JrVUrKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDBDuhPuW+nhTx34toNE6PUl5TYQ1VwRz7RkZy1UUE6vAiEA3/RH6GhS/CwZeTMwoYlIhBntGge6MsN3Qefdr+LSSsw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1573-beta.tgz_1508968503939_0.027443567756563425"},"directories":{}},"3.2.1574":{"name":"meetup-web-components","version":"3.2.1574","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"2.2.0","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"b39513c384bcd41d15cbd9606156e865ebf45cac","_id":"meetup-web-components@3.2.1574","_shasum":"bcbcc95670bb66424939a3c71a6258db42529a77","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bcbcc95670bb66424939a3c71a6258db42529a77","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1574.tgz","integrity":"sha512-zxX/9AVHqcjw+HFsBAly2gblHwGrn4LeMGrBCqfUFXW3Y98Q5PzE8uHuwyhS/s8CCs334U8Z5zT25o/VWT6jKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuPtHIWh8mphKJ1Nyi4xIMrnJ7xNySkvAlr+lXeuHYXwIhAN92do6zR4KGWYwxeOM+NWS2xpShPMDU/NghNXtHmiMt"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1574.tgz_1508973262283_0.9758485706988722"},"directories":{}},"3.2.1576-beta":{"name":"meetup-web-components","version":"3.2.1576-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^15.4.2","react-dom":"^15.4.2","react-intl":"^2.2.3","swarm-icons":"1.x"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.5.10","recompose":"0.24.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-15":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raw-loader":"0.5.1","react":"15.6.1","react-addons-test-utils":"15.6.0","react-dom":"15.6.1","react-intl":"2.3.0","react-router":"3.0.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"8181060ae756e51a3ee2a984835730a269860ec7","_id":"meetup-web-components@3.2.1576-beta","_shasum":"49f01766d36fb0f605d56ff51f84849a2dcd4597","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"49f01766d36fb0f605d56ff51f84849a2dcd4597","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1576-beta.tgz","integrity":"sha512-U6dPbTi6j0fBzfNYeXvp+cMfghrGiZCKKPAlBSCMRp0DOK5HwztRx92yEMQOhI3QeJ6F7oUmRuMjQAWJowNBaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBCLH0r1Wlj4B8S4MEq4dih7zujd1nk8JR5U04+ulKyAiEA2bT2dw3s0gtsdlqGmF3DA7qDrMxXsr0A2eWO/oNlzoo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1576-beta.tgz_1509038491267_0.7558120277244598"},"directories":{}},"3.2.1577":{"name":"meetup-web-components","version":"3.2.1577","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"2.2.0","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.0","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"629955c10147c7607db7b574fe23e2437afed9a8","_id":"meetup-web-components@3.2.1577","_shasum":"3b7b70d4948546dec36f44cb47e999c366b79c20","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3b7b70d4948546dec36f44cb47e999c366b79c20","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1577.tgz","integrity":"sha512-6aJdBIqX0BmWQa3QGyJPbWQPTzPHtD4TYCDuqjM3YfVAvhPGjgAJ8ABzY0QORx083FS10SuHirYh7jwX3gd6kg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDtvn6ikYpX9hOOa/sc+mmPZmmW+NkTao38xCp27hmbAIgDNI6YBmMrZpHjBxNA8GXU5BY/TN00PDV5wytMxnBZSQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1577.tgz_1509038643023_0.3879074251744896"},"directories":{}},"3.2.1578":{"name":"meetup-web-components","version":"3.2.1578","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"0a9dff9c5513e38e133cd73c908e6ae428175b04","_id":"meetup-web-components@3.2.1578","_shasum":"11c6b5f8e69cb18abe7ef865ab408d9ac86111aa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"11c6b5f8e69cb18abe7ef865ab408d9ac86111aa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1578.tgz","integrity":"sha512-LZoIhddKiHZZu/GwyYY39pT4fCcgsaHVB0n5alyMnbsAQNWcmP+l377CArBFES1o15iDvq15DtJ3TeX3KkfVng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFLg4MGxKvPPTkRvM3rV4tpvnXBzmChZyOszeA1HIklZAiEA9+oX0lg3Uv3AZMuhLc14QtaD7V9bPreNcZ8Bi7CIkGc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1578.tgz_1509059034656_0.11364842136390507"},"directories":{}},"3.2.1579":{"name":"meetup-web-components","version":"3.2.1579","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"de6bdad5757b7bc988869141678d8d91a9553d70","_id":"meetup-web-components@3.2.1579","_shasum":"60ee0f590ba8f45dee953ff2e88607e5983c6820","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"60ee0f590ba8f45dee953ff2e88607e5983c6820","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1579.tgz","integrity":"sha512-XdrT4p2tn7KbTOLTVYc2OaYIIQugeE52SplRgoqbTsP8NM1Ya+nDa2zYxCUBp36tVakZTSGMlJgW5CRGpUvYKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD84WjZ4Ghu2XJLMzB6LNxC9VUqve79Ii0o17bUNsa6eAIgf/vod/6KnrQoAxp6etDYWdsFyObHVAzlGsvDZglMo4Y="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1579.tgz_1509126400080_0.004632072523236275"},"directories":{}},"3.2.1580":{"name":"meetup-web-components","version":"3.2.1580","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@kadira/storybook":"2.35.3","@kadira/storybook-addon-knobs":"1.7.1","@kadira/storybook-addon-notes":"1.0.1","@kadira/storybook-addons":"^1.6.1","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"00df66cd5326986374522ed2986c66c80243ebc6","_id":"meetup-web-components@3.2.1580","_shasum":"922351eb7b5461a60ba03316fc1b97ce09f06c4b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"922351eb7b5461a60ba03316fc1b97ce09f06c4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1580.tgz","integrity":"sha512-hVVsJXjsAtegGn29GjwQGn1bLtFn0DBv6bLoWxozNZLXUWQJWtZY++o+Owpkdza6sqPVoOPPIBpUNeyq96hUUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHb7bla5torsj+YVbUqLI5Y7g64yHR05VKge7Uc8imNdAiA6Gb+IFazth4ks0O8Qw1cMPOmL1seHnKcdbB8Ix7pgkA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1580.tgz_1509127385068_0.30855580046772957"},"directories":{}},"3.2.1581-beta":{"name":"meetup-web-components","version":"3.2.1581-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"3ae408cab4ea4c93578072895cdc6401dfe97264","_id":"meetup-web-components@3.2.1581-beta","_shasum":"c5509ffa58de844d110248c9d41f4c87886654a3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c5509ffa58de844d110248c9d41f4c87886654a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1581-beta.tgz","integrity":"sha512-jNyRXfoh6IE3BH1HUJE+Jw4XWOgUc2XFdMCfmvcmrZwjGg1sP8m/nC5IPrAF5WN/Vak9QKle/RJFsDo5o6igVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNkYHfULWvJ2OCa96S8fK8dMK9M8rfNG01xx6xmIFVfAiEAotl4KJNzGh8mwCFd6T/DlLsIrCd49F8619H3UQgtyFk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1581-beta.tgz_1509381531946_0.06417115940712392"},"directories":{}},"3.2.1582":{"name":"meetup-web-components","version":"3.2.1582","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"081237ba81cd941c71c8a8cdff99565607df9ac4","_id":"meetup-web-components@3.2.1582","_shasum":"331d1bc4ab7e625a80ee789c61ede44cbcfd91f2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"331d1bc4ab7e625a80ee789c61ede44cbcfd91f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1582.tgz","integrity":"sha512-jQkUdkGF3QDrTQnj3BgIw6meweTX6Sr4wcb0C03RVRnTVSZghbbQzqODEnfK+Mg2BHSAKQo2voXYs/4PvWfELA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1l9vRn5SDBA2n/W6amSVLPvYM4Ryq1SS3C+PLr0+/oAIhANyZFWBgKja7Bi59H866tjsTQy8DXKDs8FIW+LRy8q4X"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1582.tgz_1509384061134_0.03130626678466797"},"directories":{}},"3.2.1583-beta":{"name":"meetup-web-components","version":"3.2.1583-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"b75ef65ca6ee2f4a620d1a483409ae60d19f46e3","_id":"meetup-web-components@3.2.1583-beta","_shasum":"5b511f45ca21b0b801ae3357f48c5636c79fd88a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5b511f45ca21b0b801ae3357f48c5636c79fd88a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1583-beta.tgz","integrity":"sha512-MY18N7+q9d30lbCosscaP0sH9zIw1elk1+EHrEWphc/QpU04hjPHLMYScj8H9Ohqrk4MOFTJw8EHXT1jFluVGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDI1FgqQa3dZcBXb1DluJAXzxJVcMKz8Qs+4Z2tXh3bOQIgROq/fKhUwBOEN0Nu5IbmLqKBkntudKiyzD918bh2g9c="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1583-beta.tgz_1509388492422_0.14165507908910513"},"directories":{}},"3.2.1584":{"name":"meetup-web-components","version":"3.2.1584","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"2c9d81f795a8a24ae9bb77b15265d88e482b62fc","_id":"meetup-web-components@3.2.1584","_shasum":"79544ad40591cceb8adb3c5c247c71ba8b3614b4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"79544ad40591cceb8adb3c5c247c71ba8b3614b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1584.tgz","integrity":"sha512-ybOkmV6n9sGg0NgAuNAhXwg0kYTz9N8XORbvb2b+eoA0IbcvFlHCeWHGaNRp4mO4T9Q23yTBPBPp8t529HhCIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID4ltJ3R/9tlgQvhN7DFOlZT7KNHmQok9JmwNSFjEvXwAiEA3Fczrqp5/vtBuogQa7MfOgChsQLGtYP7lN+HKQQWZF0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1584.tgz_1509390112311_0.453797594178468"},"directories":{}},"3.2.1585-beta":{"name":"meetup-web-components","version":"3.2.1585-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"0a9d35cf1d4c0e08894dfa39540b4526885da69a","_id":"meetup-web-components@3.2.1585-beta","_shasum":"5089fb64088c1eba67567b8b47b20a6bed3d968e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5089fb64088c1eba67567b8b47b20a6bed3d968e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1585-beta.tgz","integrity":"sha512-4WmSjBWrR9vVGHJnhJkXxaoxe9sbtM1jY6VXjHAyf1HjDj3so/AcK233mYkoQxOHRZ2POe3OdECgJ5UDDWWbVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaTDxwNbHEEnVAdsgrT8iaYq8jQdsjc7D3adsMuSBuGgIgItuaECzW/OhPHAJMx3DeSkn/CyJDRUS1yqglM6IEu8g="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1585-beta.tgz_1509400821780_0.6396535139065236"},"directories":{}},"3.2.1586-beta":{"name":"meetup-web-components","version":"3.2.1586-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"86a4977512b37e1a4bf756a95a6ebac6ce327b87","_id":"meetup-web-components@3.2.1586-beta","_shasum":"21adbe283144d45e11d8067f404d655e5f64a4a8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"21adbe283144d45e11d8067f404d655e5f64a4a8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1586-beta.tgz","integrity":"sha512-XYBRAc3XMuZrW10DdMg3fhA/oyov19zv7lyJH5mYCst/TURAecSWUlJ97Kten4z6fr0Ki/U9Xny+hyRAj0pVhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDkpuBohNbdC2xkebiCDqrP8CH0UmrHBC0aHCsbuBDsGAiEAzgkO88bPY50f9rtyWtRDDnXuI1FdQOoLV0/APMUYLJ0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1586-beta.tgz_1509415780546_0.9970144620165229"},"directories":{}},"3.2.1587-beta":{"name":"meetup-web-components","version":"3.2.1587-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"0dbf35188b5fee5cd5808b46f25ffe5f4190c429","_id":"meetup-web-components@3.2.1587-beta","_shasum":"ddc4fd68b0e155fb489183361fb0d19a2d480f00","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ddc4fd68b0e155fb489183361fb0d19a2d480f00","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1587-beta.tgz","integrity":"sha512-MrWtuAkLZzN8Ia0kztPrHsTKDuJAbTf9/bjQtx6V/IC4CSngoGgOQCSHd7razP+c/aNtCzoAggNOd9GogR+Eog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC78CNPPuLrFPE3sfES0Ym7Hp7nO94UNx2ZWL00Kl+c3AIhAIAcyzrglygd7otlTS08ZE2vqGqhKjFIi8+UWmR2ZQGR"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1587-beta.tgz_1509456630144_0.37773728207685053"},"directories":{}},"3.2.1588-beta":{"name":"meetup-web-components","version":"3.2.1588-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"a36c76fdb6abb12ce16b69c91f95b740fc81a832","_id":"meetup-web-components@3.2.1588-beta","_shasum":"c57077cc57af78befb581789f92a93aa354f1840","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c57077cc57af78befb581789f92a93aa354f1840","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1588-beta.tgz","integrity":"sha512-7cbba8LK8d5Jh3nD8FcaWVilDm+3kMrTm8mWHbDRmaL3TBgiFuKKprFcttdaxTvpfWYsV3iNTOdU8LT/GLoK5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO8heXAWtCV65ACJvlCxGEW5PyZcwIog9nCzXB8CvI1wIhAIB4Z0CsTAdZrSycMKQYUaqM1Be3TWVODjOVSaHafIyx"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1588-beta.tgz_1509466181023_0.6967643490061164"},"directories":{}},"3.2.1589":{"name":"meetup-web-components","version":"3.2.1589","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"b29b7981d2943c5980551ddf4da71cc5d058d7aa","_id":"meetup-web-components@3.2.1589","_shasum":"ec1aa8b00a52e1900ebfb5c3b3bb625c3502c008","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ec1aa8b00a52e1900ebfb5c3b3bb625c3502c008","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1589.tgz","integrity":"sha512-mw6rZd81Y/WJ1PT+cleKUH39wbDfkTAR+jOqiZMCNBVEY412CHx1j9kOipyzYGdtfAm/EB/VYx4Jnjc/1TcQig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYgHnNI6lkK87NX51fg3ffaglIr6qphspZ5FtOV1LV4AiEAxkf/QzfT+ePs8Viq5s5mtWSGGI9lgO+1Wm5vt5pEmmE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1589.tgz_1509468001120_0.24916629632934928"},"directories":{}},"3.2.1590":{"name":"meetup-web-components","version":"3.2.1590","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","prop-types":"15.6.0","recompose":"0.26.0","swarm-animation":"git+https://github.com/meetup/swarm-animation.git","swarm-sasstools":"2.0.282"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","webpack":"2.6.1"},"gitHead":"4f56e9fb62cdb88cb99003c9f44caff06a738397","_id":"meetup-web-components@3.2.1590","_shasum":"f184e5d5594a6e9ac770d23ebfb71d61f41950de","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f184e5d5594a6e9ac770d23ebfb71d61f41950de","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1590.tgz","integrity":"sha512-Ct8blUFEZECCxXlJb2L/HEPdU3iZlajnzWb6yBaONAPY+JL/16dPDlK5OIskJtOe7TtDDh02g3ixkJ5xZIwVjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC1cZstrdruWJs1UKpvMPV48JpslSd5HO1lEFyz1oxAtAiEAy7ebdIB+eLSZ3qoHkRgdDOtKtmyqtEsn/s7aFS/DR8I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1590.tgz_1509473776031_0.28779480792582035"},"directories":{}},"3.2.1591":{"name":"meetup-web-components","version":"3.2.1591","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0","swarm-animation":"github:meetup/swarm-animation"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/addon-info":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-icons":"1.3.183","swarm-sasstools":"^2.0.282","webpack":"2.6.1"},"gitHead":"6f0840f23c0b393e6586b4b7456829fafdcbf609","_id":"meetup-web-components@3.2.1591","_shasum":"4ba3c37d8fa1078c7e27fbedbc45b11977473c5c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4ba3c37d8fa1078c7e27fbedbc45b11977473c5c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1591.tgz","integrity":"sha512-zoyo2XfEvSiFd1QRSkEP8XFlOA/Qp2wbleSzjH0TQovQqAr716mjWGBruxgU7tdhMxgIMMyMpLiTuX440lW/VQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1n9DlrzB+vNZJCvLeJkbPu93/uX6OolIgmAACPfFptAiBdE39pztLYP+ry+kr3JVbwzQJjGvQmloAAVtWtiyMMZA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1591.tgz_1509479693406_0.43430912704207003"},"directories":{}},"3.2.1592":{"name":"meetup-web-components","version":"3.2.1592","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f8696f52ae41913625e3b1b104bfd41b463ab0c0","_id":"meetup-web-components@3.2.1592","_shasum":"7a772362e881796832b54b5fc0a1587cdbec5106","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7a772362e881796832b54b5fc0a1587cdbec5106","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1592.tgz","integrity":"sha512-GmqlpSCPiAljGXZEZXpmZOhoWgMdaogqsgzNkZXKgtO/GNRi3ijqyofOfpy7pGLuZs7Q+iZs9EApwp3dPpHcGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBc5K7quIBQMWSXIE+Qrv77kKxRBXzEdJ2Hwb+F3svuhAiEA8u8CsSewbX+ZKuxoVRRV5cm+NE1ESBUBwQzyrAHjBb0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1592.tgz_1509481215628_0.726520772324875"},"directories":{}},"3.2.1593-beta":{"name":"meetup-web-components","version":"3.2.1593-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"6eb42f04655d3cfc584bc3d81b20a3193202817d","_id":"meetup-web-components@3.2.1593-beta","_shasum":"0d4f030b29f472828bbc1c8962078f8a054b159d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0d4f030b29f472828bbc1c8962078f8a054b159d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1593-beta.tgz","integrity":"sha512-ZeaXDRtYyGYTkwJswfpcePOAvGRgDdVKf8wHJ1dAl4wrBgQM/MgF4oW9CS4WCO4hNhtw7FcdX1tEfJ6qY4JwYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcjoEbG0hTSSvQZXt2y9TzCpKd4OZnBmfO9DzIC399DAiBQTF8XHhOUike0KJvmyEinQd1o9DTPcKSTOpXNLJocog=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1593-beta.tgz_1509497136829_0.24486588290892541"},"directories":{}},"3.2.1594-beta":{"name":"meetup-web-components","version":"3.2.1594-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"ca4d426f3d90b22be9eca8d049830272d62200da","_id":"meetup-web-components@3.2.1594-beta","_shasum":"00fd2ffc86a9582ca9f0539f80fc221562e2906f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"00fd2ffc86a9582ca9f0539f80fc221562e2906f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1594-beta.tgz","integrity":"sha512-wWeDZnogTimnAngwH6Lw2ptlGCBlxGjqFKclhkhc3ecG4UWgEoKMUGZzyjh4Bim+AeuFqhJtTj2UNmn4RzoGWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3dv47aXiL8iakwkXa+6iND1hQVkvDMlj3ga1qz04hlAIgU0T88L/paRoaGwvZeY0PVk+0za5K64dsRwMwdpRKMno="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1594-beta.tgz_1509554094563_0.5354297503363341"},"directories":{}},"3.3.1595-beta":{"name":"meetup-web-components","version":"3.3.1595-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"eedafbcf3f7ac5f11a98f7b9dc23c57b449e2906","_id":"meetup-web-components@3.3.1595-beta","_shasum":"f7ebd93706f8a0bce5cc889ed4d57a6ae523b65e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f7ebd93706f8a0bce5cc889ed4d57a6ae523b65e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1595-beta.tgz","integrity":"sha512-8jGexoXMMu6QhJVMwYUciLWB/b1+5w/cG1D8jwTGE/+syKYxyQP5QVjU3EUSC/7LPuVVy5niqLgjRyLrsagVYw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmLHeHWcX9YKjDyXA6ep1RT/O1c68EJk1wpQMaYeyzsQIhANJSHwjfPsLn+HnQ2uMK/LxBPmWG5l+k6mrV8zRGP43u"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1595-beta.tgz_1509582622774_0.08884570258669555"},"directories":{}},"3.2.1596-beta":{"name":"meetup-web-components","version":"3.2.1596-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"1f81d312e0e6c9d27093dc187362de82420208fe","_id":"meetup-web-components@3.2.1596-beta","_shasum":"ccb9c2c8ca077061d997314289297421744d26e0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ccb9c2c8ca077061d997314289297421744d26e0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1596-beta.tgz","integrity":"sha512-4bo+Ox6b49JshZ1/VuXWjmaMEd76h0dZE1n3Ba0+iB5Mgmn9Jy8zNgig1oT/pYduT1iDKVuKvn0PxWyWRu0bpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHhjPonrPsn7j4Ohi9+aHyuvjopED+XleQyzLK5wBWUiAiEAqolBinPYRvSmv6nlHT7dkrbpgwRRV+d//FIDx2HbDX4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1596-beta.tgz_1509586024743_0.3522358809132129"},"directories":{}},"3.2.1597-beta":{"name":"meetup-web-components","version":"3.2.1597-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"3737dcf62c907f70ec3e24925e4e14ebc4e817a9","_id":"meetup-web-components@3.2.1597-beta","_shasum":"d9146aa63b195752c19f6056fe9e5edff9b79120","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d9146aa63b195752c19f6056fe9e5edff9b79120","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1597-beta.tgz","integrity":"sha512-Z37fRtEutMCZp9gpAwRv5OHLVUP2dQZSmK/44/MfMLVx01Y70kqPmTqUGLnDJ4qjvfloAjr4XjlY6PYo29KjPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6gN4qfF4jilJnL8sHukJVunyxs5D3/Vy1QRKvR5T5cAiA6ECc0Z5LuS4PRtFTo2SK7Cpk3kJZqNm6569HyXbxWyg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1597-beta.tgz_1509586400248_0.30971187027171254"},"directories":{}},"3.2.1598":{"name":"meetup-web-components","version":"3.2.1598","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"ba1801d7dd724a71b8b7fea05eb0f4f6e1114e8f","_id":"meetup-web-components@3.2.1598","_shasum":"0167f0aa2aab0fdeaa81fe9744f7c688dacc3034","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0167f0aa2aab0fdeaa81fe9744f7c688dacc3034","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1598.tgz","integrity":"sha512-YaDzZKxhmEkUIBJRywMqCN2R1eUTGnTiBzCMLXFvtzzUl7ZCSFWrxdcmFNTDXhXEmY9cVlqkEVEBVYeE4EvedQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcNvnyWP3VmDayYyHphK4UUtUgeluj8WzLyu5GeuXuTwIhALNtmZGE1ff/Mu/NXEds+/JaaNP+ZBe5kfO0FWwdY4Qt"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1598.tgz_1509587067006_0.14496237481944263"},"directories":{}},"3.2.1600":{"name":"meetup-web-components","version":"3.2.1600","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"8fdee91f41338d383df057aa2030241aa3450ddb","_id":"meetup-web-components@3.2.1600","_shasum":"5b07a1940ca09801ddd34c0e86c78e67804e237f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5b07a1940ca09801ddd34c0e86c78e67804e237f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1600.tgz","integrity":"sha512-tRaoYVdYlbi7mIDpEj7INJNGsVP+PoDXWkU4YCuvHeSM8OlIxIipd7Co29QbgBiX4q5qiz3DM8qhX1dJ77Mb4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQ4egg1vHXbzt9AaL2yYXWFxTy96iLDjICkzGF6BamtQIhAKdO+zDLth4mNHGs3/p/MiVF8pMp3a23Bkb86B1xyCx2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1600.tgz_1509589874297_0.9542982908897102"},"directories":{}},"3.2.1601-beta":{"name":"meetup-web-components","version":"3.2.1601-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"44a756eee1d9e4028efba2efd3c1f89eead7c954","_id":"meetup-web-components@3.2.1601-beta","_shasum":"0f64dd1839c48dea88eea427fd6dbf57b9cd63f2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0f64dd1839c48dea88eea427fd6dbf57b9cd63f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1601-beta.tgz","integrity":"sha512-BUNtdVUHTjg4T+IWApDI7lsLRodur0Yj2Pl7luTJt+tU48IpPvZXV1o/0sYOrE6SJoqncle8hlM1xpY6Ab4mAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDwgdhEXLMbR/Ni0zzwY68/mV+z2793onpwxsWL5gX5gIgMbIQ9LufgqG80DM21uadwjA3t5yuwMbcg1y5U4qLLj4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1601-beta.tgz_1509590215153_0.3733762342017144"},"directories":{}},"3.2.1602-beta":{"name":"meetup-web-components","version":"3.2.1602-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"130ce8b7be769a9b2e777f567d56e530828a7943","_id":"meetup-web-components@3.2.1602-beta","_shasum":"668c2065943fe949bbad8e1dc8681ff7a07465cc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"668c2065943fe949bbad8e1dc8681ff7a07465cc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1602-beta.tgz","integrity":"sha512-wvcVAIdecz3Wlmo36D7y2SokJk4MNqybV7YtCnFuY77BWRSA+OEDbnwtF+ctx5ocaIotHFNiLUPPU4yIK708dw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB5uQi4LSIrnpREzy8amztGvfpUfzkOQ2zzdR5H1+2J/AiBrdyYYO9evjn8mGgdC5x0iAsxA5SZXzFIXIRbP3GuCyQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1602-beta.tgz_1509638509538_0.9951905144844204"},"directories":{}},"3.2.1603-beta":{"name":"meetup-web-components","version":"3.2.1603-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"43e7140db1a883d9ce42acecf423fdc238866448","_id":"meetup-web-components@3.2.1603-beta","_shasum":"20c00b62df904e63625c97315b527f3414dd45d8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"20c00b62df904e63625c97315b527f3414dd45d8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1603-beta.tgz","integrity":"sha512-rUHTwF1vJ4yMzYBsruFn8oxXkol67l68l7WGV2XubSYNXe01g0BSxSj7p+BvbJT8oieEhMae6s0ZDIPbXVLstg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNw+qUf+ePQ+ddy29mUFA/+MQWq5O/xiHi8rsTK7eYlAiAtCxKaen0XNFfaktkpyxBoKYlAJxeLXkWgmRuGuDUL5Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1603-beta.tgz_1509639049152_0.3415006469003856"},"directories":{}},"3.2.1604-beta":{"name":"meetup-web-components","version":"3.2.1604-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"44fb89ea8ed998c5fba85d87d3bcf6243b38aef4","_id":"meetup-web-components@3.2.1604-beta","_shasum":"cd7c08a774a1be79e248a33d483c753147a85ec5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cd7c08a774a1be79e248a33d483c753147a85ec5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1604-beta.tgz","integrity":"sha512-524GbKzeqsVmAk96hF+TZG334e4XpW+PlnJH6qW+60YL740+f+U4ws2OATDKPjRpcirLUA5p1JNnSbzKvMc3ig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+RCz9/DKmE2PV2K0aqei6O4eaOYvj8LQGXDstIH3UQAiEAjRcuXnCStvKHIFCDt81TDKt1AvFpixdyy+vaE/yW2Mk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1604-beta.tgz_1509640497290_0.9361401563510299"},"directories":{}},"3.2.1605-beta":{"name":"meetup-web-components","version":"3.2.1605-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"d7f66081915ea2e0e60cd2854a2d5425f5c536d2","_id":"meetup-web-components@3.2.1605-beta","_shasum":"23b92c03a8bcdf760b0f387eb4bcbedf5d3b6e75","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"23b92c03a8bcdf760b0f387eb4bcbedf5d3b6e75","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1605-beta.tgz","integrity":"sha512-/2ItMLFwVkx2GXCn2VGR1UXdRebv7d+iSQANDabgotrIhxysR3sJAx+z3dEXUHz78qXw5SFO/8Y0wNL8lUqLtg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxEagxJ8zpoNM31e3ArIl96Ks1M5AzDVZXoZegG8ddbAiEA9omNrehE6KyRQFIkEcAnVb7sHr6epPR61Gk1YkgxDE4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1605-beta.tgz_1509641054869_0.7844720925204456"},"directories":{}},"3.2.1606":{"name":"meetup-web-components","version":"3.2.1606","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"e76b863391d0b386fb1430345234859a624924a2","_id":"meetup-web-components@3.2.1606","_shasum":"b153f3a941625c4622526259814942627493ada7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b153f3a941625c4622526259814942627493ada7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1606.tgz","integrity":"sha512-D4uUgRPtwgWXOvtcYqpDFaWvKzjDEbSM7vLhy0SgY/rDx8RtOHyPlaDM1EuJ61i9MkuaZKr9FfkVaeQ6dG2FUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAquxhFktFHffUeVn4gsk+Pj7i32rVC8m8hXpBRKmprAIhAIkC1ti9h7xa+LDcKMG8KKaZYYUmrDEmYA/7dv3ej/Q8"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1606.tgz_1509641727546_0.34659960120916367"},"directories":{}},"3.2.1607-beta":{"name":"meetup-web-components","version":"3.2.1607-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"74fbb16ed8a976ffcf7667fab4f5daef4bc72a6e","_id":"meetup-web-components@3.2.1607-beta","_shasum":"741443412fcecdcbe5b09068b86082ee76373238","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"741443412fcecdcbe5b09068b86082ee76373238","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1607-beta.tgz","integrity":"sha512-Rp724eLgUJ1dYA5gPyz0hsM42CK/BAPVtyqw9g6nFb5X21/z48EESOcVOzY/tydC40Ivvuki/hyPBD1vilnDyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZ4B/CejeaIUM02w4aAkJmSQGmM6vOsGPVXLHO8tpbpAiAhYUYq9nePEa0WDH5gxD54VQRWuxn/Qb3k2GF5spb6Mg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1607-beta.tgz_1509643519119_0.6641561000142246"},"directories":{}},"3.2.1608-beta":{"name":"meetup-web-components","version":"3.2.1608-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"5a8933817fd7ac550e272b02e4835e5d3d638453","_id":"meetup-web-components@3.2.1608-beta","_shasum":"e0cd4bcd77c6b114a205bfb1013e6d15adfa8ad1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e0cd4bcd77c6b114a205bfb1013e6d15adfa8ad1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1608-beta.tgz","integrity":"sha512-w+LtIsYji5D3u3kPD1rJSCNOQmptBUku70ypQxzDnBwVWlvnum2Ssx8cRQJfCe7rZnL0uz+pcy+JgDLkjeCOxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVKW7j8ON4dMsfDKprb4OH9hnIwey9VhrvCKFmAScGcAiBPKoKvK2FnxEcLD/eNFUCqyNLoXLOFi4zO+cebCOY2VA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1608-beta.tgz_1509644170664_0.767266757786274"},"directories":{}},"3.2.1609":{"name":"meetup-web-components","version":"3.2.1609","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"107101db252bf1a2d384dfccf2864141fd991d3c","_id":"meetup-web-components@3.2.1609","_shasum":"f6a4be11135a73ac5ddb9512696693888d7cec3d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f6a4be11135a73ac5ddb9512696693888d7cec3d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.2.1609.tgz","integrity":"sha512-0jd36hYrPSSv3WaeAZRBfUlIDnRkONmFVvbQdpJeSD6p1ce5070uQTnbHcHvNR/wHgHz2kUYoVmGNEmlBc2s/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3dy6itWj8cxyXx5D4nV38QWAjESNoH2ZKO50sFf+Y+AIhAKJCXUlzx/eW/ahZDouYZ/knrVKyZWHwkMFFrfAIrzBS"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.2.1609.tgz_1509644724077_0.5176561551634222"},"directories":{}},"3.3.1610":{"name":"meetup-web-components","version":"3.3.1610","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"5d7c6b8ee470114014128ab6a7277d82c7ebf813","_id":"meetup-web-components@3.3.1610","_shasum":"aa3da78abcdf9f3ad521ff93f0fc1091b765f45d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"aa3da78abcdf9f3ad521ff93f0fc1091b765f45d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1610.tgz","integrity":"sha512-MAfqMdX5ZglPa20rn+CsWLWkLqEh6x9z8/FSf/yFjhDklMS6zBLA7y1LeISIRydDd+aM7MiMX16TxHzTz3Pc8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBi+jJhMi1NdcQQNiNBk6ClJ/87JWjkcGS69klyYFhO6AiB+TNQQ90lRV5748hDz10drwmFuYeJCU4V5uYKij8jb+g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1610.tgz_1509651131059_0.4758575693704188"},"directories":{}},"3.3.1612":{"name":"meetup-web-components","version":"3.3.1612","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"b80de169d0855c28309da477cf89b4a2a091ee39","_id":"meetup-web-components@3.3.1612","_shasum":"c86c88c026a3ea8626954a69e9cc53d7eaeb44ad","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c86c88c026a3ea8626954a69e9cc53d7eaeb44ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1612.tgz","integrity":"sha512-0NrfXscKzgq0iJdG2GGHBDjUo3j7MZTQ4l7pPjRuzfuycnunPmvKkx8lBfM2NWcS0r46hxePDcSmUKH6jUvtqg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCnM1ruP71pU42ZDsJAHmkmF0MSY16+inQrxlXJVsr6AiBn0shrBO2Py63X+jKAKF8kE/cylHzENy8KnYRalKnbag=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1612.tgz_1509658052490_0.5710015911608934"},"directories":{}},"3.3.1611":{"name":"meetup-web-components","version":"3.3.1611","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f3dea079e93be879c73520d76bcb768f92acb505","_id":"meetup-web-components@3.3.1611","_shasum":"1a92317952ce6a044f68176bad29b0b9151fffa7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1a92317952ce6a044f68176bad29b0b9151fffa7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1611.tgz","integrity":"sha512-W+QrnIs57XMsL9p0dEuwGO0sqRiJPX1wb+PeHViDjzevxVlnePWtz/ncoPm+k5GyWuPYsj1uEDRtOLDxSsEoBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbpQ6llm+czNBcSqEPY1P6yixcPXJRtqyzPkhRE+mVuAiEA7CTkE9hDgEZvJCxBKdF/zP6xlvH73JXUFu8vWCUymSU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1611.tgz_1509658247439_0.5960575442295521"},"directories":{}},"3.3.1613":{"name":"meetup-web-components","version":"3.3.1613","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"3c48f4ec45e74ee1ca706fbab36344e5ad34a706","_id":"meetup-web-components@3.3.1613","_shasum":"ddb63612b595f29d7076ab7d96f5ee437695ee4d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ddb63612b595f29d7076ab7d96f5ee437695ee4d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1613.tgz","integrity":"sha512-3ic8gjTkErrS3yYu6H3suK6Ym3Km4/iIQhS13QvCsBbd3G7U5PKBUzQig+PN6vEzNcjNjlAnQMC0o5/NSbDCyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNvwUCiIYnziTxLRzOsRXSwecsWAwkDi6N0xtcOC3WXAiBD+sNeze+kh3bHoqno03OXANT8Z1LHY/QV6PHrO1mk4w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1613.tgz_1509660350364_0.46165385213680565"},"directories":{}},"3.3.1614":{"name":"meetup-web-components","version":"3.3.1614","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"96c8584ab5c777a205d544180d3708058fb986aa","_id":"meetup-web-components@3.3.1614","_shasum":"b052b11aa612986fb0cbadceb3801b7b8dbcd5db","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b052b11aa612986fb0cbadceb3801b7b8dbcd5db","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1614.tgz","integrity":"sha512-SZ3U610dbIEbYrXPszkbGRUEksTLPiY1bV8WFQ2+aDhe28rqJFSyzLOlQC8t1QDwMpsB3O98c3DfIGLjYTju9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBQiIDDYLuHQdx00kVkhvaVskx1Aq3zAqKa8N+AhXdhgIhAJt7MgDKKfP8xIdV1O8Pw4GOPt5OSqiHgERtNLXBlO6H"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1614.tgz_1509662472521_0.8791001234203577"},"directories":{}},"3.3.1619":{"name":"meetup-web-components","version":"3.3.1619","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f323af4101b9d35fd4a594d4a144c5055d0f5445","_id":"meetup-web-components@3.3.1619","_shasum":"7312fff4b6d0cc41d5a621f898fac6688418c23f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7312fff4b6d0cc41d5a621f898fac6688418c23f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1619.tgz","integrity":"sha512-EnFBF84KdkdlBAp5aDRCuShRWpMwHqSZQSioGHXUy9G6n9Lbc1f5slVvPd3LY3H9qdM8E5FnvLtc6zKTouka3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERvUUq450NRa9U03ZSVDvk3M5SrYwtC3jAY6Vf/pdOgAiB4egVWSkhQpGu5yQ48JaDfgdMHWpDftrCG32zUOLeFrA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1619.tgz_1509664655012_0.05692571401596069"},"directories":{}},"3.3.1620":{"name":"meetup-web-components","version":"3.3.1620","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f4e38778c200fe687ba6adcfaa4d9a1b4f85e760","_id":"meetup-web-components@3.3.1620","_shasum":"3cb04735e58f6a0596cf5ead40f5d2a314927d5e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3cb04735e58f6a0596cf5ead40f5d2a314927d5e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1620.tgz","integrity":"sha512-MVzmptWTD+PnrnyLRCrVOmipbXniyV0PAnpsWbI5/XmvMBzKTHv+GYNiHxjQOD81Dyl721YgNnFkzKwEAcDuwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGgTS0n3hVkpqObqcprE+y/rIMKlIBxx4FVNwyDcJmi3AiEA197OfPHInhA6TjGrSneqUETN6kL7V3UBWH1rOzbi9iM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1620.tgz_1509723161914_0.6185139920562506"},"directories":{}},"3.3.1621-beta":{"name":"meetup-web-components","version":"3.3.1621-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"46ae8f4ee3bd27b643763cbd795afa807a4d63cd","_id":"meetup-web-components@3.3.1621-beta","_shasum":"314646c6a4dc3d8e10bb7886765057ad99a4af03","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"314646c6a4dc3d8e10bb7886765057ad99a4af03","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1621-beta.tgz","integrity":"sha512-mUIXPPZcFPKiXkGi13IXOvfm840L0evNbZ76FgOM/uMwxY9HBlcAf7LwYLK4l577gwqZs05wMInXBIfZ47qILg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE0ax9oQn51fjd2SKqwzQHcBQTqKs99k3I/sNNxmU/UwIhAKvDGz3IY13Ts+vzxHZkmUpcE3UvYMmBpAPlIfnjeXSq"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1621-beta.tgz_1509724624191_0.34806729364208877"},"directories":{}},"3.3.1622":{"name":"meetup-web-components","version":"3.3.1622","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"945973041595795390546c397f694367471751d9","_id":"meetup-web-components@3.3.1622","_shasum":"2a361f7fb112b0a596abcfdc42dba1cb5aae74ae","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2a361f7fb112b0a596abcfdc42dba1cb5aae74ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1622.tgz","integrity":"sha512-y8lXkXpGahtzJQA2Gr8YzOB0H4X+aWU4anky4Fq9S2mBrj4JZsLIyDrt6/Pt++6bauI8VxN++WojNjCWex3U2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9YSELISLzi7p0jBWTxemqAfBbmF5+oXSf0RjoallIeAiEAjuFPeRWAI4vxLtA8xfvL6zcKUCMQ3oBZhGKdXTgN0TA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1622.tgz_1509724984336_0.27814750908873975"},"directories":{}},"3.3.1623-beta":{"name":"meetup-web-components","version":"3.3.1623-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"8781b97a0bd0d979484b30747ffbdac8ccddd83c","_id":"meetup-web-components@3.3.1623-beta","_shasum":"ea698cf1f28634c4c3431a7157bd96eeb45a3a6d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ea698cf1f28634c4c3431a7157bd96eeb45a3a6d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1623-beta.tgz","integrity":"sha512-mkvUgLrwWc4OeCAICQ3lSrlVCz85VLb0jf6c8TRu5C2RfkeMiVNsP+cksa8eYB/UaVv+xGdVm4pelQQfW/ev9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELwKb+/gII2dIAPCWmErT1z9/rV5dyTp+/zK6PvXJ1RAiEAuMJC8ljP/9r3yga8cQTBBiFL2kc4KDeC0bwIGW16YWY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1623-beta.tgz_1509825758357_0.2680181374307722"},"directories":{}},"3.3.1624":{"name":"meetup-web-components","version":"3.3.1624","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"dbfb874c476c5efd3b34c0a8164466a1c5e374bd","_id":"meetup-web-components@3.3.1624","_shasum":"0ef25fcd4c7d9bebbc62db9372bf68afd8997266","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0ef25fcd4c7d9bebbc62db9372bf68afd8997266","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1624.tgz","integrity":"sha512-j1aMFCa0W/V1HyR6+zMhlBW+VJ59QUXPNdVy0jw2GWVjzF462CDr3OqADZw7sYf16QeBydMHETAuiK+ujH+Z8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCa4C+l0WGgqFy6p/4g6R9Ooju6cUT6fEmBdbEclWycYAIfE30BAv+3hvuqqBb8g/4AIl2it/AHAVNMFPxnBVRUsw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1624.tgz_1509826097085_0.6773021670524031"},"directories":{}},"3.3.1629-beta":{"name":"meetup-web-components","version":"3.3.1629-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"54d23f4bedf96cc649ccde696139ea308fdee46c","_id":"meetup-web-components@3.3.1629-beta","_shasum":"0dfe8cecac08c2dfcb7429e0a4aca247a80f6455","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0dfe8cecac08c2dfcb7429e0a4aca247a80f6455","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1629-beta.tgz","integrity":"sha512-+EJvd+5TuDqfuLLB6cYmBCU0BDXiyVOF3nSe/K0WHOnnmJq0skpE2IqakKuhRnm0YshlzmtsC6kYwuNlhJpQ1w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAv/JVUqdW6sRRRmaFb6U9q6dzaJONvoMEmVTB2o56p9AiEAi0aajJ3Uf2egtDZA0t9w4Ev1ZuJ4gGsV68xZQ4lmyZY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1629-beta.tgz_1510002821622_0.04063853179104626"},"directories":{}},"3.3.1630-beta":{"name":"meetup-web-components","version":"3.3.1630-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"8f1d5f793ce06cb8b459ab9ccc3eeabfe05a8d7c","_id":"meetup-web-components@3.3.1630-beta","_shasum":"477163b1b47193efcb7e89cdff7c149ce32e2898","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"477163b1b47193efcb7e89cdff7c149ce32e2898","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1630-beta.tgz","integrity":"sha512-Dh2c4sBBjCH4eROZPgH1ZgeckC26tldh8ktvIJx8cpVkbnbIHA6zO/cH/k9SdHaWbC2HVtry45Ofkl9UMSQ4uw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICld5wbFEh5okZTj0lvwxRKXeUEL9hQHUaV19YHcfssiAiAPTRd7jsciPUf7bA191J01WqJWPe91tpBgKknaRCEWrw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1630-beta.tgz_1510007975937_0.1593053180258721"},"directories":{}},"3.3.1631-beta":{"name":"meetup-web-components","version":"3.3.1631-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"3eb8e0a8e10b2afb6679423ed743ca016992e5bd","_id":"meetup-web-components@3.3.1631-beta","_shasum":"dbb57dab2c7c7a337e8349dad62ffd6332037907","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dbb57dab2c7c7a337e8349dad62ffd6332037907","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1631-beta.tgz","integrity":"sha512-Z5lHmTeMW1R3N+sNfT0oOMpwObFFCh9GnullY/8vN1qRHSjPPccLWSAILeDPoPb/VuKFjoqYBZyj4yvexORUfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpLRzbRuKBeUOk9cU+CrTDAqgfG8cZnR0h1+4kUm8XlAiEA8aiO2sh14fKYsV4uPDa/8Z7Q5mXAjeBWXRqr8VcQTZw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1631-beta.tgz_1510008648111_0.8581128963269293"},"directories":{}},"3.3.1632-beta":{"name":"meetup-web-components","version":"3.3.1632-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"6e7bb47c0a1c8a8f7a88e4682ba71f864605a6c7","_id":"meetup-web-components@3.3.1632-beta","_shasum":"1fe2ab68c0590605fa063ba14a6f7211cc505c9a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1fe2ab68c0590605fa063ba14a6f7211cc505c9a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1632-beta.tgz","integrity":"sha512-neEir4OTkRfepLDX97asHxG+UyAKy/BIkIGNunzuf7eCTAjDvzgLVDIj00wmCchIrbwOKszS1aIRM56EoyI9LA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICc4RnhHJXeVget83L3C0qv/frmgjWFEUpfOmLDMkVTdAiEA2kLLW/1hxE8q/8Nn49kCdHzSwN73LQtYmGj4kZGLiMM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1632-beta.tgz_1510011751787_0.7628880548290908"},"directories":{}},"3.3.1633-beta":{"name":"meetup-web-components","version":"3.3.1633-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"0e0e9165358d4aaa611c7d67150a2bb88289c179","_id":"meetup-web-components@3.3.1633-beta","_shasum":"94c142f6004012edcc32cad81a973f56ee80d652","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"94c142f6004012edcc32cad81a973f56ee80d652","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1633-beta.tgz","integrity":"sha512-QG8S807EGmSv98QbZ4U9BlxF2SPXNMembjuMmJv4mqhtrETNHKzfnsg6GwUS3EFJ2MFGs+fGM+UUnIGZdr3kkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV5niqd67kTuuEp+9R3shUqBTzrWGWP3rJkWX9zKJf4gIgOmxcqARkzVzX9c8rAKjxDi1OFTH0sEgsmEgCbabLOwo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1633-beta.tgz_1510013621431_0.7581052244640887"},"directories":{}},"3.3.1634-beta":{"name":"meetup-web-components","version":"3.3.1634-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"1a6378134e90228b7a625a4f45f1530a0bdc1c60","_id":"meetup-web-components@3.3.1634-beta","_shasum":"db816f6e8050d26f91342f0f574dc0ef284de117","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"db816f6e8050d26f91342f0f574dc0ef284de117","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1634-beta.tgz","integrity":"sha512-HqM4/O4TSiJ2aYKiM8gjHM5TCCwdX/5jw2bXbW2yvvD6rjV6nf0Ya+0xuht3EBHupo8gZ6nEALRxn6H51DyKgQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbCDOhvBe3uUTkEaFwHIqm/cD+8CfA5RjG8cqo4xHBlQIgQ7z2TpfsIbfVbcspVUoDn8D2oHl41KHvpT3aI2Dq5qM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1634-beta.tgz_1510013747089_0.3868763907812536"},"directories":{}},"3.3.1635-beta":{"name":"meetup-web-components","version":"3.3.1635-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"1d9af3aadada70e365bccd1b69870ff49cdd95d6","_id":"meetup-web-components@3.3.1635-beta","_shasum":"a3c1128d277f3bf0a8ce17c5d8fefc88f46edbc9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a3c1128d277f3bf0a8ce17c5d8fefc88f46edbc9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1635-beta.tgz","integrity":"sha512-Fendab6lWPt+ksATQ/fxm8cOEaixJU+Lya8RcDOduPCUaXP1MhOHlrTo2y26/kgjqQmvmbjHzSaIHV/LCuAaFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzzmf0gP+qSgmiPTGu39RInvpjdBL8sM/2EDwD/+99iwIhAM1Jf2gMX7Haqtl3jPO/muuM2gjOlrTiPyeknfL+7b6F"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1635-beta.tgz_1510015701420_0.769273100188002"},"directories":{}},"3.3.1636-beta":{"name":"meetup-web-components","version":"3.3.1636-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"dcea6bc42c434a47390f7eab8a50e54273d22ba9","_id":"meetup-web-components@3.3.1636-beta","_shasum":"a7fc0192183c7dcc36723e77a68e4b981f0e0ebd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a7fc0192183c7dcc36723e77a68e4b981f0e0ebd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1636-beta.tgz","integrity":"sha512-POq/91q774BA0w5L2Rge7ZQA4+yAg7EjhcRQBxoRt496+Vp8IHT2E1FfmEzvnH3XxlUX7axgGZYHavg2qxsdAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH50R3R3ZoXthnxnMxjfijeMG42c6yaOnDXaEOsB1FSLAiEA24ZYOuTkZMsPSExKdDkAnFau92Fce0AhMKDc//8kc0U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1636-beta.tgz_1510016486041_0.7478759570512921"},"directories":{}},"3.3.1637-beta":{"name":"meetup-web-components","version":"3.3.1637-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"319077c0109c394e4866967cf00e1452199d4c56","_id":"meetup-web-components@3.3.1637-beta","_shasum":"16bdede37dc96c4a6eb49b5bcde601de035d1a96","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"16bdede37dc96c4a6eb49b5bcde601de035d1a96","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1637-beta.tgz","integrity":"sha512-gFhPMqHJ5w4tF8hIPRPXMh9sXtWMDwHYbBj/gZThyPOi+h48CEll5gT4B3ACSO+02lw6ITQGYJnkwcnZCTr3XQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGnW74DMQuB1+XDfyZIx0prviamGvrupQH+XrkLUp+JQIhAM54O5dVLz+lFqHOWbhsZxHUHs86e6jKV50wNiD1dGUU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1637-beta.tgz_1510017189709_0.012838157126680017"},"directories":{}},"3.3.1638-beta":{"name":"meetup-web-components","version":"3.3.1638-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"ca5d890009e7fe36cdc11bb1da6d8cd7c330ffe6","_id":"meetup-web-components@3.3.1638-beta","_shasum":"f9249e73178fb3d2c0e8967ed67d107cb7146837","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f9249e73178fb3d2c0e8967ed67d107cb7146837","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1638-beta.tgz","integrity":"sha512-4XEAdzgGO0UfO744eg55QRZ7Q08NLwpCesw59TchnQLjfIHdPMi5V9S/Tvs8rfxaWn/8HlsQwaUK19eipUJ4eQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUvV+nyLxohPIq4jBKJTdFOicdJGFRdKtPzFCJotCstAiEAmvRqYadDwUS65cL50b+1Wnb42jknBptEtUwiSQYg6as="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1638-beta.tgz_1510018747699_0.200613732682541"},"directories":{}},"3.3.1639-beta":{"name":"meetup-web-components","version":"3.3.1639-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"4a68f18e95b9f2e48ca46821e6f033df4504f722","_id":"meetup-web-components@3.3.1639-beta","_shasum":"0b84f2945efff33549a51bb5db6e392aee626678","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0b84f2945efff33549a51bb5db6e392aee626678","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1639-beta.tgz","integrity":"sha512-I/uIoSF6Xk9jTFzytWEWLYKXSu/UfMwOCJ16YaWa6vKx/OJ6WyGkYLKycRCopZIEVhoQoM0bEmL4Z5dLBJW5RA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSbXEoeoo4V5Z3VZihEQIPU8I0Qb3L0+5cPRy9YXPyRQIgabMtrt2z+nd12twYMlKI8twxVpKmusZF6+w8UoR+kmg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1639-beta.tgz_1510029061809_0.7206017978023738"},"directories":{}},"3.3.1640":{"name":"meetup-web-components","version":"3.3.1640","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"5667499d10e24cc362f5ccf579d4a9787dee30ad","_id":"meetup-web-components@3.3.1640","_shasum":"e7253fc9c124274af4918c66d18ca7d9d35c5088","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e7253fc9c124274af4918c66d18ca7d9d35c5088","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1640.tgz","integrity":"sha512-NHEjI8FEnATpcakuZ6jvkhJt0cbngUVboUH/UQoDjdDVEryjl3DB5emTy9iwi7UKMfUo8jWXvus9dFnAPxbVGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUATv0XHKpMxBk8ej/V5vtjNLy+1ps3cnJSCtybZvlVgIgYi4i401F2o3bB3odSM3U2J7RkduSJPejRhUQncVU6Ac="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1640.tgz_1510029780249_0.6213373823557049"},"directories":{}},"3.3.1641-beta":{"name":"meetup-web-components","version":"3.3.1641-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"56aef2201eb7cd55c05631566528afd0eabfd6e1","_id":"meetup-web-components@3.3.1641-beta","_shasum":"5d6c87b58435cd404496a28128eedabc870ddfbe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5d6c87b58435cd404496a28128eedabc870ddfbe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1641-beta.tgz","integrity":"sha512-dD7kGvS438uNNggjHe5t/bE6KoVZsW/yoMGv3afRyWk0i6sUF91sE67LXxSYhSKkj7uLRHrecF2L0ri6xL0phQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9C28dxxY54J970d1MYSG48857o6WznqH4VOQRQH3iRQIhAKdXQqxlsTmSo8bYQEIyVGSeoU62H5KXxmF8f6BqbkeI"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1641-beta.tgz_1510166505809_0.17163140373304486"},"directories":{}},"3.3.1642-beta":{"name":"meetup-web-components","version":"3.3.1642-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"95f0c840ec99bab4003f4b770320f96f52c966b2","_id":"meetup-web-components@3.3.1642-beta","_shasum":"d78228395e6b66a00ad000517333de308032da5d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d78228395e6b66a00ad000517333de308032da5d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1642-beta.tgz","integrity":"sha512-ldP9dQRrEU/kKs20zAZntqzf+tV4jDpJfFiVG3r1xX+OSQGT7ARwBEy4NY/Z36b/oqCWkytm4IdyMJHl3ITHZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQp/NvAEg5NTOvUxe2C50hEl0LZuOkPlAzSTjUVKe9JAIhALI0/nuH258Xtk3qBAFygQ7FZi3NYyWzR/+96tJGnpca"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1642-beta.tgz_1510167852427_0.9600344870705158"},"directories":{}},"3.3.1643-beta":{"name":"meetup-web-components","version":"3.3.1643-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"1c65996d93cf3965e3d03101f984e15233f6bb58","_id":"meetup-web-components@3.3.1643-beta","_shasum":"2c0359f8e9fad987afff750a30f6f80ff6721e82","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2c0359f8e9fad987afff750a30f6f80ff6721e82","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1643-beta.tgz","integrity":"sha512-NYNdUxbWS2wkt4j9iCwjhrD88tZAOiB3mRUNWFF8yNWqiiNDQTIcRdXwALC/YANKla69efZlV5Imz5Y2LLvmfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+3y+nMv2gfbqx9cFLzHzCZ1UUpBxsJLs/7OAfT4QGAAiAygkiUKUSeIZWZ5GlHkbqAwE2UuaD15Ze0XtGAgWKt3w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1643-beta.tgz_1510169691191_0.1825391435995698"},"directories":{}},"3.3.1644":{"name":"meetup-web-components","version":"3.3.1644","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"7df32ed8b7f62d87cb5ad146bf640405b0f02c42","_id":"meetup-web-components@3.3.1644","_shasum":"7dab5783b033d9142f72570916c45c45db887326","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7dab5783b033d9142f72570916c45c45db887326","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1644.tgz","integrity":"sha512-0tF0yYECg3jTfoHIaY57ZigrPmv+4qOG6j+nVT7BckI7ESeZ3kBsEjtKMCpf8BV5gIV7V3BO5pEjOT/aqoPVjQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWMfzbFlXNTU3JrtGNviAcKA1yIwCiPWFMOvbGyiQqQAiBHUT5V68R/kjXR2UeCGYMDmknvVkLWZHzXnoNysytIew=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1644.tgz_1510169854635_0.6435814425349236"},"directories":{}},"3.3.1645":{"name":"meetup-web-components","version":"3.3.1645","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"7550b2a4c77fc3acf6e1392d035c200bf3dd1259","_id":"meetup-web-components@3.3.1645","_shasum":"5f8d03554635f9886997eda4b5746f845c46fe2f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5f8d03554635f9886997eda4b5746f845c46fe2f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1645.tgz","integrity":"sha512-S0ILu1NC9K0/ZOMxIqQVQoqTq1v01QmadwZg+KHBDMKtXsFLMJK1K8zRwyGuRiqxdu8U8WsX1095DofrOLU04A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADWKTA7NvapSNkryhBcasZO7w4HT4jlZ1AWe4fWsayqAiBOgNr1OOaL7g0gjfnChtdh/7b8rd9vW5IDMRE/I/RNRw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1645.tgz_1510170860607_0.8269381406717002"},"directories":{}},"3.3.1646-beta":{"name":"meetup-web-components","version":"3.3.1646-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"7a4b02fbad2c33fec4ae05ac19094ad053389d25","_id":"meetup-web-components@3.3.1646-beta","_shasum":"812501581671c9772bca1de6ca1194c61ca84e3e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"812501581671c9772bca1de6ca1194c61ca84e3e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1646-beta.tgz","integrity":"sha512-bP5GKtr/dIIPjdUbeyjOVShLzcECkHsMEvCn35KTycfszDTZQ/ipEA8vLa6/czKWpqKgLqyBs9FBjVtSvEXRrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSPRCykmj05fOz5GbgvhqFN1WnDLM7hI/9/Uo6OZ2sRgIgM0uwAv2vkUROrN+jXjg/RCw4jmvVLiGqPGT/NQOsQSQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1646-beta.tgz_1510178157026_0.17365495208650827"},"directories":{}},"3.3.1647-beta":{"name":"meetup-web-components","version":"3.3.1647-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"868eaa6a7ba21359e7986214a899172cb7cae630","_id":"meetup-web-components@3.3.1647-beta","_shasum":"1e68598a7b9a4411fe236acfcc01a7e6b54e7454","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1e68598a7b9a4411fe236acfcc01a7e6b54e7454","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1647-beta.tgz","integrity":"sha512-7GoLUELfiqbGjs5EfkZw0R77pvEPclrMOh/IM8Al2fortY4OjoHjY/ab3zani3TaBXql018+UPmt0aH3cwBapA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECsrzur9z29B5xLhMPD/SvszLFEWtaZBNQYEJM6PT+jAiEAyL3y4QmSJXrmL2WgbDKQoR5LXTU1XEtCfOkkU12sVOc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1647-beta.tgz_1510181537899_0.979719786439091"},"directories":{}},"3.3.1649":{"name":"meetup-web-components","version":"3.3.1649","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"4a56b7a0d6011ccd857a74bac5f182afbdc57717","_id":"meetup-web-components@3.3.1649","_shasum":"d4727199918d60c0bc4ace424d8aaee9421d0abf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d4727199918d60c0bc4ace424d8aaee9421d0abf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1649.tgz","integrity":"sha512-OxfBM8MgoBlbn8GfLqZMDikLiVlrZSteDv4jBkFpIgOd0lE4tdOF7m6+KD9XEMH4kma7k6x6b6ckumR/SDU94w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAxitBMjzX+X27E19rlvG1TrTqQtMjcIjO1gpmzg2+EeAiEAsdaGFViWVMR/rd8M4uPBLFiAn0QZo+PRfJlX0sy1lkw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1649.tgz_1510185382248_0.5771462575066835"},"directories":{}},"3.3.1650-beta":{"name":"meetup-web-components","version":"3.3.1650-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"3eafb921d0f0acaf4bc4961ad5cbe7a7a4646c74","_id":"meetup-web-components@3.3.1650-beta","_shasum":"dc25e1421e6e5b13902ace3c16aa68dd05c1c6e7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dc25e1421e6e5b13902ace3c16aa68dd05c1c6e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1650-beta.tgz","integrity":"sha512-RH2wGnjbLRzMYIwtKIZ3hfNByFgHmFy08Nku7fHwlH+kw/CsXfNZoP1JZC0M2EGYqY7e1Ojl0pZzTbogZ8Dhtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7rXgBEDi0ZFk9yoFLitxV7/tI6dTR0vQRU0WXTqqbDgIgXYl5hVBgccbP0Thjfdi0lay/bbKzgP9Y2PMu801Wjvg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1650-beta.tgz_1510188932574_0.9513954524882138"},"directories":{}},"3.3.1651-beta":{"name":"meetup-web-components","version":"3.3.1651-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f6392a931aa172041db7fca0a1bab0b0a0f7ff40","_id":"meetup-web-components@3.3.1651-beta","_shasum":"0feaa18286a350a9c7c23bb176e968ad9c0c0343","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0feaa18286a350a9c7c23bb176e968ad9c0c0343","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1651-beta.tgz","integrity":"sha512-6eyrZl33/3O5JQcfuk/8VRxK8K4qLQ7inTaGJkP8HWJcwnMwqud32INuJaxkYLSR1jGrgi91oWurnGWS51rTUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID0y9Bpa+kFZlZ3T3yWJbLEQgCCDN4nNjCDZ9D65eszJAiEAmIAQIS+IKkAz+Dsq986oH2lXghg+qvN5WRNxu6+xwnk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1651-beta.tgz_1510525690026_0.03785237413831055"},"directories":{}},"3.3.1654-beta":{"name":"meetup-web-components","version":"3.3.1654-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282","swarm-animation":"^0.0.95"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.2.0","eslint-loader":"1.9.0","eslint-plugin-react":"7.1.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"070b1446bc7058ce0a87e137e14c6f8db28516d2","_id":"meetup-web-components@3.3.1654-beta","_shasum":"7485f9d42c11c8d3413704515961e611e706f72e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7485f9d42c11c8d3413704515961e611e706f72e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1654-beta.tgz","integrity":"sha512-Hu/yINPmn+8XC0qmYMChsrLToIrbKS/pVoKkc1bGPul6oOawzOgHQU53ZGibLe4A+3VWy6e6GJK05+hBLuVv4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGlqaw217oZqS+xEgcz0lb5C4tG9Bs0e74lZWgudrL7qAiBvcQShsyf8Da7CkgQfnoYYNV+mu0RGjT+4QUNmPAs5kg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1654-beta.tgz_1510602163688_0.8245840084273368"},"directories":{}},"3.3.1658-beta":{"name":"meetup-web-components","version":"3.3.1658-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"50a51f25801a435457e6302deee080320e69fb9b","_id":"meetup-web-components@3.3.1658-beta","_shasum":"f97e4c038850415eafa07c55c566cb118070419a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f97e4c038850415eafa07c55c566cb118070419a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1658-beta.tgz","integrity":"sha512-H3EBWEZNooyTKx1828ywkZX/SrzWZ1KUZBCtdDq9SpbWIwCMJvP28NhMJtyLyHpyyYqtnpRBYsAiqyUNtO+TXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDq0ZjoRdYY4SN3E74aVqP6+tgU/sRIyIlKxuVr8IfKBAiAOnwC/DRrQtycltcEodV+MrPrPnJxn5myudpNbtmMi5g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1658-beta.tgz_1510611945351_0.7817489553708583"},"directories":{}},"3.3.1659":{"name":"meetup-web-components","version":"3.3.1659","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"11a80fdbcc0bc4cf1fa2821e53961862a109676e","_id":"meetup-web-components@3.3.1659","_shasum":"b5a1f85f1993774e9f3b20a307761ec965dd38f9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b5a1f85f1993774e9f3b20a307761ec965dd38f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1659.tgz","integrity":"sha512-Ev3KCuO1tMk9FNIahL/5Sq87uzFN8l95OV0SKnLkh1Dw09VsYm3XO/RvHHb/ZmY5RMbJMHt8nJK8xryYmtVe2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjgbjjSEECH/WBc4oLkMI4CCQVePtfLLK9GN+8eXa5PwIhALeOwAR2VK1Lto7nHV07op4C/GVujaXckv0ZolR5kRJf"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1659.tgz_1510612359590_0.4134097502101213"},"directories":{}},"3.3.1660":{"name":"meetup-web-components","version":"3.3.1660","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"ebf0346e2897eabbaf2968b52bd06c4a8068fde1","_id":"meetup-web-components@3.3.1660","_shasum":"ef0224375ca842cdb880aac2a479c1e1e1b6216a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ef0224375ca842cdb880aac2a479c1e1e1b6216a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1660.tgz","integrity":"sha512-3ITKI6zkmgIuQ+NGuUYc1ms0+N0VjDf+oRaHHjwWI4USq6rS1P/ccZDWMef1x3a8dL7TLCwZVtTe5CumxNzCyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4wezE6AG8Qv5cR6P1auk4Y0EZl6LkPY89HT6u9d2MCgIhAIY7rtJtn//2Ayv7acUV/898nSdRuQXkgWRF4vY2W7YC"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1660.tgz_1510616795241_0.7007194980978966"},"directories":{}},"3.3.1661-beta":{"name":"meetup-web-components","version":"3.3.1661-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"28742e61943f7df46ac05dae4efb9559efb957e4","_id":"meetup-web-components@3.3.1661-beta","_shasum":"e3f53c845eb36e8569b613f92fe7a864bf74481d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e3f53c845eb36e8569b613f92fe7a864bf74481d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1661-beta.tgz","integrity":"sha512-tFwTL8aZRXlSK6NgozMO10VDtbv1QvM6ebDbDW1TvpKhC6tlC2bsGOF/76LPHNh+0wwg9ky0IiQYJkUj9RG+3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBXP5EsmbGSJYy+0B2NTZVVIcoUwELMdczefxvN1CLgzAiABRfXW2TZiSgpOBS1tzGhGjp10VMMbXUriByeoTtW1hw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1661-beta.tgz_1510850909191_0.9438273790292442"},"directories":{}},"3.3.1662-beta":{"name":"meetup-web-components","version":"3.3.1662-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f353a549720b1fffb26f309760eba6ce16ea8fc0","_id":"meetup-web-components@3.3.1662-beta","_shasum":"35b810ce5c573bda5479ae29d1b4559ccf070938","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"35b810ce5c573bda5479ae29d1b4559ccf070938","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1662-beta.tgz","integrity":"sha512-EQicQ63pVkVKQJzlqy5ElAEy+KYjPizlnq7ffPN3RgjfT61Nufqy0Erg1S9MF7/albH75HFt+erLzpgd9nghKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGuMq1XQkIYVIo2rRm49QXCHQCcF8bauCOab7XePb+ElAiEA4LV6gARw8Ok2lgW/MlOgJD+tJEIWTgn3Yj2n7QdVEms="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1662-beta.tgz_1510851533152_0.4576278489548713"},"directories":{}},"3.3.1663":{"name":"meetup-web-components","version":"3.3.1663","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"f08fb93d8670f687e7cb7e52ab133c7446114d96","_id":"meetup-web-components@3.3.1663","_shasum":"d250bee0e083eaf610f1302bb3da9d2026c9a350","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d250bee0e083eaf610f1302bb3da9d2026c9a350","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1663.tgz","integrity":"sha512-VsHMFJ71lIqRy8+UzCcH1e1F/eX+ESeKPB5BMZ1Gqo1Fd/QZBc3Kp+2ibwqJKqFcD0+ec3upqWWQkkqL/m2S4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGNjx26f7Ja26Y7zQbK2AwW2j7sZ+LKC8jIzMfUVSgYLAiEA+veuUTfpjIsDQV+OlfJDSDpmMxht1utP4TsVSrMaT68="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1663.tgz_1510852170464_0.9812748387921602"},"directories":{}},"3.3.1664":{"name":"meetup-web-components","version":"3.3.1664","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"94cc33e1831a16a72b39f89d59fbc49634bd6571","_id":"meetup-web-components@3.3.1664","_shasum":"82a983df9ff949c1529353cbd9e2d388732d8b97","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"82a983df9ff949c1529353cbd9e2d388732d8b97","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1664.tgz","integrity":"sha512-orAb17UmMeH4OiDq4WW1sI4wHIvAhEkVJ8XYXEI/Ai/0ameiEBH5+MWGpGjhJs5OQ1SxFAO3mKI0vAEOBxTxpQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB/1x6Zt3L+UhNIf4m9letGiTrTOvIDYtbPm4uhDQFWdAiEA4PRlRI9xG84EJD3dRX7E8EXYCy/vArrbjuaJMkpsV+8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1664.tgz_1510853610253_0.4310175837017596"},"directories":{}},"3.3.1665-beta":{"name":"meetup-web-components","version":"3.3.1665-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"9396d4b4ea42caa9c514bbd41547f91c2889e28d","_id":"meetup-web-components@3.3.1665-beta","_shasum":"525548e80a04ff8e15bec44d4210dca9bf026d05","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"525548e80a04ff8e15bec44d4210dca9bf026d05","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1665-beta.tgz","integrity":"sha512-mv/1+Gpkuit4sg32zBS4oiMTnS0EPC8fqauUjnvcyxLW7bR9ETFQwkyI23jPf3i7MUHq1NXtWouFUvwIWOwRiw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGO0S2sSrc+fNeBTq6iJAXdAVV95Z9aOXk4nhtruGxsgIgKkeEmLaSImuY1Hbz6KOKnfYv5MQ2UT9B0Nkxg20H4Gc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1665-beta.tgz_1510857511108_0.1632846740540117"},"directories":{}},"3.3.1666-beta":{"name":"meetup-web-components","version":"3.3.1666-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"6eb76ca3988058803bc12b953bcca3bb3f134929","_id":"meetup-web-components@3.3.1666-beta","_shasum":"974311a4cbbaf87a9c46fd453719ed58ad160904","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"974311a4cbbaf87a9c46fd453719ed58ad160904","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1666-beta.tgz","integrity":"sha512-lXGOIWaJr+Wu/NAxaHHb/tbh6P/WJv9XFnLzY/GE/aJCYHhGU3IzKPIq+I2Os/CELHA2Bpfsa+nwWNHgaHW/Cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBJ4nKYthO2zDKWs08eP9tAlIDRKoYBI8D0ze64Y3A8DAiEAgZITa3nZhKuqU6zhceErmYWzMaV2+swf/4kqv1Lo0DI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1666-beta.tgz_1510857954108_0.03349127294495702"},"directories":{}},"3.3.1667":{"name":"meetup-web-components","version":"3.3.1667","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"99f6dbcbb0583af75b772ab010fd9cc7dd9fdbeb","_id":"meetup-web-components@3.3.1667","_shasum":"a54272d79f74576da31b6e36a93fe57561e371ce","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a54272d79f74576da31b6e36a93fe57561e371ce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1667.tgz","integrity":"sha512-YbH80N06Vn+Z/1uCAaqPRu2m5hqo3jQspJO7zzAOxAM6qtw7JPuQmlfQSMT6Qb+T/eQxct0gSKCQ0NPJ2d3MeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCepjvfnOveOkGI4Gy678vGwgCV8TaB1UPTsJI/7S+rYAIhAP952PpUYRx89K/Qm0RqIga5h+xDrq+0dRb4EKi5he1S"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1667.tgz_1510858742780_0.3117113651242107"},"directories":{}},"3.3.1668-beta":{"name":"meetup-web-components","version":"3.3.1668-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.282"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.282","webpack":"2.6.1"},"gitHead":"e95d9c690b64812bb8b0f5a29194c72b52e1455d","_id":"meetup-web-components@3.3.1668-beta","_shasum":"446a8db99b949f6add18bd7f3c7ef3aa995348c5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"446a8db99b949f6add18bd7f3c7ef3aa995348c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1668-beta.tgz","integrity":"sha512-wFBAGUjqVXOGHOzd9vjxgeRiVZLNSyciJoN5VZHuzwz8KVld8MMpqcK1VYJmfos2YYUYmd5TDc1gWhv0RXq06Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCS4H+Vzg12gA0o7ajoFY0mhGDGy1p1asYpj0M8/zAEnAIhAI0C3sCgVN/y1gXtXU/KHX2nNtjuPRKGrE4hSq9upuGr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1668-beta.tgz_1510858799988_0.6401766061317176"},"directories":{}},"3.3.1669":{"name":"meetup-web-components","version":"3.3.1669","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"8553fb9d08a7eafe0f1b015fee1bec9607c189af","_id":"meetup-web-components@3.3.1669","_shasum":"92b829550c9f6cb699a35a2d32ed04c35871053a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"92b829550c9f6cb699a35a2d32ed04c35871053a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1669.tgz","integrity":"sha512-whX5Rf33ogXMnf9Cf2mrfHTh74ODJBPi/1x3+rT+aghN2uehET+Lfkpmp6Hm7o0NgkHHfpm9oEiBDDled2goTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8N7Ka8I1z4ehVBH3LkpWNbNcV7zT9GqD2KiOGJq5DSgIhAJjdQNtV4Meouqq/uM11aIQexTfwUvaxiGNWB0Ne0vwx"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1669.tgz_1510863431941_0.19166470575146377"},"directories":{}},"3.3.1670-beta":{"name":"meetup-web-components","version":"3.3.1670-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"2af0e70c1bb6d480900ad6ff2727080c872772f3","_id":"meetup-web-components@3.3.1670-beta","_shasum":"1ef1ca167c43bb16fcf6f9923bd899265bb400a9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1ef1ca167c43bb16fcf6f9923bd899265bb400a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1670-beta.tgz","integrity":"sha512-BM1Xv1My2mL5Y7ZnTbjMwh5suon9u7GUqSX8iwAQ/EOGxLZBMdaH2jOolH4bsZcVMboAM8YOkHVUMMCFGwFJhw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWiM+hypDYTsTW2YiyaahB6xCPI/xY21NJ7/m79Y1wjAiEA0KCzGfN5udjB5TyIC5WfmuYTscH1QuZftyECcCf636o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1670-beta.tgz_1510871633133_0.9987130884546787"},"directories":{}},"3.3.1671":{"name":"meetup-web-components","version":"3.3.1671","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"7ea59ca5a3cad8b3ea2338887c061d9e84898190","_id":"meetup-web-components@3.3.1671","_shasum":"8a4fe58738a065fd2a2d261d5ec3e6e6d158b7a2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8a4fe58738a065fd2a2d261d5ec3e6e6d158b7a2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1671.tgz","integrity":"sha512-28vjhkv/9hGLtUq6eVb1iDfSu+pxnFmdspwJXGVOXM/oE1UTpstFp1N0ZNI7p3oHB8v5D5z0MRglZR2vCyozBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEtcrtocAIc3kF75xDu9R20hnz0nQI1y83k9evFXrW6gIhAMJhEHtyW5P4+LGtsqIwFUsci78pzb7fF5aMLcGcGf7n"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1671.tgz_1510872966712_0.692628939403221"},"directories":{}},"3.3.1672-beta":{"name":"meetup-web-components","version":"3.3.1672-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"2d6a4f8f5e55577ed569dec9661f0e801ca4946a","_id":"meetup-web-components@3.3.1672-beta","_shasum":"04d477500ee544d84d93778211ddabc190075af2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"04d477500ee544d84d93778211ddabc190075af2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1672-beta.tgz","integrity":"sha512-sJgSEjOD7L0DRyDcwkYsoBqejYmd1JoFEyaRhl4abUpLT5LeXRdMj0zKC7Fe9jmTP99NcPQuLtxWrC6q0siunw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhlKO99sDYAJECa8eiUYtWrIPe4mS/qsRcpsYhxAJsnAIgSdBe4lWfjhtHSeg70mt6TfCiVCKXhgbyOBqSgzo06OA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1672-beta.tgz_1511204194911_0.1673766856547445"},"directories":{}},"3.3.1673":{"name":"meetup-web-components","version":"3.3.1673","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"09d37c286643af28d5da7323d890a5ab54811128","_id":"meetup-web-components@3.3.1673","_shasum":"7ef393109b040e931ae7a2b0882c24e876ce6d3e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7ef393109b040e931ae7a2b0882c24e876ce6d3e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1673.tgz","integrity":"sha512-E86nr3CusMtCBh0yjcQLmFkpdDzdEBbA5PivvrrTPwPO5UsilmmYkeJcWmfVqopO1ETkAbKiY5T6xx7u9zxZHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+ytqgt1bgY8oDJs8t9Wr7nouO3BWX7St1dj2GZ6bwNQIgKsxIUSLp/3IaVF3HHTDRSMBvKFok3R7UpZKBfYC1U2M="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1673.tgz_1511204873906_0.684552398044616"},"directories":{}},"3.3.1674-beta":{"name":"meetup-web-components","version":"3.3.1674-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"a46c35f41b9f7db7b4bce6f320142560717ed5aa","_id":"meetup-web-components@3.3.1674-beta","_shasum":"0b673e5acea9f00d726369adf3f6775870f8dbd5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0b673e5acea9f00d726369adf3f6775870f8dbd5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1674-beta.tgz","integrity":"sha512-yYZY3KoKyE/6HXkeIwAu4dY0wgTFC3oa2UfwZeBg5MOcFDloVQBc5P1b1UFLC4ge7Hlcz+hxKKLAYV+zQ11omQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEVWt/JF820Xa5VlNnnipMhFNYc7ErM24mimAVHNibGVAiBoXa7SwmEfkKqCAjXKia/2sck4xSQiOFBCvykT3NZBMA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1674-beta.tgz_1511285195266_0.7478865419980139"},"directories":{}},"3.3.1675-beta":{"name":"meetup-web-components","version":"3.3.1675-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"f24000ee46c59ae15b1c11f25fcee8af0e963c73","_id":"meetup-web-components@3.3.1675-beta","_shasum":"b6773c9b3081695c58a34d2fbdc27837be9d5347","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b6773c9b3081695c58a34d2fbdc27837be9d5347","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1675-beta.tgz","integrity":"sha512-H/N38QKI8YHMS7U3ZqNiBBLmt6xfx7ell8Bv7aC8Hcwamd3pDhxD7dVNDgRwMw5vBDWiapQok3/xePNohgk9kA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDv56aneEU3w8Ya/lzNRBMkIrZtiBj8i0IWQibsJOcx3QIhAJzCOhn3xid3upqhmMfMPuoVINK3gfOr7pp1QE4AePXz"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1675-beta.tgz_1511285425823_0.7637347721029073"},"directories":{}},"3.3.1676-beta":{"name":"meetup-web-components","version":"3.3.1676-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"25453afaea0c1d283eb8d03f9c0564c2b83cdebd","_id":"meetup-web-components@3.3.1676-beta","_shasum":"c6462269f40be772814e3cbda5df88e7cce0963c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c6462269f40be772814e3cbda5df88e7cce0963c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1676-beta.tgz","integrity":"sha512-Rr6j9Yh4crQoEE2b7UZH1HhV6nZfqvfCTesWcWeOGUeEFigH9PXbEEMS5NumnmIyarLECtWRY8JlSNEj+WCNcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGvP0x3e0i55xyYUbuOHXUYkohMauJHzFiuK9EbHgFYAiEA5md3mkMDVjKozSPgAB6b1WCc/0gnQLaE/Je/sVklArc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1676-beta.tgz_1511286382447_0.6907707760110497"},"directories":{}},"3.3.1679-beta":{"name":"meetup-web-components","version":"3.3.1679-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"65555c8cb90abd7641c7a036fb5fa29af797dce0","_id":"meetup-web-components@3.3.1679-beta","_shasum":"946a30ad2fc2ea46ae052d811a815dffe6d89f2d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"946a30ad2fc2ea46ae052d811a815dffe6d89f2d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1679-beta.tgz","integrity":"sha512-+LcJ3cCq+BCaModCsMC5pqNSvJ9w1ojZ7Y3w4jdC3fCSGbg0FQ/HcSKbVCIPSE42KdAqYaB54CWl0UNGXghT/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxTc1fn2GDAf1K/BC69BhwsOXanbnLHt6Grl7xQwWM9wIgf4K9adQbtrHh1sClcYCvTZ14O7h+3gyzDPN039alRxI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1679-beta.tgz_1511294672072_0.41815748787485063"},"directories":{}},"3.3.1680-beta":{"name":"meetup-web-components","version":"3.3.1680-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"d342d41164f30c0da92852643b17a80fdeee39c5","_id":"meetup-web-components@3.3.1680-beta","_shasum":"1985275d648dca21675ebb3d0b82dd4d29156dfe","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1985275d648dca21675ebb3d0b82dd4d29156dfe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1680-beta.tgz","integrity":"sha512-197zb/n46fVBiSl91CCjh+oNmr53eslhaDBW5zLrRLBeF1StpIXlcYGMGBtzuVMozBGpbtGnRgP1hE5OJ1fu9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARRiu1VN9kHJOnEfvspI5YlHfCPP40mkKgB8X+/Zxd4AiBV4PsvYFbL8kMu+JOXlpFPPGmDWYcEtLhlQrZDaaPOBw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1680-beta.tgz_1511302534711_0.8155351127497852"},"directories":{}},"3.3.1681-beta":{"name":"meetup-web-components","version":"3.3.1681-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"b4538a253b5f738e87ff46fc75bd67ba717da33d","_id":"meetup-web-components@3.3.1681-beta","_shasum":"3255ced09ce9038c09c9ed9fd8a14e8d3cb7f1cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3255ced09ce9038c09c9ed9fd8a14e8d3cb7f1cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1681-beta.tgz","integrity":"sha512-CNQSKc4bfE/Eth1J/JnVWEcqrQB9mOa+SCQ7tSoFSFkhZMz9xZrh4eI6Wmn5o8BVg9BDyrfqnh1Vo0Qx6rZhMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrnB/Iz7PUipRX7Q/KxZ53VHv25I8+qQC+DBGhiA+KrAiEApExEopHZmL8aHQDzuMugptCGwvQUodKDGAyUGR/y+DA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1681-beta.tgz_1511303462658_0.4876696765422821"},"directories":{}},"3.3.1682-beta":{"name":"meetup-web-components","version":"3.3.1682-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"74a72eda4d4cf623ca85ba218107dfd2e59099c5","_id":"meetup-web-components@3.3.1682-beta","_shasum":"78fd5aa3b4f3fd3e83d23005fc56554bccde4ca4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"78fd5aa3b4f3fd3e83d23005fc56554bccde4ca4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1682-beta.tgz","integrity":"sha512-H0CI6Fu6N3A+zYE5ksiLy7cs0GrxCvWrkj3NxeaY7K4zmc8Auz/2FyrlUcz3nr4FHDAaVbsz2XMtYKqg1H5aXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA/4aIBkHcm7KVl1wX+d1+8pvYxCkW+3GZzglaTKGAkJAiBS+bmpvQHlGbUGQdWqlsrwmZ4J7TSxWKRnIRx1w0MBSw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1682-beta.tgz_1511369937823_0.5787673075683415"},"directories":{}},"3.3.1683-beta":{"name":"meetup-web-components","version":"3.3.1683-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"83d226f55fd8b76094a5ab83a2677d661d6742ff","_id":"meetup-web-components@3.3.1683-beta","_shasum":"d8aaba4d52b69c292ade12073a136635109f6c98","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d8aaba4d52b69c292ade12073a136635109f6c98","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1683-beta.tgz","integrity":"sha512-wSxegDFaTfD2kQt9u2QhDg59IbKW5TDzVjrVKcy0ppkzL6B2rqQut9LupkmpJYHG6CcQxvPzobny0UMj8NWu+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/7Cd5dWXhYu923LldR9uVihzPVdrj0GzMpNJV8vnVjAiB5oN7fRw98FepCrE6KFG/OCYNtF3Vc/XUOwuejSWnFcw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1683-beta.tgz_1511793813269_0.3188754222355783"},"directories":{}},"3.3.1684":{"name":"meetup-web-components","version":"3.3.1684","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.13","@storybook/addon-knobs":"3.2.13","@storybook/addon-notes":"3.2.13","@storybook/addons":"3.2.13","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c111bf4e203ab18447d5861104c5680918e682eb","_id":"meetup-web-components@3.3.1684","_shasum":"5da0767af3176d043247550d33d7d4e1589174fd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5da0767af3176d043247550d33d7d4e1589174fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1684.tgz","integrity":"sha512-QAN6TnQzgQ9g6lfK5TqNWOuw37RXd7015CbzYKqpqkXnZKJg2L4ssW3O4DEtH3DvRPXvg+rPvrlPxb23vnQCOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAX3plxogXvLEDz7zK+Yw98hV2cRzGDylN3kl1mjc8/pAiANRkm3bHIRbgy7qgpqxc4ebTy+hMfZocpxGOE4ulwxrw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1684.tgz_1511797754214_0.6434747730381787"},"directories":{}},"3.3.1685":{"name":"meetup-web-components","version":"3.3.1685","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"4b8b3a69d612b4b44e715a2fc9d8c72902e7235d","_id":"meetup-web-components@3.3.1685","_shasum":"cf8c74a2691a761dd83746684c4cb58bf8c13935","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cf8c74a2691a761dd83746684c4cb58bf8c13935","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1685.tgz","integrity":"sha512-G5s72ltMDYq5KRAGdmGjqfeX167G/snTxllPzL9YoMVZcB7bKzmajR87pIvbNzZr6PWYdCd7ObywZ345FfpHNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv+77RhHsSfbN35uDSkbfrkfoVwTFIwwL6h8E+sEYhEQIhAOMgDCqNPRbgdonusR9kSqSXU/rBZl7WAfXyaL7di4CT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1685.tgz_1511797838522_0.15964834857732058"},"directories":{}},"3.3.1686":{"name":"meetup-web-components","version":"3.3.1686","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"426ce5093e03adf3f38a6939d2ab6fec83df757a","_id":"meetup-web-components@3.3.1686","_shasum":"c0efb22d6c88e81c1e3af5d1b585a745f8ce1eaf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c0efb22d6c88e81c1e3af5d1b585a745f8ce1eaf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1686.tgz","integrity":"sha512-S4wxJULppnQZSAh8fkI8/3lvDYoqv8Ho3fydGGEZuoDQgpGHeRLIn9oJo5WYGick4zInmoWzQM1j2IJ1ZqjIXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3B9/d79SU7LtG3F0V7S/pGd7N0Ai9JlwwU5AKgjEmsAiEAsuPA6qw0iBh64hwPknAZePRyBF6QWpOWL8br7cAB5LE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1686.tgz_1511797880391_0.49326273682527244"},"directories":{}},"3.3.1687":{"name":"meetup-web-components","version":"3.3.1687","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"e8bd3278e1bd505780133abf78d29540b24e3dc4","_id":"meetup-web-components@3.3.1687","_shasum":"e8d95303e5dde1c25098caf78909953ffe50e6fb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e8d95303e5dde1c25098caf78909953ffe50e6fb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1687.tgz","integrity":"sha512-q8BuORu8TShrldpDjUFvJTFEgZU/pmwXjdTuYntPWk0sRE2r6ubmyWYrw8JpLmLwHQ+yroG7JGvnzOXdurW0VQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTk6A0jjUHweZSai/SC0bNprdpAkLzDXn+BggnazFNygIhAPKmEnJ8t97PvGpYOaaDv2XNWZDIO0V5s9Wfyiuohm5y"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1687.tgz_1511803498746_0.16476883715949953"},"directories":{}},"3.3.1688-beta":{"name":"meetup-web-components","version":"3.3.1688-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"55c05b003bc355dd554d3e300ba513a468005981","_id":"meetup-web-components@3.3.1688-beta","_shasum":"b11a41846a3cf684200e22f1b095b9fd486a1cbf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b11a41846a3cf684200e22f1b095b9fd486a1cbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1688-beta.tgz","integrity":"sha512-GdD4FDCDDfqEQkCBhlFatht8oybKqlH7zQwikL+LiGrmpzT1ORCmfQJSd5ZqrGvpyJy02NcsWXSJeMUd7N9Lrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRYlh1K8Hig22u+4b29SP1SJ9OWKmID+mM0abwuMQxNQIgT++ASXIdDltbZ/3magoHp2DZlJdysynoqasr7/sJKrs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1688-beta.tgz_1511892519017_0.37447899859398603"},"directories":{}},"3.3.1689-beta":{"name":"meetup-web-components","version":"3.3.1689-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c847a604ee1fbf1a9872eed74a3db9e71089953f","_id":"meetup-web-components@3.3.1689-beta","_shasum":"b020b9e4774622213c3371419f537a5b92027f53","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b020b9e4774622213c3371419f537a5b92027f53","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1689-beta.tgz","integrity":"sha512-P/+IEt5xBJovVFaA5W0S8gwSziXOYivhrpjGxC3oAv1qZnb2Mb2klKpP7Pm6CqSBhHgiCGTMaIdamWqtSVOIvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkHB1G4R6EfKhCbScM500zLg0tpRp55vhzlCfs/lHzogIhALiwbFoDh4E/RO8kjIZihbigsDXn64gal9nrbm0Rzc1S"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1689-beta.tgz_1512402834726_0.530172314029187"},"directories":{}},"3.3.1690-beta":{"name":"meetup-web-components","version":"3.3.1690-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"d91c9a54818c8d8d0019544d209b6d7def1b23a9","_id":"meetup-web-components@3.3.1690-beta","_shasum":"4206095531258fc2d144d31e71f894f51ffe4458","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4206095531258fc2d144d31e71f894f51ffe4458","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1690-beta.tgz","integrity":"sha512-AIYeb7zH+a1l2IgJ9FKjrCSbXEnl0HCaIXniJRchCWjukXTUHB8m5qqEQgPfYhqNFuHqM5mvaMRQvJpY2fO3mw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG41XHS/Ur8AOPhCSa/cmiWbY90W1YNU6VNdU/sQM03AIhAPxYeuKoBgpQFT6iHBBAcnWb19VZDq4pyMPoCxWA0FZd"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1690-beta.tgz_1512415604548_0.4113926040008664"},"directories":{}},"3.3.1691-beta":{"name":"meetup-web-components","version":"3.3.1691-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"497a92a2e4f13e4794be5f4df91141f8a4adedb5","_id":"meetup-web-components@3.3.1691-beta","_shasum":"6fc1d3a379046aa11206389eb13dac88cd7a59cc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6fc1d3a379046aa11206389eb13dac88cd7a59cc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1691-beta.tgz","integrity":"sha512-P1IXJvvNTAKOfu1+AxIRRkBK6iUfe4v8R7fWKE0iyO7YFNiGn0cPhsxAyQPszmVKjj3pjh847PWHkRcjwcduDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1FZ4XoUAzcdMJ2sgz4Kw9UKcVBddSB/t9ebopQunrsAiBe5DAuE9BLKSLihKUkGCaeM9JRvHDzpQVaatLjjh0+1g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1691-beta.tgz_1512415790009_0.38114539929665625"},"directories":{}},"3.3.1692-beta":{"name":"meetup-web-components","version":"3.3.1692-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"d6beaf5d9cbaf17f2c6b9050128d9b02dab8bee1","_id":"meetup-web-components@3.3.1692-beta","_shasum":"c16158f1a0a883eb6d9225ee68e825f99364d114","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c16158f1a0a883eb6d9225ee68e825f99364d114","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1692-beta.tgz","integrity":"sha512-/btGVXmOSuNRxSzHcCzUxpGSHyEHN9tgXWJCXgkHwNTOHHoAdzZAelcHyvXaJwQ04u1BoyfQ6dR3z10MZOr6Zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLc/cVyXRotBc/IZRBDGnuEuuN0rOBe2fJgMM3jRK9fQIhAKwTOCra9/GnD7DJYojSYX2eMp1xZW5LqsQHZX7Qp01H"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1692-beta.tgz_1512418811160_0.05176341533660889"},"directories":{}},"3.3.1693-beta":{"name":"meetup-web-components","version":"3.3.1693-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"412a75bec7a8733d1cd2df468d37036099f6645c","_id":"meetup-web-components@3.3.1693-beta","_shasum":"050d1708008f28efad5e9b77e7366ef578e87572","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"050d1708008f28efad5e9b77e7366ef578e87572","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1693-beta.tgz","integrity":"sha512-hilI7Cz2fBd+viJBMngFxYwDi7EG7l5aHPQ5HZlDa7cXtHdQQ7DHLdQmBhByPDgkEEnzD/6bMsH1RQ9tPrB3KA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrqyQG6/YSh8X5C100WFHJePL8LHSpxUMOa8zViPokKAIhAI0ivUnXzsZB1J5UA083AynoN9bAOi3MviUp77PG30Xr"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1693-beta.tgz_1512430165959_0.24096097936853766"},"directories":{}},"3.3.1694":{"name":"meetup-web-components","version":"3.3.1694","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@kadira/react-storybook-addon-info":"3.4.0","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"002d7f07311e8d0f9e5058bce66652624a416817","_id":"meetup-web-components@3.3.1694","_shasum":"f1f4f9f78df38f81cbfb25782b58263ef4d35b0e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f1f4f9f78df38f81cbfb25782b58263ef4d35b0e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1694.tgz","integrity":"sha512-wFrdZHSnOg9dbpEHyumjkDZl1G45bJ/DcWBtpsHDBPaCUSgGIZbN1xTEZfZeW0h6GTCLJDWvHn1fjunH7gKzRg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmHV3296C83zQtifxteSocDZQZnK0oMt/liX17iRP1QAiBW+t+jyFnVjoN6bapCrV48Nohj1ZRIK6AbQQqz42sRRw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1694.tgz_1512483819872_0.007022215751931071"},"directories":{}},"3.3.1695":{"name":"meetup-web-components","version":"3.3.1695","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"788350895746c04ad810844b0b2b7bda3f7f37d0","_id":"meetup-web-components@3.3.1695","_shasum":"56e312991b34d04378291ac7ebe59f082647c043","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"56e312991b34d04378291ac7ebe59f082647c043","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1695.tgz","integrity":"sha512-BffNZ/Gh+Gm3P/btzzVMXAoQ3pujSsvXeWX+rNDA8tG2MIIwzoIqUmlR34lFJfQaOJbFB6bCzgI3FtCF4dzI/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSvtwAjerpbTf8FbUGx9bHEs6ImctfB+0jBGSpUp3eEAiAA8hHUHPCgFU1q4IgSpK43tAbdjdRYi/mQc5pL4Hnbgg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1695.tgz_1512483912263_0.8061033338308334"},"directories":{}},"3.3.1697-beta":{"name":"meetup-web-components","version":"3.3.1697-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"31e5feef69de682c44b73e9f181dfdd5de6bf16a","_id":"meetup-web-components@3.3.1697-beta","_shasum":"5831179877f190c48c024e1f31fc1f90145ec8eb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5831179877f190c48c024e1f31fc1f90145ec8eb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1697-beta.tgz","integrity":"sha512-HSIzyI7sdVtfGSWg7+jd89ICIOqrS3BI5uU9bVgJzXDJvqh6XvREV+ZhoZQmCJKVXHJBkMeagel7Vr7oBBeSrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCSCR7wpBjiNkHI9GpcRBz0Nm2vTfcx4BVfzXIsandigIhAMpmqdDkNla8BKjeGwYW7ScxYfeDsv0RBG1al9A1LbYo"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1697-beta.tgz_1512492812233_0.12617642944678664"},"directories":{}},"3.3.1698-beta":{"name":"meetup-web-components","version":"3.3.1698-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"da7464216c08d973853a502f91062705f7afca68","_id":"meetup-web-components@3.3.1698-beta","_shasum":"f2b6765fcac032997d7fdd202bada09347a3307e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f2b6765fcac032997d7fdd202bada09347a3307e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1698-beta.tgz","integrity":"sha512-wU+l/dr2OnuMED2wArnVhVK7VJfMxX1Qvp+9F2Mdc+a4xrSqUqWXAczRHxmarNAjYzCAg4hxYRWCDChy7XWqsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAzzK41yO7uscSPE6hgglKebm3Xm/edSlzzP9hbjNNu5AiEAv6iFURlN50+66SxC89gfq1dmDdtnc9XJOPw6mw5cFZg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1698-beta.tgz_1512493315103_0.9925438452046365"},"directories":{}},"3.3.1699":{"name":"meetup-web-components","version":"3.3.1699","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"7ce1a7dcebc7a1ec601e52ec82a26b2c7d44a39d","_id":"meetup-web-components@3.3.1699","_shasum":"ede12b24e8ba258e788ecacbeb3912845c38bb8a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ede12b24e8ba258e788ecacbeb3912845c38bb8a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1699.tgz","integrity":"sha512-dNMiIFdbaQo/HrVIon9j9WF/S9qc2Te7rzKsvCOON4SRJ9y6PIt92WWakF5rpoPQHcHCNfdNitTb3TsuWnd50g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzglZjRznpEv/hvtLP+O0/bRtwAg+XzoVVY5fWbapazQIgQFNA0KHvBK29bE2sitEXhDUeDlxneyyNs3vZerzdnxs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1699.tgz_1512502465475_0.2829791547264904"},"directories":{}},"3.3.1700":{"name":"meetup-web-components","version":"3.3.1700","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"85768b94f1ffe68dfac8d8fc0ee1dcc16bd82119","_id":"meetup-web-components@3.3.1700","_shasum":"3fc56110a01944be1fc74c19482909861abde874","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3fc56110a01944be1fc74c19482909861abde874","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1700.tgz","integrity":"sha512-MGnkGfSiQOtOHg1TmB2EZQv745K8KKIU6iLz1av2x7JVncs5kg7UR5cfksIM8g7KRYZkE2vqoJhYQARVJQGEFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNjyyhRHxu0BLkNmNTRyH9lYTEs2JOEPi3ebYnyowiZQIhAOUgR9V/rjmose9k90vs8Szn+uC4n36P+q6lVST2jNBl"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1700.tgz_1512502472692_0.6280811971519142"},"directories":{}},"3.3.1702-beta":{"name":"meetup-web-components","version":"3.3.1702-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"f0fed2eafc265c0de5a9c0b0fccb30aeb9af699f","_id":"meetup-web-components@3.3.1702-beta","_shasum":"3cb98b77e246a20a04332ab13fee95dea03f4f1b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3cb98b77e246a20a04332ab13fee95dea03f4f1b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1702-beta.tgz","integrity":"sha512-tx1etPy9PFgx71r4ZbEvnv/YYK/xu9U6E7b1a7ouccjVW2sWZ3I4bQAHdQFdCwLO7OlGAFAn/Hqn6uTRYFoWQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDyTnE8m4K3x59T6Kfv1eOObf/Y7BnOneXtj7OHMC/dbAiEAmIZz8hAbD2MB39y569QBX47OUO1tY80KAJLPMOGKvKs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1702-beta.tgz_1512598805560_0.3569677828345448"},"directories":{}},"3.3.1703-beta":{"name":"meetup-web-components","version":"3.3.1703-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"03bfe4bb6407d43a4b87fc92d02ee9698e993b33","_id":"meetup-web-components@3.3.1703-beta","_shasum":"242f74b35b85261a0f8b7a858fad2c7da62aa176","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"242f74b35b85261a0f8b7a858fad2c7da62aa176","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1703-beta.tgz","integrity":"sha512-R1+Ek1QMsEjsDmhAu0kUnxYhRjwNsYXrcPasGVFsC75otkq/2M1XcYaSCUHEfTrBtyrFXmcjiiiAewDZkH45HQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4LFi4YD6rQFN2QZqmQcc4/qzU7xbjQxZB5kNJFlgrNgIhAMiDHrL26jD972ssF+FyHsPElHDvmfZWQV90BYkMZ06m"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1703-beta.tgz_1512661019361_0.3365840141195804"},"directories":{}},"3.3.1704-beta":{"name":"meetup-web-components","version":"3.3.1704-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"e63d0d055a2a5e8aec7501ff095d3d520cb71724","_id":"meetup-web-components@3.3.1704-beta","_shasum":"0eaf5913962f5218fd1f2021596c430032ba0029","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0eaf5913962f5218fd1f2021596c430032ba0029","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1704-beta.tgz","integrity":"sha512-n6OK/2gtljZqSeYvZ0E6pnMWK04beP0b5QZPB3hdf0g5GAfBPzFEoHo9IQEH376cCAasth/KWs8VDuNtVcz8Sg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCjeTbASbC+N8V4FLskhDc/IN15jFE8baVDCYL/y6wQjwIfRGhl9smUcg/gQyt1sUqe90x51RPbCu+nBAmugoHIFA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1704-beta.tgz_1512676693211_0.19625106104649603"},"directories":{}},"3.3.1705-beta":{"name":"meetup-web-components","version":"3.3.1705-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"0c08d59df59eff171735d24d35bbc813d44cc70d","_id":"meetup-web-components@3.3.1705-beta","_shasum":"99cca6c5dbb3be8c7dae0cb46278b85885560063","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"99cca6c5dbb3be8c7dae0cb46278b85885560063","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1705-beta.tgz","integrity":"sha512-+quvpIp2fdlsC7RcZ5PEKL57/2IEYendmKzYAnGcZQBoDZu9xzkaKZdfHgcnUiaxxYhoEa1++tnog40MRlXRCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzf8f3D3cB9cmJeAus4tJSEQFoqDTMh/QDHs1Y64RdgAiBHB31V49CXmn6m2+nAf7pLNdhZ/HRTGKf33u4uyvKNlg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1705-beta.tgz_1512680118525_0.9644514354877174"},"directories":{}},"3.3.1706-beta":{"name":"meetup-web-components","version":"3.3.1706-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"5133049739755267212c4adaf48fb678c12c12d6","_id":"meetup-web-components@3.3.1706-beta","_shasum":"3b567253928e90809c5134ba5205189d2675ab7b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3b567253928e90809c5134ba5205189d2675ab7b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1706-beta.tgz","integrity":"sha512-gvlqkNxfSVy2VMy21ixNI/4FQgnHbj+/CBp2HEpTmALbk25q88i7CFBfUZ2xqOtqKF3541CC2eBmlJEeoNJQ3Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvTrwS/alspbo7XaQk9PRMf41KSFfmjlRaEVt82YJeXAIhALGvGKzRNHkMajE5F+z7jtNCwBWPqocewMXamGerup1I"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1706-beta.tgz_1512681925091_0.3780540379229933"},"directories":{}},"3.4.1707-beta":{"name":"meetup-web-components","version":"3.4.1707-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"624d10287df4cdb3f5ad0bae06a6526238fb5bd0","_id":"meetup-web-components@3.4.1707-beta","_shasum":"60988b0f7a0e977fae556d0107c4d191f76311d6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"60988b0f7a0e977fae556d0107c4d191f76311d6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1707-beta.tgz","integrity":"sha512-WFwBAqQ6JtZ1SN12v9uimtdsCc1Qw1xKFCoZnCVrMWLr18VaKejkGLYfV39qzf/EJBNpOhep79PHATn6kuE6OA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwFJA13d6CmxSVrq9KxJFK2ZlBQvM8lWikm7WepSW5mAiEAnkJUsCb0GTH/kCZ/mlbDpo2nAwn/IIfTtbJGMBOu104="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1707-beta.tgz_1512682809255_0.2612542901188135"},"directories":{}},"3.3.1708":{"name":"meetup-web-components","version":"3.3.1708","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"fc252c8ec34058aa91367415c8461d54e9376a2d","_id":"meetup-web-components@3.3.1708","_shasum":"060a2fee920d9751993a809eeb948a8c56ecf1c1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"060a2fee920d9751993a809eeb948a8c56ecf1c1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1708.tgz","integrity":"sha512-kFVaekG9nOfxeBNyffW7F18hR85lm75ne5Jvwh8ul8C0OEA3Fw5kglQy6QbC4IADKur/79HOet+S6e2zPdC4tQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDOC9rHb7+5CyvtpRiq1Hxtd8FeP5n5mYhc5R3VPr9mlAiBkozbx4Rh/81P7aH7l2jlNLtS7cSbWuJ5oi6UOEpkelw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1708.tgz_1512687015677_0.5932893997523934"},"directories":{}},"3.3.1709-beta":{"name":"meetup-web-components","version":"3.3.1709-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"68458efd774db464581739d0c641e743c43e8da4","_id":"meetup-web-components@3.3.1709-beta","_shasum":"a7a86891b4a1d0eba4eb885def3aaf0496a4b296","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a7a86891b4a1d0eba4eb885def3aaf0496a4b296","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1709-beta.tgz","integrity":"sha512-x4MNiAECPwZ5JQ9RBpKr51bVZahuJzQ8EazsxdumthjgROx+9CCn7FQNC5jMPYzLH4XHrTnS4UzmWx9N+9ui2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIESto9/hWY91td0CijaQ3rmJoGsWbI3/W4VKeGsQUih/AiEAnQ1olMbiTESEdamPDLR98kehbIMW8ZHW8Ome6JFEjQU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1709-beta.tgz_1512694041886_0.12078612437471747"},"directories":{}},"3.3.1710":{"name":"meetup-web-components","version":"3.3.1710","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","base64-image-loader":"1.2.0","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.194","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"23fd205a76a2d01fe4d6f6f67cfc61addaea9a4f","_id":"meetup-web-components@3.3.1710","_shasum":"027eca8c370c5e80b6906bd13cbb004f6f421169","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"027eca8c370c5e80b6906bd13cbb004f6f421169","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1710.tgz","integrity":"sha512-fT1okUuAbxTC9rQKwsRK4gw4vGIItK5kIR28OLIgdVRdHkaKYsYudiL9xSmoy448rbRrjqY05jjRDTTRWVloCg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhNPQZDdSUfxrIm71nDC4Sdr6pz3G8xl0uuolGEQ0mWgIhAKs7WuD15TnSsmZYLXgcsqq2pysa9pErA00XHC5bL/hc"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1710.tgz_1512765986942_0.29621009691618383"},"directories":{}},"3.3.1711":{"name":"meetup-web-components","version":"3.3.1711","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"14d52a4e3fe11c532d07c0719868efda673d0830","_id":"meetup-web-components@3.3.1711","_shasum":"965608221e476e6fe81169529f69c092c8caeb2d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"965608221e476e6fe81169529f69c092c8caeb2d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1711.tgz","integrity":"sha512-z+lpVvTCp611CKAOQ2pNWWNRtK5WtOdc3u8705XiWI+uehVdXg0B3S/HDzHYLrCDGAc0/zxVsmrFG3e922y5mA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFFAdzvBw/tnAU0iHpayi74ilHpWkYcqy9qVBeLpRXazAiEAp9fLq00+gDZ6zH49011QC0/RmNI2i9DaADDg1hJe7E4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1711.tgz_1513021778446_0.9739019612316042"},"directories":{}},"3.4.1712-beta":{"name":"meetup-web-components","version":"3.4.1712-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"f84af88c06a318e0812c45e09ad5ac1e050523f2","_id":"meetup-web-components@3.4.1712-beta","_shasum":"9b436d00bd87c3d0d032f16022fc15aeac3e17ca","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9b436d00bd87c3d0d032f16022fc15aeac3e17ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1712-beta.tgz","integrity":"sha512-Bfx2stIepGMSBCfQV/g9BGVz4MbKh214uIjrzsqvjkDGJbIumTu/5s9AkqgDNwNmx7slBjXnXeNfwEhPBxJtGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDdH/wpri6H7IPV6C6Cs0ocfURwioPJuhDXCgZKoHf6JAiBxXuFcyqp3luo/d/sS1QqsfBdmvkMC1iVVbj1bKK7LBw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1712-beta.tgz_1513025837739_0.8857010409701616"},"directories":{}},"3.3.1713-beta":{"name":"meetup-web-components","version":"3.3.1713-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"4589d8c542195aa7f64ba10f12714907f1ab158f","_id":"meetup-web-components@3.3.1713-beta","_shasum":"72c8904e4fadc495e57ce0f2435e8dd7187879c6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"72c8904e4fadc495e57ce0f2435e8dd7187879c6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1713-beta.tgz","integrity":"sha512-q77GYwzFnpxjcY5N+C+Xiz8z0YqGWvy7TzZ+RysW6OFqwtVEOfoYTKUc2BEJW/PDJD4C0qBwd7byESga7QqcMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDz7+cQ2+3HslDQUDg7rcMtlAIozgADkAJbP5mUR60tegIgDrivu1I0QTwTgpt5lC09HgCAPw2aGgfQO3JanWIXhK0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1713-beta.tgz_1513026861385_0.11945073190145195"},"directories":{}},"3.4.1714-beta":{"name":"meetup-web-components","version":"3.4.1714-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"ef5e5a76fa9f048af69a596105f8b7518b0cb463","_id":"meetup-web-components@3.4.1714-beta","_shasum":"5b0fbcee86cd567e530a97467e6c679d00496673","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5b0fbcee86cd567e530a97467e6c679d00496673","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1714-beta.tgz","integrity":"sha512-8FNJ6n/Qxcxqxh1vYG4QG60NCSpcVnGel9wvvenmAWnVvcYKaZm3vUERT4sGNvzX9irx/gKb7JrHhlGoTjXpfA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHPhXazjUHO1ibYLIZU3Zq5YsyHlb767L7Uf8FchnADyAiEA6PBvuu8RQyuPbVtwsoz1S69p08lzv2PMN099hsQspEM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1714-beta.tgz_1513027422527_0.9712751200422645"},"directories":{}},"3.3.1716-beta":{"name":"meetup-web-components","version":"3.3.1716-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"21aed01c4f9303dad5e872f6ca743a2a7893741e","_id":"meetup-web-components@3.3.1716-beta","_shasum":"7b623c9f34bfb5a910809ba8c22302ab75c20c87","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7b623c9f34bfb5a910809ba8c22302ab75c20c87","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1716-beta.tgz","integrity":"sha512-47hn8Yqb1uUXWuyRI5tOmubPvx0HrGQFXXL+Njo5NlEv247GLde89go+pRq6W59Xm2F5HdiCln7yGJkyBdjEbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/jTWqNepoi4Ff3jvMcJkDZAW9CG2F13hpCCWY5W9jlgIgW2jSF8CIO4gjXhQAWhpFWMA6BwG1wsY2kLEacEd6W2k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1716-beta.tgz_1513089577969_0.11691727675497532"},"directories":{}},"3.3.1717":{"name":"meetup-web-components","version":"3.3.1717","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"fca7c365daa83e197528f38459baa32252663b68","_id":"meetup-web-components@3.3.1717","_shasum":"172eb2b521c8a3a1ad9410dea149b94e0b7b8553","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"172eb2b521c8a3a1ad9410dea149b94e0b7b8553","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1717.tgz","integrity":"sha512-TCuL/TeTdERSb5fEMTszIuX/0rrSZxHwUofSN1yBYFda+h5q1eWxMQ5mrt2+tcT+lOzVAUBaBOiCLcorE0wZbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8fV2YvPiDzTXSqS3WWto0WxzsR7ps4RIewlS3qdDFOwIgAbBNNhL1GkWCvFLbwnrcW8nha4WkNdlhRvcdyqv3oV4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1717.tgz_1513092313855_0.7009894440416247"},"directories":{}},"3.4.1718-beta":{"name":"meetup-web-components","version":"3.4.1718-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"48221d61f093947c49a425e72f4661913c24493b","_id":"meetup-web-components@3.4.1718-beta","_shasum":"0ed0f276039e0ca9005d4ed0c70808887f511f79","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0ed0f276039e0ca9005d4ed0c70808887f511f79","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1718-beta.tgz","integrity":"sha512-sIbhVpQDKI+bJiJtw1L07g7VcnurEwott+Wbm1aotSE4zQgbraHEV+pT2+FygTuyg2FAXKke6RX3dIyMK9QpDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHrxH8TvV+O7XHAkN94+LiFCgjrLDkDviF2f/5AZPfQAIgOQ/q7xYwcZ1x75bjopOJmi6WI1twvmlusR9OnpRpqg8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1718-beta.tgz_1513092567102_0.6586387250572443"},"directories":{}},"3.4.1719-beta":{"name":"meetup-web-components","version":"3.4.1719-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"88aa62fddb0eebf35a0c0876993b0a89c3c45f7f","_id":"meetup-web-components@3.4.1719-beta","_shasum":"334e603482fd982b8a280fb8e7e6f70a804575aa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"334e603482fd982b8a280fb8e7e6f70a804575aa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1719-beta.tgz","integrity":"sha512-axP2YT8fGvR5gtP/WnL4b4WAQQ1QEreEU2eoAbxS/EoMCZWMM7UkQC9Nt5W6ebHBaQ2Z5uaUaml5QXcfk9yWFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDpAAzQyrPI8Di08cWZyxLKBtj4l/bPbkTSM7vh8ApA7AiAmOM1tbr4kM1Z/L4/r9rxlNcuAafNlMMt7N5OM7e/Ztg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1719-beta.tgz_1513092618945_0.8136572786606848"},"directories":{}},"3.4.1720-beta":{"name":"meetup-web-components","version":"3.4.1720-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"73eda6f35232f11758b577cccb4326def367c96b","_id":"meetup-web-components@3.4.1720-beta","_shasum":"cfc8c1dcdf02bf9f03bf8075ecb177e9f0a362f9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cfc8c1dcdf02bf9f03bf8075ecb177e9f0a362f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1720-beta.tgz","integrity":"sha512-YaEWEGiLBnIMRWeDdyCtmwjRdBhrl/PRmJfVPx0GFiWyBGWplm2+FBdTryXD7nmdCiSABaghvUdmCy9kfW1vaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLduU37ebiYMdET6lqUwcH2KkAQvp8X/VYKrmzoelFGQIhAKNZckZJETJpcO2q74IiIGPxyuw5632Ghei1CbbRsf7u"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1720-beta.tgz_1513092906540_0.6935932447668165"},"directories":{}},"3.3.1721-beta":{"name":"meetup-web-components","version":"3.3.1721-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c394593523facb84bcc4616e45d5f7dbda3daf7a","_id":"meetup-web-components@3.3.1721-beta","_shasum":"ae029fb5c4ad0446b79f88ce66de2a7d6d8aa49e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ae029fb5c4ad0446b79f88ce66de2a7d6d8aa49e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1721-beta.tgz","integrity":"sha512-J3ut9Aq+K0t8mzksuJUJo1RkvAZr6rf0ZQSH4KFhVlGHaTDj5YzPCzMLgp2FpWLzjnXcvxf2TKVgeYp8m8VJdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyrs5Rt0Wi+bKBiQLczGddC+gU2d8AAPkJgDYzxunROQIgRc0mijR5/zEWahOfTUI0ySehW2gvqufVTMoJVegsedc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1721-beta.tgz_1513095122869_0.9421626559924334"},"directories":{}},"3.3.1726-beta":{"name":"meetup-web-components","version":"3.3.1726-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"55d7e4169c1f6a98d6173b49b03b2256d682e148","_id":"meetup-web-components@3.3.1726-beta","_shasum":"b2c55f348cbcb7f5404588a013bee229384f7b72","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b2c55f348cbcb7f5404588a013bee229384f7b72","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1726-beta.tgz","integrity":"sha512-gKhYHtB61afhbLzeM+vANDbH7293FLVLFFVJqiOBAnZAn5c2gLE49AaVBm5cOvwoBarGGM/HkcJFEerPdDcv5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhLMlYBd1nMh+O7q+BuaqYlGO+S8VI0NOuy8NkVZmaBAIgOHbKSuAuXELWuQoquDuF8lwsAWvvs85Uqs8PyOklw90="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1726-beta.tgz_1513115675118_0.8016137857921422"},"directories":{}},"3.3.1729-beta":{"name":"meetup-web-components","version":"3.3.1729-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"204f8090c2f21cc4c8de10f6629f119a43bc576d","_id":"meetup-web-components@3.3.1729-beta","_shasum":"ad435157caa0bd24ba18084173035fa48ecc5237","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ad435157caa0bd24ba18084173035fa48ecc5237","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1729-beta.tgz","integrity":"sha512-H58HFu3aUEPSjyGpYKcq4DOmHRNljduhO34CyCGEjdJAuprjBzguf17HsvHNpQ/nykkHjJodXGCOLUi11JO6Jg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYnOVrwqhKR5icQbAbyegfguXPNj+bxoXS68eFQqOnWgIhAI2Um5jehNyVD9/d4f6Wr9aVtU9ktDOb9yLFEnOWchv3"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1729-beta.tgz_1513119180171_0.022936606546863914"},"directories":{}},"3.3.1730":{"name":"meetup-web-components","version":"3.3.1730","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"f560d0a5f52515e55fc0d10ebc0da7904a1c94f9","_id":"meetup-web-components@3.3.1730","_shasum":"fe8f280d16748d0f47f3f5be1839ad70ab58dd73","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fe8f280d16748d0f47f3f5be1839ad70ab58dd73","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1730.tgz","integrity":"sha512-tkVC9ABdSHyFy2NHnnp1QnFqLEGOXe5xOqiTzeqZf2zF/nxAZdVXx6TBU385BRvdgwVMYY7mRQtSDVLgjNFr1w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwtoNb92BWbLpuX+orFEVES+Vuo+abUwXFbyQVCvmlgAiEA5k/VDpjKfsfgZHWDhelw+ckJNRNnyXTEAU4m0kZ9byY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1730.tgz_1513119516916_0.49548472999595106"},"directories":{}},"3.3.1731-beta":{"name":"meetup-web-components","version":"3.3.1731-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"04b7a7f438930c8cc53b23ec5c551d76d040f34c","_id":"meetup-web-components@3.3.1731-beta","_shasum":"cd398dd349ea3eb709f8864ac149ad09d503abc8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cd398dd349ea3eb709f8864ac149ad09d503abc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1731-beta.tgz","integrity":"sha512-p5gtCsYv6m9WQ6+2323K2l21Uxn+TIfw1FlnhesOzD4Jf+rH+icCz1a1UuBuSeHXYulOKOrTIVztp8yjjcUbxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+sXRSqDHx9JnTZusOtm8wHwP54tHKXxZh8MLi2bYkUAiBoJZjmfcgj4Q5V7ZTfEJSr45AlpwBGmyEx/J56/NjMng=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1731-beta.tgz_1513120062038_0.9317307700403035"},"directories":{}},"3.3.1732":{"name":"meetup-web-components","version":"3.3.1732","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"fb3e996ee4496b386bae6261684964cde5e84aeb","_id":"meetup-web-components@3.3.1732","_shasum":"4a089b7778353b42325d553ed1849fd9ec17edd0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4a089b7778353b42325d553ed1849fd9ec17edd0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1732.tgz","integrity":"sha512-RH4DBWUJEyMq2IF6Fix+sxP6C5UuXQ9rwjrOyPMVaUD+Y9gxIOCaWxhRnUhCDEv+5SqXzzVlqooc01LF5pdcZg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA293bJhOWXEjnIDZEjdDyg0hcgPPNOs1fnLqd13+wsgAiEA3mFYBsPKb17zNbuWjyYxGDi3VjIk1sKeg557AiDo8sg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1732.tgz_1513121743457_0.5157135236077011"},"directories":{}},"3.3.1733":{"name":"meetup-web-components","version":"3.3.1733","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c1d17a64ed928b3cafcc30d430e890267d035c60","_id":"meetup-web-components@3.3.1733","_shasum":"288a645582ccc95786964836992bcf1e393653fc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"288a645582ccc95786964836992bcf1e393653fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1733.tgz","integrity":"sha512-Sz8HpGA60AhTRdrJO62iALoMIH+dX0exzzBK6KUJaGIo3nO4fsDXKS28dgRb0PO9cmvZhIlrRxJlipbWrIuVfA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEIRyzRnWwh1Idupwuo5aMBSAkBO3hOTnRRAd//494HgAiEAyT0myPtFLJLs801o7i7UT9K2hI5THPihMtpwuxcvjC0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1733.tgz_1513126420612_0.38165640155784786"},"directories":{}},"3.3.1734-beta":{"name":"meetup-web-components","version":"3.3.1734-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"bbce6758525ecd32e44208b2161577476abb8fa2","_id":"meetup-web-components@3.3.1734-beta","_shasum":"558a670c9877e133d3001fa5192305a4a6198a60","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"558a670c9877e133d3001fa5192305a4a6198a60","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1734-beta.tgz","integrity":"sha512-5FVJXDF55JsIwxiTgq0SdfY9sVktBaPkR+zZxa1NGiPMAG/wc2hpASK1+XgvKVfA6xyZuWK/oat+EjuZ2D1AFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBeM+zdt6H4J8ICprCn9dtPVd8mY2O9m0gfjzcsZGA6hAiBYy8ZhIEXVsEeTv8zgFBW/HQrXbt79doPbgvavoCbB/w=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1734-beta.tgz_1513137266156_0.5983954684343189"},"directories":{}},"3.3.1735":{"name":"meetup-web-components","version":"3.3.1735","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"d1f1f6928d1dc83b5c726803888bc6fd4586ba58","_id":"meetup-web-components@3.3.1735","_shasum":"f0374075c6ee6b68060154eac12d29a2d1a0c106","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f0374075c6ee6b68060154eac12d29a2d1a0c106","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1735.tgz","integrity":"sha512-wnVqaVjrxj7tzEKRqir7Xw5w9HU1mN19OQYyAOsQALe8GaIRwJuwjZAA//3rgwDInan4qwGa+RTC2dF6zC7Fcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDylV9/tI2jtn6rgY/c564wc+cb9HUS3FV7eR8BzJQc2wIhAOJPhUsS13DodcFSvZ7awqzYmNd/O5feOWl4oo+gaJzm"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1735.tgz_1513138754834_0.29558421834371984"},"directories":{}},"3.3.1736-beta":{"name":"meetup-web-components","version":"3.3.1736-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"d7c41c2a6ba105ffcecf2c1aa6944edda01046c8","_id":"meetup-web-components@3.3.1736-beta","_shasum":"4f3ea3fc8a8fd7c5894a2735402a2a998ed913c4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4f3ea3fc8a8fd7c5894a2735402a2a998ed913c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1736-beta.tgz","integrity":"sha512-RpT1C4XmxQfWtiMMh9lE6LF7iCyGxpaEqFsuPFv181alKhZmDWsr0sK7msDwNfRZawIaSDkCvgwZ+BT2n/RumA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcXCGkqG8O/95ed8VQtrzlFoHCD+5Djs3doB+QIwdYGgIhAOjpE1VFa4BzUl1vr9PTzZuCrByOEU9sT0B9YF2kOPLi"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1736-beta.tgz_1513146723844_0.8529531457461417"},"directories":{}},"3.3.1737-beta":{"name":"meetup-web-components","version":"3.3.1737-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"fd8add5d96dbfd32ad49f7954d76f11b372e1c9e","_id":"meetup-web-components@3.3.1737-beta","_shasum":"52b48947b223b4a65cf479871ab95008459ca795","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"52b48947b223b4a65cf479871ab95008459ca795","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1737-beta.tgz","integrity":"sha512-mnojc2b3vGflrZmm+n/266Xgkr9Ic2I7skQ2jBxzGG5DkjC0Rynh/m8Juw04e5Pew+XJxDy/JVOPJjzphh0s/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDR5mp3ectAgYwSsCwajt0NKfCrkjTm0nwfH3peQGlQOgIhANawJQ3BWF5fNps1Cku0XVKDhaXEag+XRPbxjwDTSga7"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1737-beta.tgz_1513182990749_0.40351107926107943"},"directories":{}},"3.3.1738":{"name":"meetup-web-components","version":"3.3.1738","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"e429951bbc572bf7cb248bf5056f67869300b38c","_id":"meetup-web-components@3.3.1738","_shasum":"4ea5dfe0c667f663a005958520d432014a492e6c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4ea5dfe0c667f663a005958520d432014a492e6c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1738.tgz","integrity":"sha512-XB7l5a1/ziSuQ7190lRRBLjxiryidp5dAk4CYxt6bqbu9n8QmgLSB5BQv1UUSl7mUIYjG3tewUvkGJP1EqwNzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAxdBd1RFCYEijvp2CN8pxM0eVGvWlcZxCBntJuDgZWfAiEAuNbGytGi1DpZhhTFeoc2Ko/UPrV5ejAojsvn0loWp/k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1738.tgz_1513183572848_0.7943446454592049"},"directories":{}},"3.3.1739-beta":{"name":"meetup-web-components","version":"3.3.1739-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"629371f9e65ddfb03ed4e2a4172308ab4e12c13f","_id":"meetup-web-components@3.3.1739-beta","_shasum":"a15c5b36201d84910d6090478765098566f0e61d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a15c5b36201d84910d6090478765098566f0e61d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1739-beta.tgz","integrity":"sha512-da2yllM8iw8FIbYp8mbbP93SGFSDKztJh3uEkfNm/wyG/r0srjExfcnwfYQxaeR6vCK0BbMIMLWrex2gOcDwqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHuZu01cEmOPdkujW/d/RfuMbnJTGlrUM6/m5bk7PK07AiEAxeM/onlTMdg2ys+2vXV7/MqhDXSz1v/83vhUbHffNao="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1739-beta.tgz_1513185483275_0.24873898387886584"},"directories":{}},"3.3.1740-beta":{"name":"meetup-web-components","version":"3.3.1740-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"50eb3ae8c3cec47a48c30f49f332f7546003d1d7","_id":"meetup-web-components@3.3.1740-beta","_shasum":"1b8393533b4cc9521142a693f61ea5c81e09714f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1b8393533b4cc9521142a693f61ea5c81e09714f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1740-beta.tgz","integrity":"sha512-gRaSTBcwafJhGZP4vDe3rhFmO4C62pvamwe4EdktfgfDtfklHTFNY+uUuiFRfrXO08iRCZgOnuDqvC4NBO3Uvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGxALBJiHrbpdTE+BNgv8/Q+muAE5H72m5IraVnXKSBdAiBfwWZ7ePV3loGqvOsjsoWLcSncyEdHUU0HvyGojdst8g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1740-beta.tgz_1513185665540_0.8632434927858412"},"directories":{}},"3.3.1741":{"name":"meetup-web-components","version":"3.3.1741","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c16e8673a322c7b46772e344904d58d372c87d3d","_id":"meetup-web-components@3.3.1741","_shasum":"f1ff2bdc440d91fe3e331b075e8043ea97845699","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f1ff2bdc440d91fe3e331b075e8043ea97845699","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1741.tgz","integrity":"sha512-oqFeeOyHZ/UhQPh/ozlSk15cqB/rccQrKfn/uPNG7fgGSXCE+LFA9rcGb/S8v9D+qZ+ppPQSchk5Ax/mjrecag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzgB7SPqZmUam+e3oP0Zx0jQljzbC0+MFAd0A3n1t7oAiBv56jjIgInUZImyUKVOt0Eb99cS7SKNOV2ehGfKiojnw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1741.tgz_1513186898417_0.5684458590112627"},"directories":{}},"3.3.1742-beta":{"name":"meetup-web-components","version":"3.3.1742-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"458d22bb6df5c1563c8ac5da6f81106d2219ca1c","_id":"meetup-web-components@3.3.1742-beta","_shasum":"52cef24c30dcf5dd0ddff05bec288d6d9757b4cb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"52cef24c30dcf5dd0ddff05bec288d6d9757b4cb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1742-beta.tgz","integrity":"sha512-Ib5j5fkcsre6E4cYUDJNhQdfLzFngfZfW2y4NOZYo2UCTs690a6M7ollYEkln/cmeEcaQqEhwWcZO5SHB8Zc8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxZNy5JtcYf2hj9AhYMPzwnCoZZjAISr9SNwbybqt07QIgCdf0kZ8dnwZd++c5LSR8fjogXvGsljxFTACNfiYLCAQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1742-beta.tgz_1513188064013_0.3289072294719517"},"directories":{}},"3.3.1743-beta":{"name":"meetup-web-components","version":"3.3.1743-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"2d0c9ece4abd3a3ec0ef302ba4e50e1b75eff4e9","_id":"meetup-web-components@3.3.1743-beta","_shasum":"5c8617a31a3b79030900d1cc5f701975ab595893","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5c8617a31a3b79030900d1cc5f701975ab595893","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1743-beta.tgz","integrity":"sha512-fS7uKjgLvSSVCq9icCN8UK+L/5k3c0S2rpuTTCan6MOBltWqM4CfXVPmYBhxdOOrJvILdA/XSRIZeGDP44RgMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDqXep/PwU3QxH6d5pShtjIgdOYOFoPgrrgL9krg4FReAiBZnMaA1FxP5HKDN5gNx+IJp65+dAoecTtbjK6HG+klRg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1743-beta.tgz_1513188169208_0.2660531844012439"},"directories":{}},"3.3.1744":{"name":"meetup-web-components","version":"3.3.1744","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"8085cd31675ada66f603d99338b9e204ed4e0ba1","_id":"meetup-web-components@3.3.1744","_shasum":"53423082fa2e664ba0d2fed6a11967d49c3a29f4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"53423082fa2e664ba0d2fed6a11967d49c3a29f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1744.tgz","integrity":"sha512-7QlJsw2HwGJU2sr0ZL9Y3VW9XW7nKJ2EuaCt1EVZpF5LzjVShv+UDMAZsn4u7gsjeXrURrqNCwwyHO5jFbqfZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAKkSDQfMLBSY8BGMuycs7wTghkwJ8MJPJ20p2Bss1ahAiEA3/aOajeD1JHmQO4Cw60IkgbJ01dVWXouB7Aty1x9h2U="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1744.tgz_1513192152077_0.2269381966907531"},"directories":{}},"3.3.1745-beta":{"name":"meetup-web-components","version":"3.3.1745-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"717581b09228a3b0f1e7ee83c0bdd9cd9cf012b7","_id":"meetup-web-components@3.3.1745-beta","_shasum":"00acc1eece0db7b1b3997bc56ace8c3816a3bd9b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"00acc1eece0db7b1b3997bc56ace8c3816a3bd9b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1745-beta.tgz","integrity":"sha512-sN8g8rHnD9j32zrGRL8uUZJc/fhZeexkluAuqx+owsAdGjxUhMscfWqqJKr4CoOZT6CiN+qkqBIfl7HyAwXkbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgeCHm5hkgqG2MxFnCt8sxFBhnMnliGIszYLNUAoWtIAIhAMBLjpk3NOFQps/+8QT4s861800A5H1JZcDfSm5gEPmP"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1745-beta.tgz_1513196320377_0.46647309768013656"},"directories":{}},"3.3.1746":{"name":"meetup-web-components","version":"3.3.1746","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"b7836ed67d1fe5e129c464a16fc48aa2622dea65","_id":"meetup-web-components@3.3.1746","_shasum":"5e88c08f8266c7ef054561aee666049c3b6a63bc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5e88c08f8266c7ef054561aee666049c3b6a63bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1746.tgz","integrity":"sha512-xeymzQ537HChNLdiNukXlejqGG7W3uZLNHLK55voD7g3P1stfsqxa+OvdM7sFFnJCTq4sKZF210tqQ2A7zhNgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6f4gO2wMNHRXhAe0avX1RTT80wTIm5/uLYXGZRssrMAIgMb/sHMYBkzH6zgvJPutBjnxucLKhODZmSKP6a0v4Wkc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1746.tgz_1513196443499_0.5118844793178141"},"directories":{}},"3.3.1747-beta":{"name":"meetup-web-components","version":"3.3.1747-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"40eb60a4dc11be391c47a267f16b8bc40205b96a","_id":"meetup-web-components@3.3.1747-beta","_shasum":"b34f20db87456dcd95db57b7d0c38bde277d5f6a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b34f20db87456dcd95db57b7d0c38bde277d5f6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1747-beta.tgz","integrity":"sha512-xNpvzM/A2s5g+oL/UHmYX4GH9Zb/BBfG1YQc/hnxpKceVE/HwANhM8l7AIgSqHK4VSbiC88kJS84JaSzDjLmeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2f1LmdczgRhdJe/fK5UywafYgWOb76zzNiwFmf6vsaAiEA61S6NXA7FAdNHsJZWU7QbJZFs7L969SobIPP3B3InLg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1747-beta.tgz_1513209670714_0.318877236219123"},"directories":{}},"3.3.1748":{"name":"meetup-web-components","version":"3.3.1748","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"64cf51df949c33f265561d078f6623735230df0b","_id":"meetup-web-components@3.3.1748","_shasum":"751760f27fe5bfc39ba6214df5ac8fc01859bf10","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"751760f27fe5bfc39ba6214df5ac8fc01859bf10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1748.tgz","integrity":"sha512-Wqgoh/Az3uezYyE8e2ytm/b5/pFXy0KNuWXaXQ51hFfCNghol13xL4LUzk7izAnFXywIlriIEYhEwRoEU02qqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWD2+bok1AGfH8JHiTfUst5w9Y+WXrnK2DAj6aX6zp/wIhAP3ej8Aia+nhk6s7jxgCBnxlguk8HKyf4cxwZ4ZZd1HB"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1748.tgz_1513210174819_0.03447421966120601"},"directories":{}},"3.3.1749":{"name":"meetup-web-components","version":"3.3.1749","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"cbf65a198f2f1f596930657c96a69aac164d220f","_id":"meetup-web-components@3.3.1749","_shasum":"45a2875b4d40aea6fe7c01b2bd32802bf9cf1f4d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"45a2875b4d40aea6fe7c01b2bd32802bf9cf1f4d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1749.tgz","integrity":"sha512-v6QRaLd0IufqlXpIYCnK4BklgFagh1pYC9P6D02AQ47tzVDZtnsw27ETfQ9yf+gvvsGjnFtsvfWkTMlKDGYqdg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFlWsSg2mkfzCAnIlD7xPt/l57Tq/N9qU4MQw6mXXLZkAiEArzFsB/XAjNU0kvyZ34HBW+cQlefocCoaS0YhwdmZK6I="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1749.tgz_1513222336903_0.6329373109620064"},"directories":{}},"3.3.1750-beta":{"name":"meetup-web-components","version":"3.3.1750-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c7702d4ff074825046a225e5cdbe5c0767a344cc","_id":"meetup-web-components@3.3.1750-beta","_shasum":"aa2fa7a7af9dcf4353849bac79de29eee5f4ee49","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"aa2fa7a7af9dcf4353849bac79de29eee5f4ee49","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1750-beta.tgz","integrity":"sha512-VBVqaAdtX/ojWCd5WxUl0mXfTm3snBvXTfzTzjWiWJAD1uo3eMumZ7BKihcHSNLzUYigBcxBrPDaQJYlX0VoZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkpQg9yN33o3fix4KYpgfmhdJB+sQ2G3kqGBtZ2p7gWAIhAMaq8iFjEB9/y5uyx6KseMNun3DM48voQTysP+zi/XAH"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1750-beta.tgz_1513280518741_0.38508530822582543"},"directories":{}},"3.3.1752-beta":{"name":"meetup-web-components","version":"3.3.1752-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"1d35ca2e2baebff91a9811031e1fbc4660574ad1","_id":"meetup-web-components@3.3.1752-beta","_shasum":"bc009cd300867ed6a13099c68a8cec628d844023","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bc009cd300867ed6a13099c68a8cec628d844023","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1752-beta.tgz","integrity":"sha512-620uqcQxGFSBn9emhzHoiMxomlmIrBK05hJNBQwiMWxIS5VOf2uga1G+02S3KmJvDICtZ0xKmRGf71p0NUrAcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID4lBmnQYEqCXNeg3x+vmBWSUotub3BUMK+T77R5sPvHAiEAuQ5sa22ksQsZ3Kx2es0Qo2luFvOYt8pUWyhkfQqOlpk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1752-beta.tgz_1513365283418_0.22603156720288098"},"directories":{}},"3.3.1753-beta":{"name":"meetup-web-components","version":"3.3.1753-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"e944f53e2fb351bf6f562cd57800a0d03910d552","_id":"meetup-web-components@3.3.1753-beta","_shasum":"3c215133537321e779429bd628bacbe5bef3b6db","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3c215133537321e779429bd628bacbe5bef3b6db","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1753-beta.tgz","integrity":"sha512-y3GQzwsrMw2yFLPQ0FrNX5uGPQ0SC/VhVdzr7uLCnRvEmd33D37OFleHBGne4bHJh4nGDebS8ekSWjbmDA16PA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5yIZmhOhMF+6fb7QL8R9pY9eWsf+98I70HV4joJI/LAiBLO2HxNdXr9pFKOxl/7ete+Yf4BfNVIK+Va9PqVUPfQA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1753-beta.tgz_1513367556154_0.2176853173878044"},"directories":{}},"3.3.1754":{"name":"meetup-web-components","version":"3.3.1754","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"ad553a611e91b661c9c745ca54b6be5b2802a0cf","_id":"meetup-web-components@3.3.1754","_shasum":"9f3c573b06b548ab0f7154e3e1b96dca8f4bbf46","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9f3c573b06b548ab0f7154e3e1b96dca8f4bbf46","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1754.tgz","integrity":"sha512-eQMUouVZ2W1wC6AsXeUa1nGl/kni7dTqXavW4OkzoagGarLj5IcN+hh73iPrfMm/2jJoC4LpIuA+jspvw0QpiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYModZdElPXUP54aEGNfRBdFk8VhQ1m+kdzzTQws6OlgIhANRaPugW149fjSCvlG10GvuNTOn/o5lgULdbUMh0f6k0"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1754.tgz_1513367575074_0.1327404084149748"},"directories":{}},"3.3.1755-beta":{"name":"meetup-web-components","version":"3.3.1755-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"2fc09a211b999414f2204ec085dd1d8b3f3f9d52","_id":"meetup-web-components@3.3.1755-beta","_shasum":"278b3fae5f02e398746cc4339b243001f1fab239","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"278b3fae5f02e398746cc4339b243001f1fab239","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1755-beta.tgz","integrity":"sha512-X4/1gg6ZJlaW+fOdreYNaFh4FMN4BcCbHNrWkMFXqUWDmMFwo8w+rxi/iw/g5MdJCcuqApufhmt61o5XWEBc3Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB8bnx55VRgjZperEAOYwkDYbnoHGBVvFtzYHSOuGrFVAiAN7dCR1Z/mAB46vC6cU65u44Vq7Opc+x3lwlJTI6nDIw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1755-beta.tgz_1513367620953_0.38218340487219393"},"directories":{}},"3.3.1756":{"name":"meetup-web-components","version":"3.3.1756","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"e1a3c3e53098ad804c89cbd9472dc33e7334b1d5","_id":"meetup-web-components@3.3.1756","_shasum":"488859a87545a796fa1b8ee47e975d03b638dfb9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"488859a87545a796fa1b8ee47e975d03b638dfb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1756.tgz","integrity":"sha512-EDzsbfR3e+FFlBc+ZmYuo3hSbYAZLBb2dedOXJ91h/s0ilHxZEbgHZg4q13xtEqnzx5Ewihyw7LYiSjdx3XnXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBnIX4sB948qV2d2uzMfNQ7lWQpTjxhTNEiPOR6ok1awAiAOiHESj2Z1gO5+lBHlBPKbb8v23S9z1Pf7VB/ZmQkW7A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1756.tgz_1513368216840_0.9710588103625923"},"directories":{}},"3.3.1757":{"name":"meetup-web-components","version":"3.3.1757","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"ebcc7c07f3c2c246d938752e220a27d6b5c5b18c","_id":"meetup-web-components@3.3.1757","_shasum":"12235bd59344a6024edd66f359aed694d8e6d17d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"12235bd59344a6024edd66f359aed694d8e6d17d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1757.tgz","integrity":"sha512-QZ0kMYB/gaolvjI2NPMHbVZFHevSQN0RNfFod1TTmseBCZhuOyxNvUEPRhGLJqCcTc0nST/uRgTw67yaiS5bkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEr2MjqrJWcO+AY8EeXD1mbnY394ECFn4hOzjAfIQz8pAiBSS3rx/mchOg6TAjZ/4qFb2xK4Djt389LEqJriGWieVg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1757.tgz_1513368399263_0.14931797585450113"},"directories":{}},"3.3.1758-beta":{"name":"meetup-web-components","version":"3.3.1758-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"1c355cdd45d47aaf49c55971623815afd30895d9","_id":"meetup-web-components@3.3.1758-beta","_shasum":"bdb34a9d9a2a3977137aceb29accc4c5f9daea8f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bdb34a9d9a2a3977137aceb29accc4c5f9daea8f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1758-beta.tgz","integrity":"sha512-Hb+3PjbCCGO0XLcsNXbdilkJ0erCoXrq7zLGUnG70O4ItmQ9MKU4mKt71ivpkEEw53fFV3abS0S/L+3LxHqggA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs73PoZzy+tP1Rbn2kPQJ6gUWamAVUhGsleyQtyMQrywIgGaPiF70QcYGk5VdDZMxpqbV/vcrYAYnRoqSf+fq1bgw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1758-beta.tgz_1513444516250_0.5388709432445467"},"directories":{}},"3.3.1759-beta":{"name":"meetup-web-components","version":"3.3.1759-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"3e8d08c2c96c292461131cc862fa3981e91e6be4","_id":"meetup-web-components@3.3.1759-beta","_shasum":"cdd2acea75dce2f4542e81477c6d89cab0c63c0b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cdd2acea75dce2f4542e81477c6d89cab0c63c0b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1759-beta.tgz","integrity":"sha512-9bdm0p9D9iJtFxl7LtPokPJ2eMDAZW01WeTH8zo8AU8EnzxfJJmLYfqmt/gHjxFMvfgBlSLpTHf6394ZHsniqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGNRtlH2QQRZduUTsMk2X4jHmkOkC2N8EiaNySEm8CB5AiEAxzkgk6DvFuqwjsbdC746tJxaa+2KaPAceRopMJ4520o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1759-beta.tgz_1513444645716_0.5083896876312792"},"directories":{}},"3.3.1760":{"name":"meetup-web-components","version":"3.3.1760","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"fc677d7bea8d2654da23794c23d9ce5769cb3f82","_id":"meetup-web-components@3.3.1760","_shasum":"c698f97cd20f798e20ff1a5d53d13e309d029d57","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c698f97cd20f798e20ff1a5d53d13e309d029d57","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1760.tgz","integrity":"sha512-oqourjiNIw7rPrG+Yn4to3MOIr7HFhhUHl3kPTcpJ1SDTyrbz7GHsp9IN6Y3Jn/i9IXFCNGOV8Vx6ZbtPCCMhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHkk7bDo67eq6JAaHqmgqO1uqg74Qnx5Od4RfsWKmTxAiEA23n4D+Ck5dA1bknqH8jnlqEEZlG1j044Q0hmfwyUc+8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1760.tgz_1513445207900_0.8188021467067301"},"directories":{}},"3.3.1761":{"name":"meetup-web-components","version":"3.3.1761","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"b5145708fe7671fa69bce7ee5d0a5c2411b7089d","_id":"meetup-web-components@3.3.1761","_shasum":"2ffba827a32deeefb3f9b984e59150a98720f577","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2ffba827a32deeefb3f9b984e59150a98720f577","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1761.tgz","integrity":"sha512-gZASVOqhZcVirshk0nlE0ZoF+d9agiwbhxlNlVnSF7vdbaZEsZl/y3Fiw+WNUIm+BSWW9GiEN/dY+oqDQwe6zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAmS2K/sozqIYg4lHgo72IOfyHBlhxwZseJ8RsM5E5JHAiAZGfPkk9AM40zRCjV4kAMp41YZkinmwntO9WSuWA3Iag=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1761.tgz_1513447602608_0.8797064726240933"},"directories":{}},"3.3.1762-beta":{"name":"meetup-web-components","version":"3.3.1762-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"3bcbadd76d46bc8a99b89ad9eba15da49dfb80c0","_id":"meetup-web-components@3.3.1762-beta","_shasum":"1bbd77441999a92431c8e8ae99a605ffc527fecd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1bbd77441999a92431c8e8ae99a605ffc527fecd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1762-beta.tgz","integrity":"sha512-SfUG/banbxYvhga4oHbFFsdn+uuolyjxct0K5xxfuDcEJAojSSZkmq4oMCjgDSdk5VaUb/gHCkMCyptb4cWb/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDdYeDpvIfV9/fUC5myfPX6cJ6HjnDajc/lxb6KXp2zxAiAUjIpk4GhAJ5OpFhFIg8ANh6Ak2ysVnYLq80x07Q52Tw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1762-beta.tgz_1513635841125_0.5401512607932091"},"directories":{}},"3.3.1763-beta":{"name":"meetup-web-components","version":"3.3.1763-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"30d3faa8480972cc2f6b0c589741938dc8b75dbd","_id":"meetup-web-components@3.3.1763-beta","_shasum":"dba2e368352d8fd1c62e2fb0947fddf8f43186d2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dba2e368352d8fd1c62e2fb0947fddf8f43186d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1763-beta.tgz","integrity":"sha512-zb0JU3iczxphAjEXSnjRO/3ISawhpMmSxSK1h9czlWQp3muvkuhYu5qvg00ptoX6bKuYQUv6/TERK3aLpOqzZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4K3qWfKzCGDMI17/OTkFWl9RtLq6bWWxpWWa46q5sWwIgDfQ1IVkOysbIA1EEcBu4bp9GNE/toWtK1uVDy5v7WPI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1763-beta.tgz_1513640703802_0.4680131634231657"},"directories":{}},"3.3.1765":{"name":"meetup-web-components","version":"3.3.1765","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"923c19f74630d7ae21de4f3f7b4b0ab087cba361","_id":"meetup-web-components@3.3.1765","_shasum":"814a876ed56d576741e57be97f9779da433c5aa1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"814a876ed56d576741e57be97f9779da433c5aa1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1765.tgz","integrity":"sha512-CsK3zoZfVFJ7B7PwfqCxaaDiuXE+v6RXM1B0+o/r3j3vQF5wT/yOOBe+cF129PUxjWz/twJZl3Tz+UvrW0413Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCo7xcP/cJKgl6LT+uPovs6oMfLdknXeMyUXJABXaz/IQIhAKoigr4OmyQvbE0yV3hczIXltVvGch0eHo8tXcKGreD8"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1765.tgz_1513699065720_0.4354617081116885"},"directories":{}},"3.3.1764-beta":{"name":"meetup-web-components","version":"3.3.1764-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"55911bc055eceb8dcd06a54bd7debdc8c0fd68ba","_id":"meetup-web-components@3.3.1764-beta","_shasum":"cdf49c8a2bc921bf892e5e484e9d46ce8c259e35","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cdf49c8a2bc921bf892e5e484e9d46ce8c259e35","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1764-beta.tgz","integrity":"sha512-VZJuLJCdUbXdot6A/1nxRFlM0xt2KIUkRJhmzpLPInmOWvaecvcJXZxqyxJOS2LRONJkiwQVQSAd/iypAi0SLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ4dwxaYZDRRa+XMOPmMqxSPGTDBAY+HSembhcEGe/QgIgGVJf0vpoGRYp8vV/s5phdMTjrwqNzaXsReh3ABP7fOU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1764-beta.tgz_1513699192203_0.7284668849315494"},"directories":{}},"3.3.1766":{"name":"meetup-web-components","version":"3.3.1766","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"b1879bfc36201dfa8f656d5113906e3ace0fe413","_id":"meetup-web-components@3.3.1766","_shasum":"4c26e92172ff2839bec4432feb310d64bbbd1c9f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4c26e92172ff2839bec4432feb310d64bbbd1c9f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1766.tgz","integrity":"sha512-B21U9JY/Attd8si2AaEV2Rzj7jc3B2OlLk3pfN2pIEkMI9UG1GW25gNMmvhuLwX4+Giw+ipG9TllJXd4m8kmXg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICrEkxUYK9pAo3mMCE7AqTzp0q1NEovLvpqsTciVdIY/AiEAsQ0PT5MXr2GmVMx/STVIqeuRd/AsnUvlQM2M37bEhXI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1766.tgz_1513700105662_0.7885687539819628"},"directories":{}},"3.4.1768-beta":{"name":"meetup-web-components","version":"3.4.1768-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"f5b00a15e262192bb59285c803df3329dc57d52f","_id":"meetup-web-components@3.4.1768-beta","_shasum":"c158b02cb7f2572ea3701de85d08136e829ddfff","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c158b02cb7f2572ea3701de85d08136e829ddfff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1768-beta.tgz","integrity":"sha512-CiOTTLheMEOkiKC4/G/U/fAEVdmB7o7vps4+vjLVdUd1gjoWrAHDTs+/+BiDwCrnJD/f/aVKubmIzNNeXYo6fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfkJqByEpsbnWHP/UpbfkDEwx5pimxgLnYFvSlax+0sAiBYPM7hLNHQ19a0uwYLMLSMPLeUk6GJL2LVTr1xKqyq5Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1768-beta.tgz_1513722503696_0.4648033508565277"},"directories":{}},"3.3.1769-beta":{"name":"meetup-web-components","version":"3.3.1769-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"0264f34cd4b2e8228c6f62a2fabf3eec017eaa6d","_id":"meetup-web-components@3.3.1769-beta","_shasum":"e46df2392f729c254be61c4ba324bd53c9f91978","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e46df2392f729c254be61c4ba324bd53c9f91978","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1769-beta.tgz","integrity":"sha512-KRI5yabwz3xce0eSDiVKFuxg8QjOaBXwkiYm1BWrqg5uttEJDd8dqQr/5a17MQHtJj4hEKkImaeVldemyXTuKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTnNTv9VstHAk9ZHdni0Ql+A8mXYTIw9YLqaqE2Fh2HAIgdMWY4EYV4MbZkPxk5XS2MOUdiazDUvGjnZ0igevD6xY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1769-beta.tgz_1513724685571_0.5687361741438508"},"directories":{}},"3.3.1770-beta":{"name":"meetup-web-components","version":"3.3.1770-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"3c73de3e86e2ae9c6f022ee95dea222b9c85ae53","_id":"meetup-web-components@3.3.1770-beta","_shasum":"e4a5d8c823bdf54eddead8abb438ceaefbab802e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e4a5d8c823bdf54eddead8abb438ceaefbab802e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1770-beta.tgz","integrity":"sha512-4AzFV88UqO/cvRiRfGMh9IHAijtptVuIUYugJ1ed+4XrxmAwT3pWEDDAnCcTeTJ29Qovyy8uXv24F9WSqQF4fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1jqLDwEsshwjRKWWje+WxmbRMnkKv/fSL8MPFQOUtDAiEAn6P7qot3nONbOTXK/F/EXNyQrpJpGT9A2HE/gUaXXEM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1770-beta.tgz_1513724822657_0.08657739916816354"},"directories":{}},"3.3.1771":{"name":"meetup-web-components","version":"3.3.1771","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"69996ce16b90a995b709f0a5577e85bb0c6100ae","_id":"meetup-web-components@3.3.1771","_shasum":"e261fbf0aaf35aa162dd9ba5528bbc5914d54cd9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e261fbf0aaf35aa162dd9ba5528bbc5914d54cd9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1771.tgz","integrity":"sha512-gWmnS85bPBtwzoBcSXvJlgwYCqqHHgKVMYsH8nHHByxya4wVLI0vZ2DtW3X43nSKaylf2UAd2Dk+vnfHGcyHVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICiwEKjQyh6F/vsTU75uVYOomkfbTRHez58V1mcLEEAlAiEAs2LMekTzuxThWWT+9Be3O6zxdxDoVss9N7NLGB40moA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1771.tgz_1513725217190_0.1351092855911702"},"directories":{}},"3.3.1772":{"name":"meetup-web-components","version":"3.3.1772","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"80fbaeac3675e0e7fa442b7e63cdd0d9f411b475","_id":"meetup-web-components@3.3.1772","_shasum":"92b9d6a381eb7edaeab13d2e1a60fc3f395af58f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"92b9d6a381eb7edaeab13d2e1a60fc3f395af58f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1772.tgz","integrity":"sha512-cBs8ZyTIu23VmlleTKAq9U8I/ptRV3Xe1RgPh3g4898NnYsfKDjnO34tWirms/xcfLe+m1qpEIiUNrgLpmovTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9t1muzYErsJbIy/K/ABiznkU+wEWAVoZDFuEsc265iAiEAoSNLLDSWA3zjaSKG/FN8C+aPFPrDa5BRBtFi9j8zlgw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1772.tgz_1513794100263_0.0050798943266272545"},"directories":{}},"3.3.1773-beta":{"name":"meetup-web-components","version":"3.3.1773-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"8ccaf376e9b4515b016bd60c038d5e906a3aa6ef","_id":"meetup-web-components@3.3.1773-beta","_shasum":"ee76fba8fc897afffdf83dd65a1957d0fdfd574e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ee76fba8fc897afffdf83dd65a1957d0fdfd574e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1773-beta.tgz","integrity":"sha512-6UttNBodr7b/dnJZX3MHgZXIVtT3qFFKhTQ85x65zrKJaa2vqdYOz5OIdo6EyOkutOAzIj3TqojMbFcMgOaB4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSY5XT1iYtMCRSWTo95led616D//oSK5MARFKAAaIQ1gIgaQ/wY7qT8jAVL7KhMyS/XRzhcl1oZESwsd6TL9ydoVc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1773-beta.tgz_1513802013858_0.797340084798634"},"directories":{}},"3.3.1776-beta":{"name":"meetup-web-components","version":"3.3.1776-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"c15d8be53b314e39e2649719c44965b553890246","_id":"meetup-web-components@3.3.1776-beta","_shasum":"61328981b3011241b3087a01c58d0bdea7971c74","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"61328981b3011241b3087a01c58d0bdea7971c74","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1776-beta.tgz","integrity":"sha512-slmLaHJtLY00NcFyfcCqNqryQRc5tTc7UXLl2b6AM8lCVhvPON26zERhHw4mxmdLXNf6KoW+MI9zIDd6co6cSA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEsa7hntCkKLhAfX/vkJWmW5/lPpYb9BCIbhKijBiiB+AiEAiqmX29FDpbuqe3BXxbQguG9i5jseiAdvfZKA5ApJIBY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1776-beta.tgz_1513883432394_0.8443652426358312"},"directories":{}},"3.3.1777":{"name":"meetup-web-components","version":"3.3.1777","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"e19b67145245beb48eca02cf8c38b72a9da9fa4e","_id":"meetup-web-components@3.3.1777","_shasum":"a8f0c2804874c0a74c81c7fb764a146b2575b412","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a8f0c2804874c0a74c81c7fb764a146b2575b412","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1777.tgz","integrity":"sha512-4ndmi21LNTvRd019WDnLPbJmSri5X8hpTXYR/lMtEOUolPI0KeaOQIfuxMz8MSreJ2TPUM+M0Q+EBfjx9tKqXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFCzaOw8yOe13GvPHQHCAlvCLDc909hpXdm1ZR+JiExRAiEAoset+bnNZ6VCKJUdhJ6pZUjGqjuoTcAGiHnDckKBtWQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1777.tgz_1513884787324_0.5550792755093426"},"directories":{}},"3.4.1778-beta":{"name":"meetup-web-components","version":"3.4.1778-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"5a3c126ee4cd2d0af165b8689cb1f90496b23e16","_id":"meetup-web-components@3.4.1778-beta","_shasum":"fdf6806048bbd40926aacdc5edb9d4c8f0fd38e2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fdf6806048bbd40926aacdc5edb9d4c8f0fd38e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.4.1778-beta.tgz","integrity":"sha512-sBD0L0UIQ3GHA0HLKAwf7DpnoinGT0RimFi/NAOw8pUUiz7KTsTWOTyT2GQZ8VX0OQYK2cv0lPOjlfF7wKejcw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFBt90zMrvuvPd+GkndfqSub0GelFv0nEWoK5swtzaWAiAvhzE6f79G5TPde11RMlNqtX/NY/3kgXQmwmu+O4TxvA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.4.1778-beta.tgz_1513894658081_0.5532411828171462"},"directories":{}},"3.3.1779-beta":{"name":"meetup-web-components","version":"3.3.1779-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"815ac14f4feb0878bd53ea0721fea356aabcccdb","_id":"meetup-web-components@3.3.1779-beta","_shasum":"ece192224d5015cb657592c970afa0a51b502b1a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ece192224d5015cb657592c970afa0a51b502b1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1779-beta.tgz","integrity":"sha512-xQQLm6PFb9UMOxlOqaAXAwImcXz4amYgRWpAO9QiyFTIvyXGfdFG8ZGjCGLUiA9MJ7WT7+oDCYqAaHBXTzVgEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCC10mnXXCd99epY/IKxZjrP2e/fpuWZ+ayk5L7TmNTggIhAJSeNev3Kb03cuww55OCrui5qvI/KBv0FdkXyZ/3bJRS"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1779-beta.tgz_1513895872288_0.7683672059793025"},"directories":{}},"3.3.1780":{"name":"meetup-web-components","version":"3.3.1780","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"ae3fd4c8fa24e66c2ed6bd9a71fa09ff04cd6c28","_id":"meetup-web-components@3.3.1780","_shasum":"c410586befbd09d1fa02d0dc8f50e5cf8f6fda89","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c410586befbd09d1fa02d0dc8f50e5cf8f6fda89","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1780.tgz","integrity":"sha512-H9yOV157ehf+yRhjtPzS9WhOk0p7SputSSlVMBPpqHyJe9N8EcNOV0gQBOWYBPeRZ6aHLXcPODRiY6VOweKkyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWSyIybDeO9lMhBCCyju4Is+nhJxZNsrQkW2JTSQzYLAiEAhBOxpe1O29uFdunJoyNIZHMW+YjmgWPzNotReLDTw+o="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1780.tgz_1513898472350_0.03174968692474067"},"directories":{}},"3.3.1781-beta":{"name":"meetup-web-components","version":"3.3.1781-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"2.0.296","webpack":"2.6.1"},"gitHead":"fc469dc9fc4818abe5831d7b7aade849fb5d530f","_id":"meetup-web-components@3.3.1781-beta","_shasum":"9e68c994349bd1094bc0291222acf2291c0f83aa","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9e68c994349bd1094bc0291222acf2291c0f83aa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-3.3.1781-beta.tgz","integrity":"sha512-Gu2nN/uQLDT/iAyx2D9qFh6V7HeW/xLS0uMMN5jjCIRxbr7BoMX5R0yaLAx/WxlBB18UF8Q0XQMT6539icRWQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHt+QxtjaaXUUcILmv9r62ErP9f/opQloDLbnf4JD3EyAiEA1jL+W6GXKqkVoZ4w5vlPQp3TipZCc+wAxUtV4qJ5tis="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-3.3.1781-beta.tgz_1513899177545_0.07832957850769162"},"directories":{}},"4.3.1782-beta":{"name":"meetup-web-components","version":"4.3.1782-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"7dd9a3ff2fd36d092b8d39d3c21764f2d1ae9742","_id":"meetup-web-components@4.3.1782-beta","_shasum":"9b01bcde2a52fdd29292ab7d73c91b986e5f106f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9b01bcde2a52fdd29292ab7d73c91b986e5f106f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1782-beta.tgz","integrity":"sha512-fxoRXVYkKjOBExh10d/REnr9FmCC0NfI3DpqNL8T7IflBIrl5cHN2tAaxjIoAIwUohCzKy6YnwwD2Dqe5EiGvg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA95/CUvo5/OrOXqeXiZYkHVJfsqlLFOQYlUzQh71EolAiB7FD6KD9B7wHiUsfvK9LELQcT2IHXPjmtFdGkoM0smQQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1782-beta.tgz_1513965924427_0.20398134551942348"},"directories":{}},"4.3.1783-beta":{"name":"meetup-web-components","version":"4.3.1783-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"67f366fee43dd886d48f57f8eac04f464afc0e83","_id":"meetup-web-components@4.3.1783-beta","_shasum":"b233120929776fce8c9726cac9edf356ca2fd6c9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b233120929776fce8c9726cac9edf356ca2fd6c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1783-beta.tgz","integrity":"sha512-lh4zBEF7bpqzTz2myPjitghAYqaAHJ0G3aT04EGpFJbBzO2xqPKAmnZoxdgF3Lo6sgugG+e5aICK2LvIqkGl6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWzEbhdOgZokPF3oXIrhWLQEOWXxfu+N1cVr3hPkerdgIgcG1mTiF9zQbtNphv3yqaLlboXGebLXCidrb3uH/3JFo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1783-beta.tgz_1513966136901_0.9647823555860668"},"directories":{}},"4.3.1784":{"name":"meetup-web-components","version":"4.3.1784","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"ebce10b4a320efc1d0312e1c66c22894005465bb","_id":"meetup-web-components@4.3.1784","_shasum":"b5985058e8c717935344043b4d1204e0c624c9f5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b5985058e8c717935344043b4d1204e0c624c9f5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1784.tgz","integrity":"sha512-vLmr7RVPB9BdU/oKwtCBb9AvelfQfQw7uZEk2DFQdV8DoafHZreZzXFRNMAxa81qH3JemAQ6eS0e8QV4PkPh2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKlEI8LDgfZhCv+u5SpRWQHoCP1uBQd/tBUd6uGr1UQQIgBIczWfr27AcdufCfdoCGNRcKmLQo2V7yV/suOl/2qNo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1784.tgz_1513966553437_0.7632046360522509"},"directories":{}},"4.3.1785":{"name":"meetup-web-components","version":"4.3.1785","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"7799419fbf9b33ac2712600c8ac1653b0ac286d6","_id":"meetup-web-components@4.3.1785","_shasum":"a99ccf304db717314d6770c5570c76b8637493bc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a99ccf304db717314d6770c5570c76b8637493bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1785.tgz","integrity":"sha512-p6bS8P6qZTTZOnkAax14wwm+aUPfN0wkDLYDNVq0bvSct1wz01dYacGSjPnxgzgI6L470s3FQR5a9Tt7Zmdxxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCh6RyW61AnG4HT1zlM6ewsfPzMEUURMenls8vMRZYkwIhALndTqDYt895hjLUMxetR4z7QJLCp3tSjyx/+8LEQQk7"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1785.tgz_1513966883459_0.1668866144027561"},"directories":{}},"4.4.1786-beta":{"name":"meetup-web-components","version":"4.4.1786-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^2.0.296"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"23a654683430a7919cfc264c89bb680158294415","_id":"meetup-web-components@4.4.1786-beta","_shasum":"abdbd5f89769752f3cb9d8036be1116123f8f354","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"abdbd5f89769752f3cb9d8036be1116123f8f354","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.4.1786-beta.tgz","integrity":"sha512-y2NHNQs9Es2S2mhOBKYcaE0+uTN4vIBZLKusoF6mXp5XGvYAPiuBj7c5J5Dn2ZLdfrAp1qDMEeDNld8yFN2Isg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICHsl5Pz7wSA4zPGpbgZINd6upUomboA6GI167+SIeS4AiAzWl9hFZ+emYlbOJ4p9JDaMaOaaShGFoS4Inb7AF9ctg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.4.1786-beta.tgz_1513978720587_0.5143998255953193"},"directories":{}},"4.3.1787":{"name":"meetup-web-components","version":"4.3.1787","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"0929a9ad36782a38bb356f55c6e0a6dee150edf0","_id":"meetup-web-components@4.3.1787","_shasum":"8f1b8e5b68e67515c2829cb4f8cc6083a04dcf22","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8f1b8e5b68e67515c2829cb4f8cc6083a04dcf22","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1787.tgz","integrity":"sha512-7BvcsTJY7Cwo2Zo0smPkmwyxyoOGUbTPomVJgbHWf6DhbWM6j91oXdf03ndldIiPz9x+ptWFE5BEDbhpzK9hEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb/bbjNQam5WzBUkUsjVIgSTsPxMF6v5ckAvP66w7B/gIgBX1KPAseLF/vGj5p7t0zvpUEQvP2qu5a0wY3ljtJlf4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1787.tgz_1514000202330_0.17110978090204298"},"directories":{}},"4.3.1788-beta":{"name":"meetup-web-components","version":"4.3.1788-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"c9d9911d606496a010da12051e9d4f2f97efb546","_id":"meetup-web-components@4.3.1788-beta","_shasum":"8776da540b8810988f71faa511140fced1f3efbf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8776da540b8810988f71faa511140fced1f3efbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1788-beta.tgz","integrity":"sha512-YAOXEReVMw/aNLXevGsC1IqP83ELqmsNfjdIPv46DOgnGtcGwH8sbw8LQQDH2kmXrwQBuiVxdRdte528Qzo07A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWVFnLZJky6Zpp6ePQjbhop0bEwNfrtlWfpNCdt5hEmAiEA4U+rPKaBof0TMD23DZ/OhwTJv5tWSEb5iG+kGqXoQCU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1788-beta.tgz_1514481810284_0.9150405125692487"},"directories":{}},"4.3.1789-beta":{"name":"meetup-web-components","version":"4.3.1789-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"912fe204caf6843ffd988c1bf6ea80656ae65ad0","_id":"meetup-web-components@4.3.1789-beta","_shasum":"9909ad14fb4a056cda51d4891d6467cac6ec6be2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9909ad14fb4a056cda51d4891d6467cac6ec6be2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1789-beta.tgz","integrity":"sha512-jQV0WEcsJ4YeOGp206WE5oCSZDlih0E73h0DGgQSTWKHWqMBHHCF8vp0jFMrYGGSR63cSTv6LW78WKQMEMW8Ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkqB0OH8Z/h5hB5XEbIP7eVtSOa72CqYs7xbfgBBlUOAIhAMTh+K0T5nt48yAd8E1lUfmNwSTeFztLy7QwLmIHCy9u"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1789-beta.tgz_1514481837776_0.03172364248894155"},"directories":{}},"4.3.1790":{"name":"meetup-web-components","version":"4.3.1790","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"bb7132b90fe10756fe04bec8ba64fb5e158f7a10","_id":"meetup-web-components@4.3.1790","_shasum":"9e546d8f5250c0bec28ae1d0bfd73229b5166a10","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9e546d8f5250c0bec28ae1d0bfd73229b5166a10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1790.tgz","integrity":"sha512-1ME8Cql0JQNQ9eQU2L847I9XPGbzNMLWEWp4+bMH3QC1f5jY8RzxvLGgoi1/OQloSCAe/FIv04ZFUfUhVWnK2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxXF1V2akf4YXPEjIdZbQbZNzfApbJIPbamPBj/ow3DAiEA9zfTnuFtOdyN//gJcleEpZQURt6bPi81Z1W8BG79338="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1790.tgz_1514482270579_0.9885065963026136"},"directories":{}},"4.3.1791-beta":{"name":"meetup-web-components","version":"4.3.1791-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"0d889f861ede5ea98b085a0e711fa5bfc97221fd","_id":"meetup-web-components@4.3.1791-beta","_shasum":"ba28d5a5c4c4965809f466743f97413a21fddc3d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ba28d5a5c4c4965809f466743f97413a21fddc3d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1791-beta.tgz","integrity":"sha512-WjtqPm7kjjiIfyUVYMMn3TwbUtgSmy0hFFXyq5+MWKrKvvzSsGmSAZuMfOU6WLkLwmPuGu/zCvwIWWuCif8Qqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4gw64Na08vTNuibLvsZflpcYZ6AtNo21oZeZgxtINDAIhAI+sBNZrF921Qeth30Dd5u0uW/AKD6Seegolpqnv+Ybg"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1791-beta.tgz_1514484956095_0.03184973751194775"},"directories":{}},"4.3.1792-beta":{"name":"meetup-web-components","version":"4.3.1792-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","recompose":"0.26.0","react-portal":"3.2.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"f51d7785b500acdd2d884fdcd024b9ffcfb5c343","_id":"meetup-web-components@4.3.1792-beta","_shasum":"e5bd44f5b6b37debeff3dc9fde69b947150c238c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e5bd44f5b6b37debeff3dc9fde69b947150c238c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1792-beta.tgz","integrity":"sha512-vfcBPWM9qPkX1fG1nmD12v6qlsEOQC8qldQt7eJjDVEkExrRxI44BdEv/Q7wIAdsZLeFLDMyuVisj5nbD3RU7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGJCntl7Haj4/s53iwXeVwcQK33+YxV2LsZi+WHuBnTgIgIFWt1IILuTipYgmMT2+zh6PQZgCeGOKHDoiZCcElgiU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1792-beta.tgz_1514561015454_0.2540029732044786"},"directories":{}},"4.3.1793":{"name":"meetup-web-components","version":"4.3.1793","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"a2004697ebc5a81f9923c2f95cf81f23d317dc15","_id":"meetup-web-components@4.3.1793","_shasum":"10b79f74aa010fb0184fa18b192efcf426e4f329","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"10b79f74aa010fb0184fa18b192efcf426e4f329","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1793.tgz","integrity":"sha512-9p+Ga9d1O6zQ5RxcU7j+0OI4YEV1Slr/LPptX2n/azSIamXOoI9QavUtwUWhJ3K0pzcdlydCKzLIh/Sjr6l4bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICIi+65nHSjdYNp04/Qe/71srIwQ2jL4PZ0Cjq0QbpEBAiAMdBftG2/jZGlvgYh2uwcBKn6ld1tEUbasNDxRWRgDMQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1793.tgz_1514563813730_0.4903493670281023"},"directories":{}},"4.3.1794":{"name":"meetup-web-components","version":"4.3.1794","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"afc3a5d3ed4db435c26470bdb822536730a4d9c8","_id":"meetup-web-components@4.3.1794","_shasum":"bf948620d5e2041ea130c27d6fd1d8afc2c11815","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"bf948620d5e2041ea130c27d6fd1d8afc2c11815","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1794.tgz","integrity":"sha512-S7ZSA6CXWAuOQG5qU0FxcWdZcB2mW0pXacoWnWE7MMlsp89UKj6wuHHYinarTK0mJIqRloCbvfM2jErTmfjTEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+2Y/5V/qdlXszLA/iDtI/9/oADXmOpPMjkXFv5beyrAiEAt5o/jy60bfOr1s5y0hsp+F/46U+aQX4Vei/465wj5QM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1794.tgz_1514566818754_0.6401797912549227"},"directories":{}},"4.3.1795-beta":{"name":"meetup-web-components","version":"4.3.1795-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"558c662d7f3e4ff3b5f137932c6cb291e04d642c","_id":"meetup-web-components@4.3.1795-beta","_shasum":"6a82b3cc95b4e821139dc2fb82857a07df7e481d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6a82b3cc95b4e821139dc2fb82857a07df7e481d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1795-beta.tgz","integrity":"sha512-VuahjgOdlFHfp4Hhd8uGfCVhSVgt2Lnlyr0gmmnlBLeTV/j5X8ErLebKtmdsbN3ARkZr7WSs7tTBJsTxdrPvQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOnV2WvjHenaczIZkyp9pTCK41HNssqTfkLNXBFNXeZAiBAJL4gkBAaf8N3pt7bsr7rZUHDveC5WlRLIwugfr/Edw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1795-beta.tgz_1514575376649_0.03547275857999921"},"directories":{}},"4.3.1796-beta":{"name":"meetup-web-components","version":"4.3.1796-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"a7b2d5390c8fdc9a2176633668273e77e0ce6a51","_id":"meetup-web-components@4.3.1796-beta","_shasum":"b8e5b2808c9cd9b2411d07f2ad46daec8bfa4478","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b8e5b2808c9cd9b2411d07f2ad46daec8bfa4478","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1796-beta.tgz","integrity":"sha512-2Yn8Z1En22If5eUnIIzeezc+PVRmVe5u9GV4qZAdI3/bBfBLEk7almi9x/3L92msDeBzbkZmlZ0WRxMklHc8sw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrQMFotuBWvrbHglR6J6vTnUgpc6OcQt6MWOHG75piSAiA4X1lNIaln0WsA4iFtPWQFijUk6BvTdu7IEU7IT+EMOw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1796-beta.tgz_1514576328190_0.39875876111909747"},"directories":{}},"4.3.1797":{"name":"meetup-web-components","version":"4.3.1797","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5565c9d993e2eacb7d1295dc6966c006886f85ef","_id":"meetup-web-components@4.3.1797","_shasum":"26bc6b6cca8b82714dc699df473d5a612bec74cf","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"26bc6b6cca8b82714dc699df473d5a612bec74cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1797.tgz","integrity":"sha512-mxMHJ0QpGGL7xRUq9SO+MjeG1LLLUMqruLJkjozVd0kb/HxoH6U4HBbEdOMbtQjkEfK0sa5V0rk31/Eup4g/Bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFfh6U84hHuFrRPE7Fye3SvWEJXzW7nYLyGtoFUNuRHgIgTSF+A/9IYgEPeIXRsbIfB8LKTBTNd3lg7tZct0oumGM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1797.tgz_1514576625596_0.09398847375996411"},"directories":{}},"4.3.1798-beta":{"name":"meetup-web-components","version":"4.3.1798-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"0efa460b11888a0419207c6a3f1758af37b447aa","_id":"meetup-web-components@4.3.1798-beta","_shasum":"f4da2d801cdd7af215f45cc5de08d3617cc000da","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f4da2d801cdd7af215f45cc5de08d3617cc000da","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1798-beta.tgz","integrity":"sha512-YqPmjpwT/NgMQqcqJzYL+XR6Ag3UIojWx8oBK+Noik9iA3256EtLJnh4bBffqkKcAD9xIQh62DXZdRGlBaz4ZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/3gYfsqdXlFmeGq7BBucAYstS+ody3Rk0sjDYzEBtiAiA8bhMREDW2fIJPj2mjboo3eSus+QWhqxUYTNvBGP3Tww=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1798-beta.tgz_1514925718174_0.09741999511606991"},"directories":{}},"4.3.1799":{"name":"meetup-web-components","version":"4.3.1799","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"e94ffec5caa011b032ea563864c73034057c20cb","_id":"meetup-web-components@4.3.1799","_shasum":"e39c9a7008f5f95bfdbc6dfe4d11aebe394bcf69","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e39c9a7008f5f95bfdbc6dfe4d11aebe394bcf69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1799.tgz","integrity":"sha512-CpOQYHryGHvgESR/7GJ0qbr/hCmSbxtJGs/Vka+q/Sic1pFt+r4DtLMQxRyxK8GhSgaZ6xiGI8onrUR5CuYNIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDk8xag1WsIN8F6mynvz9m76wd8s+zZpDLIl0UC5sIgSgIhAK8hiYMQGtZol0MxThBhY6gwaVfxCwd/AIQOWulGrRUH"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1799.tgz_1514993300978_0.4099759962409735"},"directories":{}},"4.3.1800-beta":{"name":"meetup-web-components","version":"4.3.1800-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9dbe7a9fafc2ef782cc3402d2f5c079ca838b32b","_id":"meetup-web-components@4.3.1800-beta","_shasum":"a9a6b94bebb27cf780b4a70b19691e797729fbb1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"a9a6b94bebb27cf780b4a70b19691e797729fbb1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1800-beta.tgz","integrity":"sha512-H76/KIma+HPvS+ckDjyYVpeF5MOlZMuQi2uU+Tu9NP73PyZMKLw+tW+83Xo/9u/Pj2iMZcAogBSg07xQi6ntYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrB0ZjqsXdOHSt+zyDrHFEOgERUCuVxSqF/9xC1THi1AIhAM/FwUqY3naR0lgMbMUdPH/puMfaYBjenUCCFD9oN1gx"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1800-beta.tgz_1515015205049_0.5675589863676578"},"directories":{}},"4.3.1801":{"name":"meetup-web-components","version":"4.3.1801","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"false2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"c86b67e84062ee00ae3c321382ea08fb1ab8778f","_id":"meetup-web-components@4.3.1801","_shasum":"152cc1eaac2935d811b4892aa6bcc7ffc2793981","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"152cc1eaac2935d811b4892aa6bcc7ffc2793981","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1801.tgz","integrity":"sha512-+DyU4SBrA6c84/Zl5cbTJ7r5e278jkJBGsBjaZGEHkDnKST0M+02vgoH7C6wXW9vBlVIcmabh+cfziXeOw6ZbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVoBEdt98453smWCB37wrZwsQPC6HhajdWUAQzZwqTGQIhAP9K+CZZa87CVwXEhrdj2frNrVhXsOYTIWRN+0mjXY9A"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1801.tgz_1515100036912_0.03160367044620216"},"directories":{}},"4.3.1803-beta":{"name":"meetup-web-components","version":"4.3.1803-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"ffa438f2188eb2b9d0e7999e16ca7367cfb0bca5","_id":"meetup-web-components@4.3.1803-beta","_shasum":"3a89b7f98423c1f42fe53f21c86e48d03d99d6d1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3a89b7f98423c1f42fe53f21c86e48d03d99d6d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1803-beta.tgz","integrity":"sha512-Np+lfs2pFuBGBDglj3h6t67H+ZXwEAOxFRSIgVpd8Vi7a2k9Nl+3T6pCvhHRmpLEif3FNdi6WCvO1/hNgesFrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6kLqaknuxlD1Qk4I6Rg/lvNY3w4VJvxL/wcVgEuj2iAiAtE2tF60f8RByNNrbx/SwOxN7X4Fcik5j6kNiE59QV4A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1803-beta.tgz_1515169750984_0.38100102660246193"},"directories":{}},"4.3.1804":{"name":"meetup-web-components","version":"4.3.1804","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"d0e65a652b79e47797f461f311acb32884ce9939","_id":"meetup-web-components@4.3.1804","_shasum":"c4eb885667889695a47ce64ef5afe78546791179","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c4eb885667889695a47ce64ef5afe78546791179","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1804.tgz","integrity":"sha512-PcV6EBEj/Jh9qKUYoEKk31WjNQKV4jgD6ae6V6Fl1wIi9PJm3ZnwpaNShyWPYcVUl8DQZ9ycospUVWJGTNSiLw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDccZQtpv8BiRIRSuNahhsNfbTq+POvKjlmpvmBhdnyLgIgf+GBHJ4qeCz5Rqg92VNMs5To/KhCZAanY+Oi2qc5zyg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1804.tgz_1515170302161_0.3621833708602935"},"directories":{}},"4.3.1805-beta":{"name":"meetup-web-components","version":"4.3.1805-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"a748c6c322e077a1b49d63101b1e2fa7ebc8f68d","_id":"meetup-web-components@4.3.1805-beta","_shasum":"257c2ebf28c02c9fab2d0de0c160278b866d31ea","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"257c2ebf28c02c9fab2d0de0c160278b866d31ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1805-beta.tgz","integrity":"sha512-pjDkGQZhQbnxERkxOoeoDFdnmc2CSnIovytAcnOay/unYKzPMbDWqnLhlnwSGHHYgHL/YJV1na43NCocdxRr+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCplyQK4BAZsXooZvxkNBnUP4Ftn5FQB0u7WMltktyn6QIgWpjPp1ZKz3bZRPSCm7d+qnwiMjcyFhJkyOkgpyDB3+E="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1805-beta.tgz_1515182502282_0.1368301440961659"},"directories":{}},"4.3.1806-beta":{"name":"meetup-web-components","version":"4.3.1806-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"7e2869cb96b6415a0eeaa837ed2f9abb2e718dd8","_id":"meetup-web-components@4.3.1806-beta","_shasum":"9d08fa3da4bbe51d2f5c304e005a8a9cffa5bf98","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9d08fa3da4bbe51d2f5c304e005a8a9cffa5bf98","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1806-beta.tgz","integrity":"sha512-qMyJNpcTQ02qrus3xjuVxBCKGXk6YQ1HE55ebCFmDTfaqGj4qfWYTq+wtJbCdHSZHNB4fk9kBPRKjh9kjnIcIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkVVBL+MHNDzlRMsy4W0hIW8t0l2bWLDEm4hgkYqaTIgIgeWDDmOT0nYICwYTQyhg7jgspql4eI34Cpz3HkHm4Dok="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1806-beta.tgz_1515183461834_0.4708612561225891"},"directories":{}},"4.3.1807":{"name":"meetup-web-components","version":"4.3.1807","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"28a0edd281157cd606251049b076d1f429a71075","_id":"meetup-web-components@4.3.1807","_shasum":"c51bfad4b6ec0f986c899299b567aec206cc7446","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c51bfad4b6ec0f986c899299b567aec206cc7446","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1807.tgz","integrity":"sha512-jjVHSkjZj0viUTpJ4PxQma6eA7vE9hE8+gzYi9o+de0Lxa5Gm/pFs6HVNJ0WxJ4fZLz7qzB/glgGt7GDsOQy4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBDBJ7IBX47DGQXCEEG6qO/ynMAxQh39b6BOvoHpbWbrAiAJ5cff+fdoyMQ7Z+XlAeJ3uSP6rMViohUv0r3PkE0lQw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1807.tgz_1515183861991_0.7837935467250645"},"directories":{}},"4.3.1809-beta":{"name":"meetup-web-components","version":"4.3.1809-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"fd8b323ab0747b54e45b9be4aefc5e67d5d3f8b6","_id":"meetup-web-components@4.3.1809-beta","_shasum":"47c7d2f20e1f2581dc20defc6210e1659acc40ae","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"47c7d2f20e1f2581dc20defc6210e1659acc40ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1809-beta.tgz","integrity":"sha512-vXALU+uO4aI4ajBUdX25ulkM06O1KMXhmw8/rV1gr+Wdb3vLRkhJ+WfReSQVnPHCBbSZJZHVUHLUrugXUjfcug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqmEol8YXxPkQtxB7isRyzWX73EjDjEnrXKztF1TESYAiEAp1o3dTwO6VaD6J4TO5ByQubY7h6j+SgvbL73phll0n8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1809-beta.tgz_1515433136910_0.9547331752255559"},"directories":{}},"4.3.1810-beta":{"name":"meetup-web-components","version":"4.3.1810-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"a100bdf39f378fda59b6e23fdfa8a06bf5d8b3ff","_id":"meetup-web-components@4.3.1810-beta","_shasum":"082334c91a8027544c65129262599707a873f09b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"082334c91a8027544c65129262599707a873f09b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1810-beta.tgz","integrity":"sha512-+G0YXJFBsaoOm+ykEJdgQ961a18IRJ1WbZ5rKYGjmB7XiSWEGHzsKWRIHSdzxxnuP8/e3t5m6JypWZPe43WKww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW/ICgrD4PC5EbLXVpXB1ouxxYPrtT/Zrlkd+eG1r29QIhAOyol94O8zLIly/1W+R90dLOO1tWHBUPKOiiV1qU467/"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1810-beta.tgz_1515433254737_0.09458265569992363"},"directories":{}},"4.3.1811":{"name":"meetup-web-components","version":"4.3.1811","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"518ff6021a72a478a4da23d000e666784b6287e6","_id":"meetup-web-components@4.3.1811","_shasum":"11f4f88331df20864736f7564383263f7fe43d74","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"11f4f88331df20864736f7564383263f7fe43d74","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1811.tgz","integrity":"sha512-d6XVPG7TKmyzgi7ljpDeQMHQryz3AMlgdn7rHY3biHqPHX3rKJ483j4sBrSPjwtt5dQ+wodI1KKnOztOknX2rQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4qWdDIxARkTtkJGjtMUunm+nUfLZIqfFLE35tlmN3BAiEAq7VYP7SQPLlBuVaOoRJq2m7HMISeMOF4AxkAPkMEUHk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1811.tgz_1515437721552_0.7328734304755926"},"directories":{}},"4.4.1812-beta":{"name":"meetup-web-components","version":"4.4.1812-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"63d25a5ffde66e200488cc100b05fb897be595c9","_id":"meetup-web-components@4.4.1812-beta","_shasum":"631c8f7055c86e51235969c2047bc624fe0bdf73","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"631c8f7055c86e51235969c2047bc624fe0bdf73","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.4.1812-beta.tgz","integrity":"sha512-86oKTgidS1z3YMcRMwIBohAKO5ANzTY7njAkbwFjmWoEtcg11A2WmUJTMzRL5B0bU945fQvsr90JKyQlcmSK9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKBhB3iAS4i+npuIuOOqwv72Zjn7GIOFWI5jpizSca+AiABOLcOGEafIV9TSFquMGASO9I2AGIgeAwSiCNXm2BvDg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.4.1812-beta.tgz_1515527309176_0.3694125241599977"},"directories":{}},"4.5.1813-beta":{"name":"meetup-web-components","version":"4.5.1813-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"158de5eefffaa62ada30a40fa6d2da39d8278250","_id":"meetup-web-components@4.5.1813-beta","_shasum":"b3afead82252a3a55624f821fa708087762176a1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b3afead82252a3a55624f821fa708087762176a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1813-beta.tgz","integrity":"sha512-ahDzV+z6zNQeD0gtNilxVRqtVAONP9XYPnFsiDx3gTKDHzjLNGNjh6+/mon9ayDPQ/65Hy6sN9viIobhfAvXKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSQMtSGhpcZniJ0gA3S4C52IjOw6aD8aSwBA2OUnjgGgIgOSCmUvYt0O0qmpGqmC8fFi2NgzeD7HGaNMWzcQyxwLo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1813-beta.tgz_1515527834889_0.3285246421582997"},"directories":{}},"4.3.1814-beta":{"name":"meetup-web-components","version":"4.3.1814-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"19fbb1acf8edb977e83374332f890ca54828094b","_id":"meetup-web-components@4.3.1814-beta","_shasum":"87ab6cbe680f8925ee34f714a1f6d8a15e39bdb7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"87ab6cbe680f8925ee34f714a1f6d8a15e39bdb7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1814-beta.tgz","integrity":"sha512-LrBFx37PioDCZnANQX4/vXblnoJQW2wEcg8Vj3hn+2nTxrU87IEvIuegwuCsXx40SwppKUAn364/WvUA0RoOJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlVYv2MP0zqtO4kUE0nQytMvrSoxbskdU2fXB7y2EE0AIgC+UdmVh7ZPbWiwrRkwQCiFgQ13yAgRX5oqEYnqTXkgs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1814-beta.tgz_1515534202830_0.28641644306480885"},"directories":{}},"4.3.1815":{"name":"meetup-web-components","version":"4.3.1815","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"668401c8c4aaa7b8eb0b6e6d06f58df3398f67ae","_id":"meetup-web-components@4.3.1815","_shasum":"dece51e11e79fcfea6bec62846c2ca9666fe3e8c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dece51e11e79fcfea6bec62846c2ca9666fe3e8c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.3.1815.tgz","integrity":"sha512-uhECkq3wSRCz0jz+0LJkMah4qQdeXGNqXoxyTgLSdANaT6NWM8ByiexHHpLLgtGWw9GPbfZhiD9oRIi3uBncqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSbMjeKdNA3zEJBDy/RtqoysUDkgp4D70NgNO0No41VAiEAyYLWDQazQ6+hvChR/59vDzFoMObwiDO79zN63GpRDkc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.3.1815.tgz_1515539519886_0.693140666000545"},"directories":{}},"4.5.1816-beta":{"name":"meetup-web-components","version":"4.5.1816-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"882e30501d3cdff971f3bc18d0beb1c076532076","_id":"meetup-web-components@4.5.1816-beta","_shasum":"1640296536042a075146358d5acbe5741f6c87d0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1640296536042a075146358d5acbe5741f6c87d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1816-beta.tgz","integrity":"sha512-keOTUvdsP2EZuXRODvu1Ap6lSeD4JNLJTXXRWfpLQZaJuH5j8ilCv7wa78qodSlue1vE0z+Oi929C+hV32ZXHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1AjQRO2niAJs5qpiYUvieJfM1dJEaU0iHP1cVtir81wIgJwxRn3jIn1KvrlbMlwZDW+N0ogoDoKDbi+lD5tsNWMM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1816-beta.tgz_1515625392489_0.4707148466259241"},"directories":{}},"4.4.1817-beta":{"name":"meetup-web-components","version":"4.4.1817-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"ca8cb938cb2220147de0a1af277ec1ddf87dd8a0","_id":"meetup-web-components@4.4.1817-beta","_shasum":"dfef3a52c35143a6cd322b46ee3b07ca7b5369e3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"dfef3a52c35143a6cd322b46ee3b07ca7b5369e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.4.1817-beta.tgz","integrity":"sha512-31qf8kt+2/vBX1Nh7W58EGGUum6Fd80WmUlI64rwy99DnIHok3toMl6FweP8VILJCS8PJ7jkCTT1fK8Eig1eqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGWYbQsBfztBlcM9aQBPt/EMFlf7szgtRe+hDAwLOGnWAiAYsKx3RHApIE7PHzGSLMxz2zpV7GavEA3+QgIOvnRVXA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.4.1817-beta.tgz_1515626900008_0.43610766413621604"},"directories":{}},"4.4.1818":{"name":"meetup-web-components","version":"4.4.1818","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9d6bace40e07b2a1ee0b6ba94fbc836f962c2cf0","_id":"meetup-web-components@4.4.1818","_shasum":"ca91b9cc15d7c8f23b90f654728c5bb656183538","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ca91b9cc15d7c8f23b90f654728c5bb656183538","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.4.1818.tgz","integrity":"sha512-JXuoD6jr/raELgq02cJSCP+AZPNiQoN66I7DgPM7Duv6ZDwGst8FlWtWHyDC06Xw+wRt098r3qHwISeqJk7N8g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw1vnITYs7/uS9X61JOvAR2cc9JW/Q0BMuFo79IfZ+7AIgIFFULppFDYyiiiTCRUBb1thVyTcqIrtZWzv/Eg4X8wI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.4.1818.tgz_1515776060477_0.2180616892874241"},"directories":{}},"4.5.1819-beta":{"name":"meetup-web-components","version":"4.5.1819-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"38979180cf59fd21f72f0574d9da21bd65501fd5","_id":"meetup-web-components@4.5.1819-beta","_shasum":"ec1130780b5107bd316aa483819f59f314ca8557","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"ec1130780b5107bd316aa483819f59f314ca8557","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1819-beta.tgz","integrity":"sha512-MBfR7NpoIuB5y2eReGBx3BxDthPstyOdQUiJ5mw/dJpIO5tnp0+CVcJrMeWuXyFMY3W99usR5ZZtmj0IFtAGFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmzAC2HUoalLSDhMFunASkIcWReSHCb2PNiALBoxYEJAiEArA7EldW27B7+uwUeg2KJpU5+rCLF187q91+QJ0DAAXQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1819-beta.tgz_1515776724382_0.10895558074116707"},"directories":{}},"4.4.1821":{"name":"meetup-web-components","version":"4.4.1821","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9e042f0e035ae8d4551d46151822f07ed5fa8682","_id":"meetup-web-components@4.4.1821","_shasum":"5fdf0cc418283da0d986d611125fe96d5d3fce27","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5fdf0cc418283da0d986d611125fe96d5d3fce27","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.4.1821.tgz","integrity":"sha512-j0iDHJ8+8vjKW7fSZYC3xmndE1c5CUssnU0f2Emb0hWRekZYTfR0Xk8brPt6xxzZSVwIuAtLu4gNjZ4gEkjiiQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCItKVfaSlPYmVRaadXGqUiokK4RVmqw0D5Ir2ScwQ/ngIgU3qGcFLfg13wosTEhHdvI4yEJxYe1m4YjdPfoQonwxM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.4.1821.tgz_1516920832070_0.08267439855262637"},"directories":{}},"4.4.1822-beta":{"name":"meetup-web-components","version":"4.4.1822-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","flatpickr":"3.0.6","raf-schd":"2.1.0","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"c1fd2fd83c0acf578dc231c96bb13ac39ba809cc","_id":"meetup-web-components@4.4.1822-beta","_shasum":"1db582b713e73d7092c74a77d2e1f403c7067b99","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1db582b713e73d7092c74a77d2e1f403c7067b99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.4.1822-beta.tgz","integrity":"sha512-vytIegns303mM9qPL0mGy2RTMJAynN0BKRYF7Cd5ivomZod/M0n1QwENPR9ja13aqwCdxMInr/Epdx2vfS6VTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG4GHbi4itMgVwY+h1iyRyl6/nVECgKXEl5ARb2wwCiPAiB7PWCL0smhhOAfo3tkQbLYu2RnEr0WU+chlZhTRodttQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.4.1822-beta.tgz_1517016138059_0.13089479017071426"},"directories":{}},"4.5.1823":{"name":"meetup-web-components","version":"4.5.1823","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"dc5b1ccc2b80a43568067699058c03c6b8c6783c","_id":"meetup-web-components@4.5.1823","_shasum":"358196e01fd361d5c318bb6d975bc35ac758cedd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"358196e01fd361d5c318bb6d975bc35ac758cedd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1823.tgz","integrity":"sha512-9C9/dZpdZdIqN0bg1/AaruSia+/uf8lXmXlWcGF1ratqwU6t/g6AJ8uxs3asQAQ9r+VC9L/bWc71ALlloFINRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO1+CLlSQ+l3iFlUzfxwcrVye/CbnamXXL7+BvHQCRKQIhAJWUS8pAzduTr91BuRWZdTPf76SgLKU9JLrau25Ea2XX"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1823.tgz_1517235224598_0.3149539034347981"},"directories":{}},"4.5.1824-beta":{"name":"meetup-web-components","version":"4.5.1824-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"28b64e7759bd5dadef3fea0f757fd5674e6762e2","_id":"meetup-web-components@4.5.1824-beta","_shasum":"604dfed46fd2ca1d31193d036b10ca3d7d28414c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"604dfed46fd2ca1d31193d036b10ca3d7d28414c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1824-beta.tgz","integrity":"sha512-6EOEB9odi0CIOKN0M8Zyq15QBRXBaAHc8MOH4n+RFJzch8606svRkQueMWKzGaBW8YH9hqpEtob4uYwoSEpCkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAlwd5x6/UEFEf5a8nPjRwNVufAHfaIV5xe99HMoeJydAiAuV7d9RQUL+ubs8YGK+OJjX27gsigsbCeaPy184sdQAA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1824-beta.tgz_1517238999782_0.941617164760828"},"directories":{}},"4.5.1825-beta":{"name":"meetup-web-components","version":"4.5.1825-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9fce12bedf10411610a620c2863e7ac9d2d88825","_id":"meetup-web-components@4.5.1825-beta","_shasum":"f35832c91c718cb0eca677f3d042d464c2de831c","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f35832c91c718cb0eca677f3d042d464c2de831c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1825-beta.tgz","integrity":"sha512-YJMGBB4knFDzY5Ux+CNSIox3UHPCA2zvG4ehJqgLPRfO/gn+DZ3EA4nU+KBiVaT5p67GpI5VbTl630yv9+JhMQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6ra3Xktvzywdm8r86yoPiLWoiVeKVx6VNbqXpoFRJ5gIhAOSuNxjO3PAO+ZNY8NFNPO8L2wxUO48xNANWh01Pp7jz"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1825-beta.tgz_1517252243200_0.6547919837757945"},"directories":{}},"4.5.1826-beta":{"name":"meetup-web-components","version":"4.5.1826-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"71312c82823ec66d7525b298862078e64677dd67","_id":"meetup-web-components@4.5.1826-beta","_shasum":"083faf31eb5d1a1b4f8ea9751d18f2a7eea5f373","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"083faf31eb5d1a1b4f8ea9751d18f2a7eea5f373","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1826-beta.tgz","integrity":"sha512-pNrEbKFIW2/yJ8bTsO7KkfZKmNBqC94Ta4LDKHbk6FyuFZVAJm4aI5vo8KrvjnvdFITXFRm/dUO55bruvD5HPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzqpBpqFhaMtlzaFHP1FwAOlLQEw0wq5uY+hjN5tqkzgIgAgWeb4ulTyll9VZUmtngpU+c6EPnUF+cSN2ic1PuHt4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1826-beta.tgz_1517261595046_0.9575498236808926"},"directories":{}},"4.5.1827":{"name":"meetup-web-components","version":"4.5.1827","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"ab1a25c85bdfec8693edd724c211e261851e5dff","_id":"meetup-web-components@4.5.1827","_shasum":"cff76e50ce28fb62f9325b06e2a59f3d2356ecea","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"cff76e50ce28fb62f9325b06e2a59f3d2356ecea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1827.tgz","integrity":"sha512-TMy0A5dnkyXxnjQPEhpc2RJnb6T99y5lt7G1mWSlbcxYt0dr1iXOR/y/od80eKZ0xyakxWkTtitoL5+RyZU2Zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoczaAylKEWn/7v7SYGVO0OJUBD3/b6XGbEN0Jk+vMqAIhAMc4lIj81p2vMjqWdywVb2576li3O8pLyruUeb3AeFIT"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1827.tgz_1517262370287_0.929121203487739"},"directories":{}},"4.5.1828":{"name":"meetup-web-components","version":"4.5.1828","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"3.2.0","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.1.0","enzyme-adapter-react-16":"1.0.2","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"94c9e7b76d9c11e60f4dd0cc1de44df8b1184d58","_id":"meetup-web-components@4.5.1828","_shasum":"29ffeff02f9c1aec6b9b55cf9d40928af31715e7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"29ffeff02f9c1aec6b9b55cf9d40928af31715e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.5.1828.tgz","integrity":"sha512-jZFQPNNdx7msIghqigv5m/M4R2YDiCRCuVSLtfM/JK1ZZrGDlt0rDcdfomjRRHLx2nUaSQOwmkyPhdHZRD6QSA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFtqtkzwg3gVpS0pf+mREE+tkZZwZAkF9eatqzm5P5EwAiEAwSaVnsPC9skxvqdH+AbXXu6iperFztSItNq5SkifPS0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.5.1828.tgz_1517413533262_0.5376978819258511"},"directories":{}},"4.6.1829-beta":{"name":"meetup-web-components","version":"4.6.1829-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"f40dc24b7813f5d9f00495b39d2220d2b812f617","_id":"meetup-web-components@4.6.1829-beta","_shasum":"19241f965ffc7c5effc62a5edfb2385153b2b1f0","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"19241f965ffc7c5effc62a5edfb2385153b2b1f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1829-beta.tgz","integrity":"sha512-Q8fUFWzetFp0ihKZzVrBfXpA6W39XmJOCZGjF/qVwXQBoUYpyb9f1MkcwIzt8A6PVJJ/xMQwnonHFh7pSKefcw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9Gmq7F1yUfSzFAwWv8QvdakT3A4PVeuq4wawJgufwbQIhAM5gLWTbRexIJ5CAgYOfjoj7LS0vXo3rKCpXGwzfFr3a"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1829-beta.tgz_1517510343055_0.3809092198498547"},"directories":{}},"4.6.1830-beta":{"name":"meetup-web-components","version":"4.6.1830-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9077852554b69035a40252b3dfe133adbbd2764e","_id":"meetup-web-components@4.6.1830-beta","_shasum":"66e01a9c11864301c745ccb87ee0b18965e9e01e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"66e01a9c11864301c745ccb87ee0b18965e9e01e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1830-beta.tgz","integrity":"sha512-hdaNbXC88B42Ewl07IP8HzlHNabwgc35aSeZ8ddy1uCn0NHxF3shQShjVbeZfamgDjZiQ/2N1mbkW6cIWUCS9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdYaazREywlvFFevo/rYLvbnc0XkPTYe+eMLX0ojovdAIgHuI/daSaNaaMCHlkrp+SQ97fVNcT/wOLGjN+Klso48A="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1830-beta.tgz_1517513450473_0.34392053564079106"},"directories":{}},"4.6.1831-beta":{"name":"meetup-web-components","version":"4.6.1831-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"212a7b9cb06c885554934ec3ad2255afae832802","_id":"meetup-web-components@4.6.1831-beta","_shasum":"7773aac96615ab26a072896631485105050618ff","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7773aac96615ab26a072896631485105050618ff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1831-beta.tgz","integrity":"sha512-OT5/zKll9ucYvo6az4hmb6n2ktlOEiqPD/j5VTi1t7h05xI/PF+SomGamNH+Au6EXa7O7Rk+OnlVFO0nIuxsiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFYevpaG1aY1krE1SSSuoyqwCG5olL+aT5yBLh8RwHnLAiEAy4fkJnNJnbFUegbUWNYQqg1aw0cJP/jO4K5hlqrIf/w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1831-beta.tgz_1517525713629_0.11006289348006248"},"directories":{}},"4.6.1832":{"name":"meetup-web-components","version":"4.6.1832","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"1efb3dddba1f231e0b7e29511b2e40e980c300f2","_id":"meetup-web-components@4.6.1832","_shasum":"d232c1a389fd25855103de53ac620b46894fee75","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d232c1a389fd25855103de53ac620b46894fee75","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1832.tgz","integrity":"sha512-EhiMRyuY8LnzGDHgfi+btM7L5hvWS0Q5ajz3Ca+JI7ayHhVBlRR/xliAE8kp05fjtJjA2be79yLpzeK3mPYG0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw5+UPyLYS2ddD63k0h0GmfWc9w177cD+JlnKuVX0H6QIgBj8KTzbD57SMqUkGWj0Gpif3HSQ8FlFLy+HKpA4/A4k="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1832.tgz_1517592793827_0.7555515782441944"},"directories":{}},"4.6.1833-beta":{"name":"meetup-web-components","version":"4.6.1833-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"df48c84ee7e0e917ab157e09c98f5b12995802e3","_id":"meetup-web-components@4.6.1833-beta","_shasum":"086cbb0fa72c82002d1ff9c146e7d5cd2b53165f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"086cbb0fa72c82002d1ff9c146e7d5cd2b53165f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1833-beta.tgz","integrity":"sha512-GcXGcjXD6uaL8ziwg7rARhzWHcouESXl/oKLNKcn4C6/yAN6HjJZLFIbjHu+jdHoHTwMNIN1CKvxRQGoVMTIRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCG9Q8HxxAlLYNGr/PBHJR1gJGLbxan3H/mMhxgesb/EwIgHYRHG8aVJjFHG4axUOfw1M5AX44nCOb9yHdbxtUclVA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1833-beta.tgz_1517606261328_0.6493191241752356"},"directories":{}},"4.6.1834-beta":{"name":"meetup-web-components","version":"4.6.1834-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"315010319445ab8cbe8e39e61aba37f44a240b7e","_id":"meetup-web-components@4.6.1834-beta","_shasum":"6021ad8943dab41eaf34bc045a25cb395583ab9a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"6021ad8943dab41eaf34bc045a25cb395583ab9a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1834-beta.tgz","integrity":"sha512-QnHvItP2Ov+XQsO03JHHk3J8Lt9ab4aHqvHjc4Jb5FxDI6Fh5Le9vLTndq912PM1mVLY5Y6cHJcd9U2RToQTIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEU2btw9zIv51cKitut3g1Sl7U0xKd67nDRLnxWgLJHgAiEApOzNpiMKgWYdUjWX4uPiV3aiLTqRNpFOIXCU0aSBSgA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1834-beta.tgz_1517606267962_0.3221965932752937"},"directories":{}},"4.6.1835-beta":{"name":"meetup-web-components","version":"4.6.1835-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"afbbf506176d221953a7fc57dbacd14a54865ff1","_id":"meetup-web-components@4.6.1835-beta","_shasum":"8c6527bdfbde56ff35f61922ca7f555ef5133c5b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8c6527bdfbde56ff35f61922ca7f555ef5133c5b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1835-beta.tgz","integrity":"sha512-Duyjtw938lolm2UcVPGgXaf2PihdECNyBbothMrNIsDJeIpXXBvTxcDsOhvkUh4HmepkRtqA9zBO3wKuYvtRQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBG1t/rfjjTpFBGDe9D9gn547xxQ/B5PNvKSLM+EY55DAiEAzeRhexDR/Db9XNXsbg/NbTOJZ3DPnc4z/tYMjwZ4id4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components-4.6.1835-beta.tgz_1517606720764_0.9709983135107905"},"directories":{}},"4.6.1837-beta":{"name":"meetup-web-components","version":"4.6.1837-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"b48ce29e0a4de3f8558c06491e0465e7865b25e9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1837-beta","_shasum":"8a90337f2ca42cd644a44a7dfed9d52f3e64d870","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8a90337f2ca42cd644a44a7dfed9d52f3e64d870","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1837-beta.tgz","fileCount":327,"unpackedSize":4786116,"integrity":"sha512-XxryG5OdxUIaYF/vtCLfWqAbP8MfLTe5bc6nNBXVDZO8E+348SglI23eRw6x4mRSOUgyC5H4z4J1rEvf0FEFcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD25fw0kh5BZFwwqNgZNu9vIpCwEGbBYW2BKo3n+H3k1QIhANQO+lmoa1axskow44b2n/u4VeDJ668lvHgQUhBq8sFv"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1837-beta_1518194175147_0.8540606767011121"},"_hasShrinkwrap":false},"4.6.1838":{"name":"meetup-web-components","version":"4.6.1838","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"4de8dc4a0064161540a96fbe9b0331f5b27e4559","_id":"meetup-web-components@4.6.1838","_shasum":"455054807c2f0833434fd00e8c2b1ffae9d80c4b","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"455054807c2f0833434fd00e8c2b1ffae9d80c4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1838.tgz","fileCount":327,"unpackedSize":4786111,"integrity":"sha512-yv2x5riFq5IANYIk7f7sxP10OsCeW1ROhauO1vA8l1UbSzChZe47+8owcvZNXJd8HgljoF0CtJ31feef9PbYQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9H1bLWC9Xrkya3hBvbP2TRDg4QP6oAhr1UHIPrJU39QIgNLYo817ba5vjp0kLZKJ+NdpQmuZ8Sknzk0zlRp5Wh+Q="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1838_1518204512774_0.5220744625577562"},"_hasShrinkwrap":false},"4.6.1839-beta":{"name":"meetup-web-components","version":"4.6.1839-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"97cb506d415f0dd5a5b0527e901331eb8bdfdc9b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1839-beta","_shasum":"0c8b829d49dad66d5587f81d9c6b84c74a99436d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0c8b829d49dad66d5587f81d9c6b84c74a99436d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1839-beta.tgz","fileCount":328,"unpackedSize":4789716,"integrity":"sha512-RSJ6X2AdgOHu7QiergiYq+wZJ5l3bH3ydqqwTipiZr/mzZhiEnyEE9ytVOxo8IgOe4r2ziZf5RFWwdUd0UifBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX+GbVOYAXg5oLTgjznDK2xADoY+3I/jXHGDJXum03YQIhAM352olUDCLdGLkiI7zlxnKyayzfKW59zLmAqnjltV0g"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1839-beta_1518209020440_0.7601584547334763"},"_hasShrinkwrap":false},"4.6.1841-beta":{"name":"meetup-web-components","version":"4.6.1841-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.0","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5922140c81c3ef2d6a8eb5a42e3f3abcb7f0c475","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1841-beta","_shasum":"d86ebd5caa82039e75fc880b7b608186929b5708","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d86ebd5caa82039e75fc880b7b608186929b5708","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1841-beta.tgz","fileCount":327,"unpackedSize":4786271,"integrity":"sha512-MAg9SRmusmSoItFPwv5Nuq9Vv7BrckqfNZxT4E1wVmoR6ChISNDtmvpYMsETS349G0MR38LuJTF4RRn4zKl3Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgAn2OOWDms8wKNne9mKXykVZvoUa3Oa+tecjkJkpnbAIgStjATNtMfT8En7Byr012rMR+mM19D0njx+oSTjkzeHk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1841-beta_1518210512408_0.7051134741726082"},"_hasShrinkwrap":false},"4.6.1842-beta":{"name":"meetup-web-components","version":"4.6.1842-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"1.3.183","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"a15dc2d201bb3719094828480d2bb4879a14d64b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1842-beta","_shasum":"07b21dff9ade8c38e0877e067eab6ef6194d5315","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"07b21dff9ade8c38e0877e067eab6ef6194d5315","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1842-beta.tgz","fileCount":340,"unpackedSize":4878094,"integrity":"sha512-xqzlXOq3uZz5lEC0RRZ7iLqAaxbNrfTWxH11/zVDspMEbfeAxTGqBTw/L4yp8c09ufn5d8y3AyB1rzluijQGew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDJvfeJsvutC1fLj0IqZLpUWIBkzVdfXD30ajYYL+2fxAiEAmx7KS6fNrNaqceTc1Fnc/xaZFHrOidb9aU1NIbnnauQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1842-beta_1518212486912_0.9984143152451885"},"_hasShrinkwrap":false},"4.6.1843":{"name":"meetup-web-components","version":"4.6.1843","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"3f5ac331eb27ddca11f5787d9664cf58c6995d9e","_id":"meetup-web-components@4.6.1843","_shasum":"30c9bfdffd1be192ce28c2c1d448a4f920968c03","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"30c9bfdffd1be192ce28c2c1d448a4f920968c03","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1843.tgz","fileCount":327,"unpackedSize":4805180,"integrity":"sha512-CfeklWWxoV0S0mbxrPgVyXIt5CJiWf8j5jaPTdqX3SdgmjkIOYT4Mu9czAtbbtSiJjeSWzcizewBXRgcCGumPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEltLGDFKeNVB+9i8c4B5K8ck9otCUc/PU2u9OwXwzYAIgSu7dUvEKykZRwX2ho/in48PKKzxEjMJgxBuAIP+7yEY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1843_1518212815971_0.48790683460672657"},"_hasShrinkwrap":false},"4.6.1844":{"name":"meetup-web-components","version":"4.6.1844","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"8f21bbb09f21a210edbffa35993373721b90c796","_id":"meetup-web-components@4.6.1844","_shasum":"46e92265b2647f152cc40a03bde97823a58934a6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"46e92265b2647f152cc40a03bde97823a58934a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1844.tgz","fileCount":327,"unpackedSize":4805335,"integrity":"sha512-LE/bPnnL0PEJshc9+n8ZBSEcLsShDm07uOaKVgUbdehQLsjp5I9L+o2e6Zl9Wqoppfpu5eu9UdAkvlrf4vm7KQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFh2H/113MHefgqPGKT9VXYlfTGNHeRgHCXV16L5eD3HAiEA+3sCDkwyNNzg0n+8JzXXubeFdUF9MVMJ8G8gXCo5rtU="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1844_1518212897459_0.20881795277031134"},"_hasShrinkwrap":false},"4.6.1845-beta":{"name":"meetup-web-components","version":"4.6.1845-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5699a315eb96284913befdaaf6bdfab2b4191182","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1845-beta","_shasum":"4f60a074bc2f21c74c6fddc38a4a039147597141","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4f60a074bc2f21c74c6fddc38a4a039147597141","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1845-beta.tgz","fileCount":328,"unpackedSize":4809075,"integrity":"sha512-wRnbTkwuilqKNm2flf3t/iVde1GPO2PZ4Kz2TK2PfrapdYuH2rXOvO7lv73UlNcf2opqabhq+sS6CFKRmiiFsg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQdjCHNOwA87mkz6judN6VyS92JViD7b7rv2LtQRzwlAiEA+BG2h/hQIZ4m9JO0XOl0EqsU3IPUBMHqeN1dvQp+ayM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1845-beta_1518213191884_0.6368472340558993"},"_hasShrinkwrap":false},"4.6.1846-beta":{"name":"meetup-web-components","version":"4.6.1846-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"e536dde125e231ff8a9762e3242efee5e909efcf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1846-beta","_shasum":"82ddf571a0cc913bebd49057fe342bb8c755b17f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"82ddf571a0cc913bebd49057fe342bb8c755b17f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1846-beta.tgz","fileCount":340,"unpackedSize":4897352,"integrity":"sha512-PdRpfTHRE+7M17KAqtFYHlRELrYCWBI6SDbmDyva9Hi8xOiKauAsbhGVQiY7GdT9gccjOuxwhj0mW0Zpey8Amw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfDfUz8LrKfH+FYLx9z49qhxiGHSzTR1z/vDUWdC2IEAiAeQ9haYuyxtkxFZoa/OB4lKN8wsaSiJ1W5XE/6SPMtKw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1846-beta_1518213922241_0.27122235926095994"},"_hasShrinkwrap":false},"4.6.1847":{"name":"meetup-web-components","version":"4.6.1847","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"d6744860a4ecde67a098c353339ac41ff9bb9ed3","_id":"meetup-web-components@4.6.1847","_shasum":"2feb3a7e87aedd63630299a7a86acfc7942749a6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2feb3a7e87aedd63630299a7a86acfc7942749a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1847.tgz","fileCount":340,"unpackedSize":4897347,"integrity":"sha512-p1GRamh9YANhpeoGOY3hKDE+0XRa9/EPhq0kC6NQwZYfb+BdDe5Nl7WLu3au1adFdst8pzdFzIWvcO3kaj/c+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGYZeGVfbdn0SI25DotgsPMcuiPr7hvuXK04OR35BAuvAiEA7E2IXXbqFbgbuAvJZPBCmL/el8LbpYvP2FVgloTLkDk="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1847_1518457264889_0.7074813547220242"},"_hasShrinkwrap":false},"4.6.1848-beta":{"name":"meetup-web-components","version":"4.6.1848-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"6eafe64db0ac5a57038c03da2ef713d1bbe35375","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1848-beta","_shasum":"5e1e2758389101151051f8c409bb69cefb093b87","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5e1e2758389101151051f8c409bb69cefb093b87","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1848-beta.tgz","fileCount":350,"unpackedSize":4930017,"integrity":"sha512-WVWtTLFStnEp282YDkTdFhffynB6VFkdoBGtCpVedNIKREKahyqfVrg6Ji/Ox+2Sd39uXZ62CSTq9gb4uecCHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCybAnhpkMvvQay3jwT+AK2bUk4UkGxuz0yzpq/DSzxIgIhAONMWtd8ogrhaA6k2R43KMqN52AAct0uRBBrcfpeJmN2"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1848-beta_1518460899927_0.7623011811617042"},"_hasShrinkwrap":false},"4.6.1849-beta":{"name":"meetup-web-components","version":"4.6.1849-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"fce045dbea3353de8865be35b367ed8ab9d9b4a2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](link to a11y guides) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](link to i18n guidelines)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1849-beta","_shasum":"da718691f3f232eca7d5cd70f0a60bd8eb0be688","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"da718691f3f232eca7d5cd70f0a60bd8eb0be688","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1849-beta.tgz","fileCount":340,"unpackedSize":4898742,"integrity":"sha512-mU0FYZKW78zkiv6b5EAZpEQOB0l2kjhR6p2gmKTD8HgPJSzsvMkZTo07wjZcqwjBANIFQlefBG4jeqM0JB/UFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVn+p6/JEdISUtSmRD5wAEZnoNevRsz9vcI5qte2MpzAIgToQizWlRPvskhpzciqrqSFVLQ8ygVCoLlKCQjsQspS0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1849-beta_1518464684942_0.36778068597797264"},"_hasShrinkwrap":false},"4.6.1852":{"name":"meetup-web-components","version":"4.6.1852","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"79d50e07a422c63f67d6f93ed584effbf8ecac2c","_id":"meetup-web-components@4.6.1852","_shasum":"1838b9b27915149023a5049d8991a97a14c5dccc","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"1838b9b27915149023a5049d8991a97a14c5dccc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1852.tgz","fileCount":341,"unpackedSize":4902564,"integrity":"sha512-rhE481bNkMc0NssPVOa9ldo1V4HyOueO87oYNNVCiWrz7i/s7B/J6oEyG+my5LvfFCG3AVr1bprTPbWRhtUiLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaM21q2ZaOhSGBDQojichvhSFc/vP1y68GiF5SeVBc+AIgaFXvVkarkCYvIj3kkzwc6Pqf9qGI4uDmAy3U+O0V1q0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1852_1518541710179_0.2891855296395678"},"_hasShrinkwrap":false},"4.6.1851":{"name":"meetup-web-components","version":"4.6.1851","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"b3ba83b39422a512e0f6c9a4789bbbe6ef2656dd","_id":"meetup-web-components@4.6.1851","_shasum":"452d0af257c19fa8d026f20f699d3847c771bd30","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"452d0af257c19fa8d026f20f699d3847c771bd30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1851.tgz","fileCount":340,"unpackedSize":4898829,"integrity":"sha512-n2dx029GAHqeM7N2DE1leZrNh8YWffPR4ggD2duVqC5UWl+7UqHk3bBJHr875iVF3eiK+nTbjjzIushpbfKA4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRVvxRC60PxlwUXDllFfJCAJqpNbcATuW3Yjrt1PfrZAiBMwVUmLP4OHQZ5BazSr7M7Tttwu2DMNAX5AWIpVUJ8IA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1851_1518541731676_0.8108284504757526"},"_hasShrinkwrap":false},"4.6.1853-beta":{"name":"meetup-web-components","version":"4.6.1853-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5dc222b37009fd47a44b67dca94fd36670d5addc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1853-beta","_shasum":"4fd36c3d0fbabc0af4ab606efa6b454b0729b7f8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"4fd36c3d0fbabc0af4ab606efa6b454b0729b7f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1853-beta.tgz","fileCount":341,"unpackedSize":4901356,"integrity":"sha512-OfunuusX4M8z7Wy4TWrxetwC7zmZm8m6dYgK3zB/xRd8RqDWGZnXZ3YEW9b77uVdzBKt1Vo/UrlJu+w6unr4/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKw7YeZgIWHAlUDFs4UPhR0v7j7g9cnP74EpYStVCFeAiEAntvJaxIpL4V40WrsY9sAqns1Rn2TZnft0W8i9Su1av8="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1853-beta_1518553638351_0.8443199115007869"},"_hasShrinkwrap":false},"4.6.1854-beta":{"name":"meetup-web-components","version":"4.6.1854-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"dbd9332a74cc91d10d7d4d349395a92dbeb5eb33","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1854-beta","_shasum":"7caae09d7f7e0a2722615fa7bee947af58749cc1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"7caae09d7f7e0a2722615fa7bee947af58749cc1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1854-beta.tgz","fileCount":340,"unpackedSize":4900990,"integrity":"sha512-USxKoDzfK3DCfPrcfGSQsZ2bShvWMebzRVhLiyHNUQeXsTspodsmatgsdwgVAF2D6jtEupP+y4yiCU4jsijsVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCzoaiwoUHM4kFJLFPsMfTj1ejK66qxm/5q3CKhGAAWAIhAIhQ8+NXM18swYsWAjXvvK76v3bzQH0Op+8etBa4seUS"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1854-beta_1518560618380_0.6409962538546279"},"_hasShrinkwrap":false},"4.6.1855-beta":{"name":"meetup-web-components","version":"4.6.1855-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"d114e5d037de08cc1f2831f47f4dc0b26a080e5e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1855-beta","_shasum":"b733331571564f7bc9778c57576cc78cc28d8440","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b733331571564f7bc9778c57576cc78cc28d8440","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1855-beta.tgz","fileCount":340,"unpackedSize":4901189,"integrity":"sha512-bYzV+/KTKSWpjm3yLArWLfY3znlLJXq8H9E6dU+ta6+VMocG6x5YAWvwvqsVociKBa7vLd7jEmI4S10YKl56og==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYnfsVvtFsrqgy8BH8JAkeIFeHeca7aVI7bRpvIE8zXAiEA6/Ff0nKXm1txsh8uXr0G4BJTtIBR0Sh9z6yVVLdcTLA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1855-beta_1518561557614_0.04431403189978478"},"_hasShrinkwrap":false},"4.6.1856":{"name":"meetup-web-components","version":"4.6.1856","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5e91e23d5edf3644b4b0844cfd137679faf607bb","_id":"meetup-web-components@4.6.1856","_shasum":"97b9b63d67a0ba2803a5b23f325d5a7115056831","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"97b9b63d67a0ba2803a5b23f325d5a7115056831","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1856.tgz","fileCount":340,"unpackedSize":4901184,"integrity":"sha512-+PoJFKhBjVql3DQWajtK4HiSFkz4M7ooaPMBvJyZxuXnrdwuNHFQ7xT+TApT5cLpKSD83cr3z7U9z8DdKXXcZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqqpEgw+lJtJJxGUu22Dd8+Dkq61a0F+Mt/cSGhSbVYAIhAKRB5aMXIVLkMANDEea+Pz8fmPmVpXd0Mxv2tqobuEC4"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1856_1518561899741_0.12358900062870837"},"_hasShrinkwrap":false},"4.6.1857":{"name":"meetup-web-components","version":"4.6.1857","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"878a1766633e6eec970d5f3a9cc37c398a6b08f2","_id":"meetup-web-components@4.6.1857","_shasum":"0c7c7ea98f866ef4fadba2a5d4f8506eb7120fbd","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"0c7c7ea98f866ef4fadba2a5d4f8506eb7120fbd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1857.tgz","fileCount":340,"unpackedSize":4899971,"integrity":"sha512-OgfINykh9X9mOMRaEKRupR6zTR1nBmHURa48aCYZhbYq1vuYUODD63RTh7QL5DIPm/aFPqoW5XLso8FyGd746A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEk1ilnwphXXFhSHWwJNRv/LWEknUJNMRR9qzkWMfqf7AiEA9DRvYJQXuARCNYSRPNqn5EiU00h+CmjhY79mJJkB5bg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1857_1518565401515_0.852884619076169"},"_hasShrinkwrap":false},"4.6.1858-beta":{"name":"meetup-web-components","version":"4.6.1858-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"false1.1.6","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"7ba05987adb89eb098a0080c16c35da6209c3297","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1858-beta","_shasum":"44fc74a995d760a0cb8bffe96f50129b8e1d1f39","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"44fc74a995d760a0cb8bffe96f50129b8e1d1f39","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1858-beta.tgz","fileCount":368,"unpackedSize":5048585,"integrity":"sha512-QVfm+lNZeyKItnHHY2QTb8EIkSXkf9vvadigtCR/1gqned6mM6JhAIeC+McmcyWlcw68ohcmGz9C7teT4o2u9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbn3ZW9TsArpFlI9p6G33SeVUzLjWB1LT5ZXObeFCb/QIgIUaWSrIj8SP6X2WX/WlyqgHwuKIewjhb/D7njpedwy4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1858-beta_1518640036342_0.6252672243992776"},"_hasShrinkwrap":false},"4.6.1860":{"name":"meetup-web-components","version":"4.6.1860","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"864a40365b575d2239c8fda51c456f70b50f88a8","_id":"meetup-web-components@4.6.1860","_shasum":"eabb7301b4d8ffc531cd07dc4e6ced285c19eba2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"eabb7301b4d8ffc531cd07dc4e6ced285c19eba2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1860.tgz","fileCount":340,"unpackedSize":4900239,"integrity":"sha512-LX7yFAoLopbyGlJGmbgIdJkEMXgmu2GJuKXsbZ0WovvKY6hImbEjm4nawyHvBotvxnKDcv/CMoeK1RmL7B0+dQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjDZvS9FZ2g+mKIVCaskbQ45bayJUoI+uJ/Vt5pKOofAiBCisZW6gHk2VW2FGahkebZIbrrnRWOHjpyuWpapZzKew=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1860_1518719766495_0.7062645966829371"},"_hasShrinkwrap":false},"4.6.1861-beta":{"name":"meetup-web-components","version":"4.6.1861-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"6f6ed74bb8cf72eb5353517970a5c43cd0c3f711","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1861-beta","_shasum":"3201a16b564b5ea56999df6727b9e6f58eb12875","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"3201a16b564b5ea56999df6727b9e6f58eb12875","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1861-beta.tgz","fileCount":340,"unpackedSize":4905950,"integrity":"sha512-nsrSEl5R0lX5/e7FsNfMiFC7nHc2QiNNkq+ItgWcMdZ+icMpK1/15qjFuPBxYMPPQXGPGMMWIUy8EvEwKpLklQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG5C3r1c9SGntZ8Ykad38V5GCaPK5NHfD/iegJj2FS4yAiEA9pCP+2utSBDvd0oD+FGfRkhbL47DTadChPysetMHyOY="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1861-beta_1518823663895_0.30143854916558377"},"_hasShrinkwrap":false},"4.6.1862-beta":{"name":"meetup-web-components","version":"4.6.1862-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"6ed1792cce4794bbdbd71844e591c073d6dc275d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1862-beta","_shasum":"60da1d41489f9767d52fd69c4acfd17c8a0357ac","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"60da1d41489f9767d52fd69c4acfd17c8a0357ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1862-beta.tgz","fileCount":340,"unpackedSize":4905956,"integrity":"sha512-7VMdXMgLo/ip77+HUFxjcVPBEvskkLsS8ZzjaxC5i7btZy6b9ri8xWOHxVhOecGzZV5vjQ4KP0slATyyMzmI6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOe5xpG45CYRv7Efc+mqm5x/E03fDFApsqM4RN3po9/AIhAP6ozJY0oCSSYEFDAkjaD5V2o7E8c854HhTsDwVc+ZOG"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1862-beta_1519148989865_0.8526610891970208"},"_hasShrinkwrap":false},"4.6.1863":{"name":"meetup-web-components","version":"4.6.1863","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"79e6a6240c84fbbbfac7e542c6915d39f17b2f37","_id":"meetup-web-components@4.6.1863","_shasum":"f01ca064650dcf5de8bdf81b12e75abdc4bede25","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"f01ca064650dcf5de8bdf81b12e75abdc4bede25","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1863.tgz","fileCount":340,"unpackedSize":4905951,"integrity":"sha512-dgBhIseGnHOk87OLiGDQbNg6NXJB/jhysrR+m1c4UJH5r4TVV0FGwUI6OrZ29S5mSDHlK0JpwRwlauCLnvDYpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBre+qHiDLbENrRZYVxeYMIvdkWDFiIKnhlUhObtpQBrAiAUsI9nmLUsUOqJPwohI/qY+qoFueZ75qcUhPyUwQB3bw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1863_1519149343571_0.7259732133318282"},"_hasShrinkwrap":false},"4.6.1865-beta":{"name":"meetup-web-components","version":"4.6.1865-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"7c19766c0ac0ad1d10f11cf9d7eb13982a7abf14","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1865-beta","_shasum":"8928b6db70cbf3674eb9a7454140e3fef7b13208","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8928b6db70cbf3674eb9a7454140e3fef7b13208","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1865-beta.tgz","fileCount":347,"unpackedSize":4916403,"integrity":"sha512-M6ho+DQ3ec3k3O9iyhd5QRc4/wskIj8bTvbfxU9H3ARmnv+RRqK9EXjk+Hm2ky48O9HSprT1IJ/OkHLTYVUZdg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQSH4gUmFVq6YZLc7m9WZFswEeel1X4R5wpMnWq8CrPAIhAOtVlHShbYnbL9qjaZasjsq5G9YcKOgo5kfUj0go20XW"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1865-beta_1519175834783_0.6116619097075897"},"_hasShrinkwrap":false},"4.6.1866-beta":{"name":"meetup-web-components","version":"4.6.1866-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"6b0a5d96b677daec3dfd8ebc162cfbba7e6d6ee6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1866-beta","_shasum":"900c8e3beff36704e45a89ee00ea250f89b1c0bb","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"900c8e3beff36704e45a89ee00ea250f89b1c0bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1866-beta.tgz","fileCount":350,"unpackedSize":4938635,"integrity":"sha512-f4eR9AbNL7zBddSdSw0cflmyIXf4A7aXwQd09y4isFm7grFZ5gMNNKu+rm+879XOyXH1N9aCnp0iEQrC7ogT+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBCF34p0HOH/xJrEnr4W/1sqbUmP/vUP6JRWZK86cQ/pAiBinGdBr7mfTzzFnbBGDqkkfKZYcdFOCfsJxBDPnTYaBQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1866-beta_1519223563073_0.3206274082627134"},"_hasShrinkwrap":false},"4.6.1867-beta":{"name":"meetup-web-components","version":"4.6.1867-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"f145e4dcd4e55605a0686b89d0f7bc337fec8fa8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1867-beta","_shasum":"fe368c8b58a59406b0dae20ab4a36a3e77e5a79f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"fe368c8b58a59406b0dae20ab4a36a3e77e5a79f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1867-beta.tgz","fileCount":368,"unpackedSize":5054901,"integrity":"sha512-w0HwtGWvJh7MZAtHNfCeks5j1BV12FKB9kZMXACJBaYuvFJyYBo1yfkp4OWdJ+iHg4Swda6kdcguMpYHkYWblw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7YIJ5Q/5JWiO/OmoxhtmmCtg4W0/NxTxjoDDsSxnh2AiEAuZU8k9wYl3Pg9R/QnIkBN2dLDTI09OSLCPysiaoNAPE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1867-beta_1519227493852_0.3845111921188822"},"_hasShrinkwrap":false},"4.6.1868":{"name":"meetup-web-components","version":"4.6.1868","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"d9358f20a7b54026c1bbb0730048f74768b8e3b7","_id":"meetup-web-components@4.6.1868","_shasum":"c3b18828481943e19c7178f5b4a6852dcbe4f6d5","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"c3b18828481943e19c7178f5b4a6852dcbe4f6d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1868.tgz","fileCount":350,"unpackedSize":4938630,"integrity":"sha512-iWca+wPZknqUHuaZMevv6WiSTir44H0L2GBE4+GMFVrlddpHSR27rzzOchrb8LQ2i6WYHIiu04SSyqP2heEG6A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpdZsPRa7HZ+SAkLdFZj0Huk8IdT+4JtfOQcHjUC1UqgIhAO5a6ns/9V4TeRol9U+hvC7TD/AH54lCTbFuecevjF+x"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1868_1519229853990_0.7428173572186447"},"_hasShrinkwrap":false},"4.6.1869-beta":{"name":"meetup-web-components","version":"4.6.1869-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"4b4f350497e00195a5278f35836e1ad1f124504f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1869-beta","_shasum":"9f3d8ec795b9c4ff920c5281fe87526d54f86c23","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"9f3d8ec795b9c4ff920c5281fe87526d54f86c23","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1869-beta.tgz","fileCount":368,"unpackedSize":5055067,"integrity":"sha512-9sUpIf3TH4ahiXer/HttCbiN+vzDd1o1miDg0Yl52zf9cfA43pWPzQrmc2onzs/jtpy4F20FowbCk3X0rkBVYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrXEeRjiU4inkgaXa0f/hefTQhbnZdjAFqQW5Z1jpfRAIhAPIUcXSgsqC6MhHXOXgrffWY5T/TGsK5V2RAuKTKZNbG"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1869-beta_1519231844769_0.07223170769185305"},"_hasShrinkwrap":false},"4.6.1870-beta":{"name":"meetup-web-components","version":"4.6.1870-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"26100637a8565f1ac35d95b6ef03cca22b7724fd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1870-beta","_shasum":"495c7dcf0d7747f1f36e6fd7c6f2c6781cb9939f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"495c7dcf0d7747f1f36e6fd7c6f2c6781cb9939f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1870-beta.tgz","fileCount":368,"unpackedSize":5022505,"integrity":"sha512-sYSOjnOJPgDpru8orO2L/hnPDBMXrYso0utKF81QkC3r+yCQmmTnozSlTXTQkGm8wKxt3Ikp3CyBz9O80IgxLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+wlvFlM+xWBv5mfYcMXAXSN1wNeaRBnF9KNHT6gTgEgIhAN4tQIOHaYi7qVXjoryvc9L5Gl/8ld9sOO/zD0EtdfsU"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1870-beta_1519242624414_0.6304408840998947"},"_hasShrinkwrap":false},"4.6.1871-beta":{"name":"meetup-web-components","version":"4.6.1871-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"fad1f2ee69a29b3b5ffef34846f6b72399c18d46","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1871-beta","_shasum":"5d5a5e5997e9e80946b0fac1e9cf1bfbfaccd421","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"5d5a5e5997e9e80946b0fac1e9cf1bfbfaccd421","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1871-beta.tgz","fileCount":408,"unpackedSize":5271240,"integrity":"sha512-O1fkJZCNPxxLKZUUPesqWY5FVvxOCsUZdMoxOSLztFlSZVXZj+IRcKz1anzshOJwlXmNNZbLqC5GSCUqh6uvnA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADDOIJBZYK3OUSPdrEzQvxfjunYVLtKu5ZD7RNpzCjJAiBuvfbjuRQEBP+vLlqumsKyLQRD1p6Uxs+BJQ0Mv4aimA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1871-beta_1519248425867_0.7234217436169659"},"_hasShrinkwrap":false},"4.6.1872-beta":{"name":"meetup-web-components","version":"4.6.1872-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"1e3770f4e99a2fe6de68a565982ea7eb115ac6e1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1872-beta","_shasum":"26aa08f490bc383256a5f767ef0911c960bc2f24","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"26aa08f490bc383256a5f767ef0911c960bc2f24","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1872-beta.tgz","fileCount":408,"unpackedSize":5271292,"integrity":"sha512-TIPeKqI/pNvacggE/lM0Bzb3W7iEXsCd3rW0JknUwgUe265KV+Mla224ZNlvYsyfH5OY/jGuU5ZHLPkga0lEGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbL+wQNP9dtT4V6gFs8yP0GqNrPBBhnmqX1CvGs3jpiwIgSyB+Ymqs9hdtHjSgJ5z4mUevRa61oc0HMf6221nPdZ0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1872-beta_1519248812606_0.9753616944729309"},"_hasShrinkwrap":false},"4.6.1873":{"name":"meetup-web-components","version":"4.6.1873","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"e2e9adf7fcbe06788a8ad0436031b3764c21d253","_id":"meetup-web-components@4.6.1873","_shasum":"2029b701e135be09b80d08c263224706ff94ad2f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"2029b701e135be09b80d08c263224706ff94ad2f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1873.tgz","fileCount":408,"unpackedSize":5271287,"integrity":"sha512-7knSgdxhikZjUtXd8ohCvjUi0HB5vvQHtJOFNeOtKe64PMHmwiFGOPsHBD/LHtrBCuZ0vWpKHWprxo3hKhBLrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaM2DVrbL3qwiO+0JdfyuiR6f8J5LQ5kytwAu9hZFPjAiEA3skG7LVXUY/Jckh0JYtF6uhPXIX3paWK0OfSnfJYINs="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1873_1519249954258_0.5481660133297823"},"_hasShrinkwrap":false},"4.6.1874-beta":{"name":"meetup-web-components","version":"4.6.1874-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"ea864f5e62bb82984aa76a780f0b1b11d1fdd22e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1874-beta","_shasum":"997e1e53e3cb339977eabee39084e850c81558a7","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"997e1e53e3cb339977eabee39084e850c81558a7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1874-beta.tgz","fileCount":426,"unpackedSize":5355386,"integrity":"sha512-h/opipXu/YSMa11oItc1zWNvCT94bnBbu9xXpXNYv2aneNiUOpl6GxQZtEV8s+K2SDgP4f+G5bgb6aocJR3YMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDMa+D3z1kfPqD6LTjsHmiGV4QmoWvF5Vxg1an2Oi1GfAiEA8dz08DIev5o7+FtoX1qCsUFnZACo5Rt7HQEgKaYjCOc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1874-beta_1519253568085_0.1113915987821612"},"_hasShrinkwrap":false},"4.6.1876-beta":{"name":"meetup-web-components","version":"4.6.1876-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"e114813462c58217e8d74cc0b44059221f8d543c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1876-beta","_shasum":"e5eefb74e073edf0b03800a97b828edc6509b97a","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"e5eefb74e073edf0b03800a97b828edc6509b97a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1876-beta.tgz","fileCount":408,"unpackedSize":5269763,"integrity":"sha512-/bJXfbf1C7JxJ98fzIN0DNtVe5iRuuOJH9er8OPWg9PTVJH5sekzXnHvUvsLXnWMt7z6Whi6jkMWvGqzZCQWNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA9RViHyuGHcD8y2I/+0ZTCY4qRKn0tfzAoiFpytiS1CAiAV8kUQUr4gHhUV7XAS0fKj8sdAYgmyLqvCZP48d8E6zA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1876-beta_1519317617247_0.32790597621907414"},"_hasShrinkwrap":false},"4.6.1878":{"name":"meetup-web-components","version":"4.6.1878","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"98d7963b9e00805b4fd0ece2605578b355b51ecd","_id":"meetup-web-components@4.6.1878","_shasum":"d4542b8735359a426a5eb1af3fb484aaa16b7fe8","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"d4542b8735359a426a5eb1af3fb484aaa16b7fe8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1878.tgz","fileCount":408,"unpackedSize":5269758,"integrity":"sha512-UDciOh3n1bG4nl2NwS4xCMwhh3XyR1p39PBzYnjrdDu1HaZALwdRLIA7ON2/jEUEEz8rl0V+k1ZFCs1trUZccA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIETNXylYz4OcZ5ya6KK7YJhcKke3E6UpVKH20Ad1UWYJAiA6WKMNKLwVxcjIIRwJu6nQEhDupYZUGHv7ELbyR4Be0g=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1878_1519318591517_0.6555032861043462"},"_hasShrinkwrap":false},"4.6.1879-beta":{"name":"meetup-web-components","version":"4.6.1879-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"62e450d8ed021152223270f120a37dff9cc77112","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1879-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-mRkx45UEMa+kxE0ljdeR9D7UJcCw+Xhr++gJW2b2LkmSUsIAsfkjdwE2NIM8D3BpSFB5vR4hKGzPyOfVQwlIDA==","shasum":"cfb5652834bfa17377ecf56450381d033e1a541a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1879-beta.tgz","fileCount":404,"unpackedSize":5267912,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT62RWICOYtdiX7NhJK/5zDzq/CdzOcN4gY99lw1gvFwIhAOaDAVbF14PUbsFDxIhkP2HWGE3azIFqYnrao4PYHWS5"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1879-beta_1519325336691_0.5391005540632097"},"_hasShrinkwrap":false},"4.6.1880-beta":{"name":"meetup-web-components","version":"4.6.1880-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"57a1db7a8e00d19a39cc03bff6fcff60e8cb0ea1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1880-beta","_shasum":"86a250314b555920b4cf3f54b4842bcca6e7466d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"86a250314b555920b4cf3f54b4842bcca6e7466d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1880-beta.tgz","fileCount":408,"unpackedSize":5269762,"integrity":"sha512-8jKx9OGGEbYPtcRbqgaLAU9+AR9WyXXH+plJ/RMFb33TAOfBz5o24EeFuGJnr79tDUeB/H6TR3W2m06q/bfPzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJqiqZZg2MdpU2aeLmj86IuzPI4XzvtMKbxbfmmeFj4AiBgOBSJ7NdCF+Mo/gIqLpE3u2PpZmbd33GZJyoVpBef9A=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1880-beta_1519327796658_0.10892302560630984"},"_hasShrinkwrap":false},"4.6.1881":{"name":"meetup-web-components","version":"4.6.1881","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"b135fe93dd58c0c9314e007ece2ae4787e4db346","_id":"meetup-web-components@4.6.1881","_shasum":"736ce14cc4dc20c70bc012cb9ab81e94ef7b3f37","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"736ce14cc4dc20c70bc012cb9ab81e94ef7b3f37","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1881.tgz","fileCount":408,"unpackedSize":5269757,"integrity":"sha512-zdDJB9//5uveTFPfDLjqTCnniZ/9Mnq+J9Od6jt+7uYVmKXH6eo0kFU/UiLO9Ds4N4qnwbvS6tofmAQ6QWG7rA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICjdBTpC32J8ybj5u030U5MnEfLBb2O/7rj1WcNdEbDuAiAkYqflje9jA0XY1tpdhV2oGrJV1XA/r+Rl69H7jYcveQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1881_1519328293848_0.41437729297224224"},"_hasShrinkwrap":false},"4.6.1882-beta":{"name":"meetup-web-components","version":"4.6.1882-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"1980fbd86180e235967b385c7d36a325ac0f56a1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1882-beta","_shasum":"b269bb701cd8a5961dffc3da13303da1276b080f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"b269bb701cd8a5961dffc3da13303da1276b080f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1882-beta.tgz","fileCount":408,"unpackedSize":5270832,"integrity":"sha512-N5QTProE0VAU2GbBICuAObsUzpuZMMAagbyVvzYYTF63u/JeiwrKscsmvTIERS0LztMB5U5YN4NERjWfeIusAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSlr2O23K9i19Ow+j7wSVlwNnkZrMnAqzb8CNOgbNAgwIgDezG3w5sckk8btVo6h6S46J14Fr3A4L6UD1vtEvEgqQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1882-beta_1519330586172_0.36238367893196655"},"_hasShrinkwrap":false},"4.6.1884":{"name":"meetup-web-components","version":"4.6.1884","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","react-flatpickr":"3.6.3","raf-schd":"2.1.0","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.1.2092","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"da702a5254ed7e956145d4e871820a79d58a5eb5","_id":"meetup-web-components@4.6.1884","_shasum":"8b6329a8d7c43d4c9401a4330d1df25f933b5bf4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"shasum":"8b6329a8d7c43d4c9401a4330d1df25f933b5bf4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1884.tgz","fileCount":408,"unpackedSize":5270827,"integrity":"sha512-5zsj5aXoVdnW58xriYYRT6cbgY99Or48Zc4XYd2JxdN0sf6mO7gATBN9FcrGQzJiGCJ1WlDW8mrrf23sUwRHsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxIKg4wga9hKchLqi7kH+u4SQq2gapa2I9nzlLxpjveQIhAOuzKhja9Qk2oTzinnVNtN4cTtqSZa9PNxDAIi6U/fpd"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1884_1519347964177_0.4873466215518716"},"_hasShrinkwrap":false},"4.6.1885":{"name":"meetup-web-components","version":"4.6.1885","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"15a92f73254dec0bfa4efe0a46470a25c4c6e62f","_id":"meetup-web-components@4.6.1885","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-Wu+WyH2p/DkUpwN7nRRXUEBvM0R65YgAPFdPsJCTB9vSRDHsL1jJkbnHF7gTw3N0HBFazIaZmvDP/VE2S4JU8Q==","shasum":"97fe289532bc82a5bd9773c4d01f99f7a5784343","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1885.tgz","fileCount":404,"unpackedSize":5268976,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD10oFnimmMfwbPdMNnhYUuDU6albQgN05ajAkdmg+UNQIhAOhXF8boj+67uZS/BnFSBGj5XoWTdaNUMv5RkbWjT121"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1885_1519347971698_0.7671458573869672"},"_hasShrinkwrap":false},"4.6.1886-beta":{"name":"meetup-web-components","version":"4.6.1886-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5518c5331b44abee0b439908c4fc1801da4fd50e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1886-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-FRePpXvy3SFbJA9kjyTGtNRW/+NYdQyyOv+BEy1NJeZDIYhoyhfcmISN4sAIz/ivD3Jgh9H4HhsZUoDieacblg==","shasum":"8455dac9a4bfd80639fc8cc37cc0d54320d7d9c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1886-beta.tgz","fileCount":404,"unpackedSize":5269267,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPyoIaJzLpgKBu7H1JUpSqhppgAKmbz8yV1sCrHjSgKAIhAOWhIfuKMhxuIMfoqf0pYv2HPa9h5Hez/QedJQ4oApdM"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1886-beta_1519348488927_0.47461328648334344"},"_hasShrinkwrap":false},"4.6.1887":{"name":"meetup-web-components","version":"4.6.1887","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9817d6250bac3347241a8d10690bd91cebfcf3cc","_id":"meetup-web-components@4.6.1887","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-7pGSjyJkKSk5wCrIHgVgdb6uoHiWESvudMbP4JtoH8es8T8FPM8JvAS2ILTGRyMHdr9tELSJWLdMpFlZ9zh+jw==","shasum":"86a42406537b87a66f7de7ae6f72627514d4f408","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1887.tgz","fileCount":404,"unpackedSize":5269262,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXs0H9/9W9dcEwU1vEf/wrJYT0OzjweTOrlUZg05H5eAiEAohF7PBKQ1POd6DUu8aqGJVrqDTgCq/nQYmFl7CBOezQ="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1887_1519348912728_0.7845425720348016"},"_hasShrinkwrap":false},"4.6.1889":{"name":"meetup-web-components","version":"4.6.1889","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"b657c5124f08409366c1af039fc6c7e8037014d6","_id":"meetup-web-components@4.6.1889","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-R4ywO72+oHCw/AODZQ3mhRxemK7fEAWh5vbsaDEJorK+q9o1OzXHzsItVeUP2bE3kwjNINuWE+PmONehMXj65w==","shasum":"56eb1183f966510ecd07e38d13dd2921e1b759fb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1889.tgz","fileCount":411,"unpackedSize":5279939,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2IHUc2oiw5ITDnYS+WaLysDUqW7xktLQIelV/N1JQVAiAUP19a8OnXsxqKvnAvCggjTjeH5qdY/TIEh8epYjXRnA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1889_1519348969001_0.7503825507030899"},"_hasShrinkwrap":false},"4.6.1890-beta":{"name":"meetup-web-components","version":"4.6.1890-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"9e0f086866a030e9cfe0a83df299bd6a1d38c70a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1890-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-YPCfLedq1RgxH1TE6AL54uBgnbLMXOeL5vT3cXPZur07Ua1IPbuSPNKmYRtwdqKsXDp+HEpdTlPBkYt/4VBWPw==","shasum":"b162e9ccdd2577277228730f07cb82e2efc8f221","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1890-beta.tgz","fileCount":411,"unpackedSize":5284898,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3xNcXRo9yJSx/2J5+Z9lBk4XLOrNXzAtoGOFTWKm5wAiB0fWRn5NxPl2kfrGcoFGJfpVrTezK3SjY6/5K+2D6p9Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1890-beta_1519400616680_0.9485649588270104"},"_hasShrinkwrap":false},"4.6.1891-beta":{"name":"meetup-web-components","version":"4.6.1891-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"8b33d30b53505503b37f9d11398d28689d22a7b7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1891-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-K3YqIBVsq4e0sNkWy+8HFTE7G/mZH9McYoAa20MB11sZ/F3jwFwzq+vogk2qb8wOZf2GYIS/plWyVHmy0IAvJw==","shasum":"672a5b52ac0b5b9366a7a62eda5d201782c974fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1891-beta.tgz","fileCount":411,"unpackedSize":5277909,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJmnW72AxTCJGvLUJbxLaeFkGb91GyOHCrZM2h4V1dmQIhALYCS1gSBBU7Z8yXDXJsLY0k3AAbax3XK40ohVNqJFKV"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1891-beta_1519414459387_0.7763967300891721"},"_hasShrinkwrap":false},"4.6.1892-beta":{"name":"meetup-web-components","version":"4.6.1892-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"45b1f80221498ff9d3a074514a32612786861f71","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1892-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-2Rwb5bMrfyB0qCNSj5jTEr1RDgULqC0otfSUJUctvOW/tgM6TCz3YPDvKCit9I0kpePwFkOE13beGA61ZSFKAA==","shasum":"64a582aef43e37a3084aba0c7d57e111da8e46d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1892-beta.tgz","fileCount":411,"unpackedSize":5282864,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD92TsKb5//p1UQFGJohhIZSXir0gaUbEhcZXPqMXMbQgIgdXaErQdzs33zUb/IzY9qyk7HPvClWatVtKv5L0DBpiA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1892-beta_1519419733525_0.6276492161807634"},"_hasShrinkwrap":false},"4.6.1893-beta":{"name":"meetup-web-components","version":"4.6.1893-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"1aec8a580926db6410f810998de97ee6cebf6a10","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1893-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-PYhhzb3CnlAA1l1l7aw4EWDVvXww3fazNtft/3ibxQDJ0UrmW03WIxFkvUcPAmeJH3gfSYSPKFe6PqJ+CRYOPg==","shasum":"daa5f672a91fcd434733f6ae2637dff15990db76","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1893-beta.tgz","fileCount":411,"unpackedSize":5280217,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR/wcdfeHTV+0CKd9X3YhrdBwVcRsPgkbff+yCcSQXGAIgKkVFPPBP4mPcXT81/g7s0HNa0DnibVOEBDoiBVBOKb4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1893-beta_1519421415389_0.2527386094453876"},"_hasShrinkwrap":false},"4.6.1896-beta":{"name":"meetup-web-components","version":"4.6.1896-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"eede1872373e9fa94f9f0e2cffcdc73c9840bdfb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1896-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-H8klgOFGVzdWLJ7qA4VrKq9K8frbeToqwvFCgziHxDZ88WhzmnDfjYwncT7vY1sG7/Apsq10f3H64CV12h+o/w==","shasum":"e9c413c1cd35fe7a559e9426d10ded22697640b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1896-beta.tgz","fileCount":411,"unpackedSize":5288875,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmHq35pzw1670q3N6sF4+H+uUW0DVhowDyV75juvKiBAIgXwjThUuIT/Mt/qknjF1eyS0upFFeJ3TMKd7qfbuWbSc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1896-beta_1519661306482_0.9033230506718966"},"_hasShrinkwrap":false},"4.6.1897-beta":{"name":"meetup-web-components","version":"4.6.1897-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"d09682927d1f03696fd5e4f396fc91804433b5bb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1897-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-OV1y5hFdrZ8o4yWFNDjG7IAtCyiupi4+p/3lrsX2h9dEMPGuSwnN9zwNrMD72wenlnYvNNfxiWrt6mimKHQDqw==","shasum":"bc3874651cb9e21ce004b4b44f63b15ea067da6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1897-beta.tgz","fileCount":411,"unpackedSize":5289149,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmhmR4MfKCsyTv1viBN5msTVfBZxyVqlDtGkDIGiUMWwIgViZhymX+A3pKV4XANLfpNwxTIEu0rJp1wt7UqGFzxTo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1897-beta_1519661667993_0.17126361459191974"},"_hasShrinkwrap":false},"4.6.1898":{"name":"meetup-web-components","version":"4.6.1898","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"5cc6df3bbc4418401f13dc728ad9217ff466fef9","_id":"meetup-web-components@4.6.1898","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-cl4gQklT5RrcHohdyDIXKMtB2memophOCwzyfY2vBC/0UIqJWfGpz1ZHPYQPshEM8ZW/yIlEpGp6qKLjnFathw==","shasum":"f9bec76d67baebf081be442293cbb1d12c915207","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1898.tgz","fileCount":411,"unpackedSize":5284893,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9y0EhvAknSM5ofxhMpS9Fkvehs4HZM+Ipk4BDFyxWTQIhAMElP1VwmHJsbVO5Cz6GikYI9zMvArmYBClF0xOqE+Ag"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1898_1519664004320_0.5224123990668113"},"_hasShrinkwrap":false},"4.6.1899-beta":{"name":"meetup-web-components","version":"4.6.1899-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"576e0b9be533bfe771d4493e1a4f0f2821bfab67","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1899-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-OkJQF9lJQ4jG4hD1bXG4168RPTrZIeErApjQ1zN8FyfNmoDnsgtl3ExJOHGe9opS9Rk5/yvw51wxYnN3zJNi+Q==","shasum":"6e505c60c58d9974a2d3fe092bb2ca0de6b12ce5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1899-beta.tgz","fileCount":418,"unpackedSize":5335050,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID3gvfwEtzHI9S549wQ+R381O/1rJ6rXO6xqJl2JFIQGAiEAlbEcZHKcjdKNGRkKgrVaNg42BMzdixRnroxCkLfDXr0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1899-beta_1519667507837_0.8673554036166293"},"_hasShrinkwrap":false},"4.6.1900-beta":{"name":"meetup-web-components","version":"4.6.1900-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"2cd3f63fd2e150cab1bfc38d23897c25bd6a7546","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1900-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-rflV+FeTPo0zfsR5KFqGtxcw07pqWpyp2ftOKGk9raY0ZsaA4lnIt35u5tGMwVS6Cg+ObfxFPj4x4SfuXlnkQQ==","shasum":"3e3e70a489548228211526cc40236132929c376f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1900-beta.tgz","fileCount":418,"unpackedSize":5333741,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAlqMh5gu9Icab2GmPnwXtoJZlvmewQNlvKWCsnqxOVgIhAKb8hX9KdhWP5XJ5kPYIxY56oLSmcoqHznnH0LtB3ZXN"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1900-beta_1519674677833_0.8858257013945456"},"_hasShrinkwrap":false},"4.6.1901-beta":{"name":"meetup-web-components","version":"4.6.1901-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"8d1733d233e875e6bd164320ba3b76c09dbb31fd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1901-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-ogKR/eTYQ6XumKoM2BZdnRlUMWr0J8SnnCmwLAYtwEP71h8w/G5CmQvbD/KCLzV6LRq/WyeeCt3w+EDi+quvUg==","shasum":"771fcc43922ab9c45e3fee1fd36e3492a495e751","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1901-beta.tgz","fileCount":417,"unpackedSize":5325130,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWJzziKmH7nxBJ1b2nPdlnLFDMUVg5bl7w40rGfL1PiwIhAI6JUohlafxsX83TJnxOgTAZqvPQwnJ2IKO6doXKfO3j"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1901-beta_1519683416256_0.17723695620859292"},"_hasShrinkwrap":false},"4.6.1902-beta":{"name":"meetup-web-components","version":"4.6.1902-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"77715183db37e0a9d79298baab3020382711f382","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1902-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-2/8waBL5CiLyF7qDvecf7fQ9kcilyL1B7Qs2MN0A/C+25/waqZfRnh6qGXAOYX+6AfMRIuBbM9NKR8EqPatI8Q==","shasum":"c1c1290abdfadd23ebf04b6a0ba89a13fd977753","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1902-beta.tgz","fileCount":418,"unpackedSize":5337135,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4J5Y1A8gT2QJQ+jxdi7v73Fyk70h06k4LNF7/S9WOSAiEA2xCjOXye8DizPL9VylyFoR+qFg6bhT1myTtNxDV9iEM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1902-beta_1519687293320_0.7160454161086547"},"_hasShrinkwrap":false},"4.6.1903-beta":{"name":"meetup-web-components","version":"4.6.1903-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"44a7e123b4ad476c0e44cdf8a34a3e073f9e1fc5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1903-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-tmVquJ/i74SC3SI6qMqWBvDGusqiRnM/r6V8LWbepd1fZOnW6hD+DWTiSRy69bl+M6hDfo7iaCF4h8kJgp0JNw==","shasum":"950491320b3d51035bd366d0ef68c7a2692004c1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1903-beta.tgz","fileCount":411,"unpackedSize":5639812,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDJ5uTQEtIVkyqEc97N5QjrYCx6TJ9mHhP61n+kU3XjdAiEArGJr0WTm9DPzNvBct7nYMnig2VuxXK8zrSh42PikHqA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1903-beta_1519746102544_0.6243935671316865"},"_hasShrinkwrap":false},"4.6.1904-beta":{"name":"meetup-web-components","version":"4.6.1904-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"79c964d04f39e64eef43277b98b819444f6ad015","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1904-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-FR6A3nx15gswfCyrxeTitNqe5rTLoH3906ifqSvYqlcVlGMTzNjYU6S9HnZI58R2LtX/v5gkvoqIDvoAf13Qow==","shasum":"b562f9c046c531260031523fcd0bb19802e494f1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1904-beta.tgz","fileCount":411,"unpackedSize":5639812,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbSTBS7fNCMH4M76fo4/CUJchAXIYwqq6r7podo6CqIQIhAKwMpHvKd9qg/kPXsZrAwt7mdc1MHxH4sdptTDKlvU2C"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1904-beta_1519750181546_0.8805100812295379"},"_hasShrinkwrap":false},"4.6.1905-beta":{"name":"meetup-web-components","version":"4.6.1905-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"249f7335130dd45d76d49b40aec2ca52f7631f51","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1905-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-AGNyt/5+8odzSrFABy9ceoJEFgdIypNbVej5DHG0lk8N9wZGNYLgnVVxrtB+vGFaKUlOJjh6co+R4z3Pp0oOKg==","shasum":"b4008cddd6a0eef45949ad334aeaa7de0261be75","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1905-beta.tgz","fileCount":411,"unpackedSize":5293779,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2Abake+60mq02OT6ksCGHfzt9ADhekUZ5rfiU5j5dcAiAoJPPuQp++OrFSQ5W+8Z429XTfwTvverfOcly3MV444Q=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1905-beta_1519751363686_0.3223461538898633"},"_hasShrinkwrap":false},"4.6.1906":{"name":"meetup-web-components","version":"4.6.1906","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"a87f059d0b136638a29a019b0b9a63604c1382f6","_id":"meetup-web-components@4.6.1906","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-+vOasqfC0yxxN02bCRI8yrHLX64aNJqFkqeSfESX1B9Ri0vWHP5Bd8g2ZUAnz3OzgJ1eX/dUS5m0waognbM2dg==","shasum":"ffbf10a24bd3d47fa2861437ccd0f67840462ffc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1906.tgz","fileCount":411,"unpackedSize":5285166,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA0V1/zhvGlNpyjlVYZcUApjp3rfahwi7DGw9fZspuf3AiEAtu9p6BjR/+01pMzVfti4pbn+dJYT2dY2owblmBj0HOg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1906_1519756680325_0.2672777291210111"},"_hasShrinkwrap":false},"4.6.1907-beta":{"name":"meetup-web-components","version":"4.6.1907-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"b099ef02a56b04fdf57d8f70f4f6f86738dfb31a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1907-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-tpS6AJJKfhaRUzfjfHd0lHPt6HUkL3+gibAYkH41v/9iSiLnkWKvofEL26LWCpefVo71bv8M9SIHjfe4U8wffg==","shasum":"1ab593a2d0d51909dfb7544ee28f42925fdcedff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1907-beta.tgz","fileCount":411,"unpackedSize":5640086,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDeY82hwbznDR43UxKTrPQojnXLmwbO/CwwHElIcLlBbAiEA0ZaQzcrAc/VgaMc7RoPcPpPINuTi6A4eZALRaQpVoGA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1907-beta_1519756934286_0.669559316032172"},"_hasShrinkwrap":false},"4.6.1908":{"name":"meetup-web-components","version":"4.6.1908","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"8990da21877756794643223fcf196bb14afd244e","_id":"meetup-web-components@4.6.1908","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-PvD0/KzKInQFzcXay3DMNeH+1CUDQhYKvs2ONi8JABHGj63J4yQZRAt3t3eoJ/2SQ1noqWY1uyEkll6U0XMJcA==","shasum":"a0e7e37c40d9f959cebbf01f5f1abda41918a7e4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1908.tgz","fileCount":411,"unpackedSize":5294047,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGEHax2Qsn5BNGSuf10Rc2bKEKv+snj3kswo0Qx8LPdVAiAS78v+a+oL709Zq2j/SVsHF3rdGtZE1Q9DV6ihCvZ+aA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1908_1519759015448_0.1315309197809742"},"_hasShrinkwrap":false},"4.6.1909":{"name":"meetup-web-components","version":"4.6.1909","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"7a18d8c99ecd6db5a9358b92d2180757bf071f4a","_id":"meetup-web-components@4.6.1909","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-4heoJuvqmd14bRZjrhFSwZFenn2uKa3MGDE3Pk0OpYBRa2uasSBQhv9bRj2iVihC+fUwHvD7TeOmsezaKKi+wg==","shasum":"c1fd6ef42aebf4a80502dc87d70fca76065421ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1909.tgz","fileCount":411,"unpackedSize":5292012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/6iY0u6EvRVQKzc1tikgISytqO/232p0vIF94C9HU+AiEAh1B0AHKuC9VNmbHW4h3M7RZBiG3Yl715+TxDg/8auBA="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1909_1519761677083_0.39918827660927536"},"_hasShrinkwrap":false},"4.6.1910-beta":{"name":"meetup-web-components","version":"4.6.1910-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"f0467dfea1644661cceae8922c3cb3b8f8dee953","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1910-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-czXUZGKm5jPtXZW0rTggDeCHMgBotYWklZVvtsL9gZ4ayjmmDn1Tw2DMstBgQoRcrzQMCRZI1yS0Ncio5StCvg==","shasum":"1e6de4b846afe80e7f3315a7490cb9654c3461da","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1910-beta.tgz","fileCount":411,"unpackedSize":5294764,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBKV3sFz5+weGZ889mMxK01KePr2yX65f4evKvNHsjzAIhAJdL4gzRXtdHyej7cE1uV3O0kgKNwZw8YSDpJ9RoDh6i"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1910-beta_1519771981246_0.7508489697073446"},"_hasShrinkwrap":false},"4.6.1911-beta":{"name":"meetup-web-components","version":"4.6.1911-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"2386ce9db9c225df402e3954000447e4aafe9bc2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1911-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-aXhORl5CmLuz2gcBV9i1HMt7z8tf7mcsghtVNbj/whOYeAUwZQzKcI4DFA2Zkevbd+39LQJ8YEBjIzF3dG+GcA==","shasum":"62f80dd90339d2c0d8243c79701ac1e74a5f360e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1911-beta.tgz","fileCount":418,"unpackedSize":5344351,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYvqT24Zv7DIQvlih+3Yc4VnPn9slyu8DubqsDLS2vLAiATSZRhFggh4DDSad3KmI3OTfo/Pvlw81p3m6vIT5weyA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1911-beta_1519833021625_0.5782130228130842"},"_hasShrinkwrap":false},"4.6.1912-beta":{"name":"meetup-web-components","version":"4.6.1912-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"git status --porcelain | awk 'match($1, \"[ACM]\"){print $2}' | grep '[js|jsx]$' | xargs eslint","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"gitHead":"bfacaf21be76071b317ee70afd761ecf5bf23b55","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1912-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-aCbT/3MiT+BA5UK6kV4I/znxQCePn2NNeqYucyAD1yOYzFypaXWQ9qWpkQ2oi/yz+1XvuBYWR9tF5hIKm3VIWw==","shasum":"a7b35d75e7f456fe7f226aba7afc61cbc772bf23","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1912-beta.tgz","fileCount":411,"unpackedSize":5293824,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWXNxk4plGVpCqyhO8H+RgFdg8bKGgjdGE2KQTOayWPAiEAgRX11WJZcKBMi4MEEqk7I18dr6noKm6V+5QOdLUDyow="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1912-beta_1519846805583_0.4990094898718045"},"_hasShrinkwrap":false},"4.6.1914":{"name":"meetup-web-components","version":"4.6.1914","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"false7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f4c1899da72d9db0a013c69211505ddfa31afc1d","_id":"meetup-web-components@4.6.1914","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-Vl/ll+TismesBDnesGRvoBsx51fj6nSwVVhbFWkxDt8zq0JyZhg4WnGRqkud7VgBnxtUOKWQ1NHF8LawcL60XA==","shasum":"573295683859f5fceab05ab4843c743589a50c0b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1914.tgz","fileCount":411,"unpackedSize":5329064,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIdB4a5MlJQ6nO9GvqxHhRq9NDQ4jG0SPHnAqWr2487AIhALOi3sQOWS0NAUF2vmNkOaQbAhpM9QW7fbjJbU8q24fY"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1914_1519851805481_0.8259186294763154"},"_hasShrinkwrap":false},"4.6.1913-beta":{"name":"meetup-web-components","version":"4.6.1913-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"false7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c55decf315ed29797b4934f9d9daa9c590173a96","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1913-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-2WWrUl+ofCMuBOXgPol1D0fLvmYpyjtxO+xUYflOdbQBBtB1jNqXS8Lu9GpKBxvQwavpDdCb8w393jH989o1pQ==","shasum":"8d62b46ac87b968c6f365eebc84ac105686890d8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1913-beta.tgz","fileCount":411,"unpackedSize":5329069,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5c+qkPZoSLPrKiwH73Rx82ii2wn6mWcaCtXEHgOOkOAiA4sEXc43wW8aseatlt3U3UkodEPROdpy/kWPQ+TdRvcg=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1913-beta_1519851843919_0.05111358185202941"},"_hasShrinkwrap":false},"5.0.1915-beta":{"name":"meetup-web-components","version":"5.0.1915-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"false7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1ccebd2adb2e8e55d540fbdd232403bcfd88638b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.1915-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-pPDQJqbLqq6BVPxOa4Jllzm+GlJP+9XGZn+AS4Zfi/UaL35fGmJQ2GNX3ii2DenkXkZSvFeGsNSVfuxr7kz+hA==","shasum":"f930e54fee9a9a13b61a7976c318158c4b40eb67","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.1915-beta.tgz","fileCount":411,"unpackedSize":5329069,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBBSWZzIR3hIJIzwydTlDE7k2KjDgaG4rcvHJPyjetZgIhAJ41hzZe9E+IucCetE5wZM7J7dYrpz2aJBZLQjVBG6yf"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.1915-beta_1519852538028_0.13943313430109883"},"_hasShrinkwrap":false},"4.6.1916-beta":{"name":"meetup-web-components","version":"4.6.1916-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"false7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"5600fdf0f775568d86504c2173a1d5203dd1f3f8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1916-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-EoVhn8Ii4iIeWf1NYhvjynqX6bmvTPTnlh8TsMSWOPlLsWssTeeAW7Wh7ySXYmFoB3OKnh65lF63Evd6Nwf5oA==","shasum":"ea15af1b7d755e86186027844211498f45c7f9bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1916-beta.tgz","fileCount":411,"unpackedSize":5330448,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7T8hniA//lAMf3V3wmKFaa4wXPe/nNHoNtHsOzOgg1AIgQR7vZ4SyNwVe+nzO230ywYOgmze6pC1sJX/GEOXCKnM="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1916-beta_1519870671841_0.6970005981606902"},"_hasShrinkwrap":false},"4.6.1917-beta":{"name":"meetup-web-components","version":"4.6.1917-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"96e388d8d2d8115cfad1d2fcd04da4d14bba2233","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1917-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-HTi40H5KWOxAl5iM987kxxXwx3jGDmKTMyEkFdJkHbZBFKqG0CqkZycBmbp1BJrTqsMTh8zrCb5dqzQ+/Lu40Q==","shasum":"d4c5b716d0dc126dc62fa24ebfdc73bd89eb8713","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1917-beta.tgz","fileCount":411,"unpackedSize":5325454,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3HnCjZvbKTjzmic8G0tEgS5O5AaReQ6q8JE3312pxAAiAC5Itb04LD0F6MZz8KK05Ih8IryI9nW6GaqrYhFylwrw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1917-beta_1519872367158_0.5297338027124119"},"_hasShrinkwrap":false},"4.6.1919":{"name":"meetup-web-components","version":"4.6.1919","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9dd44ad1c00484668b21971bcccb53d39c374dc2","_id":"meetup-web-components@4.6.1919","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-1qrDdp1ag2n/euQbIRib8h98BJ39hV+Zu414HL2JDj6MvGtcVDrdZxesViOQCR59WRjJ0dAy5f8oXZO8WXCLqA==","shasum":"a43bf1ca13b7eba067e131803537ad0f2d135530","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1919.tgz","fileCount":411,"unpackedSize":5326828,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD40XpibSCr1c7SOmBHs49QrIxCSI/R29U/ah7bQi3KvwIgfz1+oMu7RCkFyu6hQwIQrvXmumM0/arMnGS4ft0Fknw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1919_1519923874879_0.8398497407739953"},"_hasShrinkwrap":false},"4.6.1918":{"name":"meetup-web-components","version":"4.6.1918","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-intl":"^2.4.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"false7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.3","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0fdc728dd433ab48e61846a4aea1924958f5a101","_id":"meetup-web-components@4.6.1918","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-cOSXkavnxyWdLMZb1ombZ2vOHAp0mEQkbuqSLWTjOPXpV9BEyZAByek9J82942vgzBLmD4pHAWum7lvBxwfeXA==","shasum":"2ebbdcd1d69654165d8451c35ede782d67574ad2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1918.tgz","fileCount":411,"unpackedSize":5330443,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtEsgLSoQuQZkfPioUqI00eRPW7xaVzLoqiGDMI5uiyAiEAw0maDejIu49gjF2vlwUuhdJvp52EDwQ18VdOw7ONbNE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1918_1519923916119_0.5726074299932706"},"_hasShrinkwrap":false},"4.6.1920-beta":{"name":"meetup-web-components","version":"4.6.1920-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6dc20fd0684df9494df5cfcb4086f8ecf017f4c0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1920-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-EnyXZc27PRON2Vd7PVmYgpthTKhNIdUv3kBobbLNb3+qyh0LjxNZAZ39q+S5pEwGYF/57FkDdVRjeEqXmg7gCg==","shasum":"3da3545c0581eca99d8d8e87d23391816fbf3964","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1920-beta.tgz","fileCount":411,"unpackedSize":5326206,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8nIaVRS3QHCNWhbILAhHvNwm/nCI0cR68BCmHD2oX9AIhAPZblombvvXux1jQLd1oy/NSsAgsyPv7woJ6ep+zEN7w"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1920-beta_1519943922959_0.850818851074741"},"_hasShrinkwrap":false},"4.6.1921":{"name":"meetup-web-components","version":"4.6.1921","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2cb625c23690001aedc884fd678dbfd086793662","_id":"meetup-web-components@4.6.1921","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-+cvsHoi7ce7Dnt3fCJ33fsPjt3TX9+GOwH0kb59EIZ6tyZj09tXfYk5gaHQfTDkWsbQEr/YNYNXU/ckv1deL+w==","shasum":"424d096812741a0b81383b3bbfecea79cc029cc2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1921.tgz","fileCount":411,"unpackedSize":5326201,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC+wIijyNTSe/jOq3PoXYUK8fPd1uN/fOGJdTo6fUf4dAiEAk5kV0sM8yjFSrerp0ZTF2nDXK4nkpzqy2s/9W1kYeOI="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1921_1519944563132_0.5176456054062255"},"_hasShrinkwrap":false},"4.6.1922-beta":{"name":"meetup-web-components","version":"4.6.1922-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c56565599d702d4da0d8825cb647bcd6fac3c76e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1922-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-JhhYGhGoUxm9dORgj9wpXItbWTDVhCJTJqxsTXdKKIY2jODJv4zVVcrk6l0p5UgE5NVzl/fnkJPYQPbEYdK4eA==","shasum":"b3452534a4cabf4a24f51049e36c95de9d0a2afe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1922-beta.tgz","fileCount":411,"unpackedSize":5326200,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBi1Nt5530rGgz92h397fpnWicWlnk3V5gFfetTRMWSmAiAj/ipGvAllUuFNob9RLjYD3wVPapBhD1oDSx6UGyCfLQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1922-beta_1520279889281_0.7851391261315523"},"_hasShrinkwrap":false},"4.6.1923-beta":{"name":"meetup-web-components","version":"4.6.1923-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"d3825cd9d41df3fec35c783ae5b2db8d0e060340","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1923-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-owkw9euWsc8GOrlOpR0tsOCr2jr7w2G55l+IwI7aP9zcVbCLxI9U9bKKcJRLCdNy2BxYCSgWJviGOBOpKtM9Sw==","shasum":"f80b359b4e63c7892d83dc5c8a2baf5c09c12bd4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1923-beta.tgz","fileCount":411,"unpackedSize":5331067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjGQGCnn8TLU5JgbSr8TYX8fYzj/Od4m4pMZ6YbA3AHAIgDoVg0OZ55nbR7RfPtreMvnXgo1m+57V/kNQ8GUGKBpw="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1923-beta_1520289047127_0.0662679652201228"},"_hasShrinkwrap":false},"4.6.1924":{"name":"meetup-web-components","version":"4.6.1924","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a8f38ce863b266fb6f9d09e4f544e4641449e560","_id":"meetup-web-components@4.6.1924","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-5JC374qotANqTsCCUJ5keZM5ZCswh7hyW5QwwumQ5AnvHsdRfUDJ9wEwVYWJJDZ0ki009raHvVAqB5z97+74mw==","shasum":"e842dabf5a1f587ad25d66997b2120f1cbc9a82a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1924.tgz","fileCount":411,"unpackedSize":5326195,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIFTvNG1NiSJ6uxx3lOSatfBxfLd+tzxQ/EvFqNT5WBaVAh8uMwuCGP1ZgLHv0CvJ/eTFTj0Sm6/+XcK38ZoMG6wF"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1924_1520289155169_0.439471511286464"},"_hasShrinkwrap":false},"4.6.1925-beta":{"name":"meetup-web-components","version":"4.6.1925-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c01a7880dc82e4399f1ecb5d17e266b6b276332c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1925-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-rneLZks6b1f3RFqxPKJR8WQtkxud69iQqBKop4H3wutnyFh4PL1DbJYhibsJGTapwsRp54wSqZOAQWQ7a7utIA==","shasum":"ba308fd6525350c985e1537bd7bb29b454250f5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1925-beta.tgz","fileCount":411,"unpackedSize":5326202,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA2c4Ow+VQy6CVEzOVYsXKF+MDELVXsbHj6XZg0JSR6gIgAw+7/OVuvlvXn7fp4Jo0EQE2xH9sLPJ6CRjetQWHANc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1925-beta_1520290680477_0.9710501830566889"},"_hasShrinkwrap":false},"4.6.1927":{"name":"meetup-web-components","version":"4.6.1927","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"84b469a2be67b03454a984f742d3721cd2050669","_id":"meetup-web-components@4.6.1927","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-vugb1xM9cgbWO0b/uwwnkbSRfWeetaVR9rQTu1aEb5zD/i89lXakWcZuGvHuUaulPPUCpO6YCCp+WdKz2/zURw==","shasum":"31f01f8c7cbaa6b9d62586a432fbb72c6748ac6e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1927.tgz","fileCount":411,"unpackedSize":5326197,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvBQKU5Bl1eVOVGpTBC1G46BDtVjjfnfu1VK8ddynl4AIgPSi587pB/6gIMbh0DzQ+9RIf9EOa7OXw8rlARmwA2gc="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1927_1520354895559_0.25051599780501443"},"_hasShrinkwrap":false},"4.6.1926-beta":{"name":"meetup-web-components","version":"4.6.1926-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"19d883bf21037056e7ee8011cba6cc7bf2338076","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1926-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-hoUnTc+WGuzf5V0J1T9RWfFJiCn7Gr6o3NcsyVNJXhHkDdRPA3aksAnvuKysHvu6iH2+/40IPFSZDMKFXKfnhQ==","shasum":"3061094530ed0914e7b68c48221ada0b61937072","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1926-beta.tgz","fileCount":411,"unpackedSize":5326275,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLhLuzMhkeMKS5RIJ0r/BFt6DM0tqTmxE1PZyaZOifHAIhAMlU+20izPKFE5j/S0iv4Ld8b82MiQGNczBiBNwLAHjK"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1926-beta_1520354954432_0.48274914617950215"},"_hasShrinkwrap":false},"4.6.1928":{"name":"meetup-web-components","version":"4.6.1928","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0aa9604a6f7feab0801e119c3321a6fbd1f45184","_id":"meetup-web-components@4.6.1928","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-m6OM0+y9v/do5nct85srNTymVHntgdIzKYXPTIaimzQEoabH9LGq+E2qRGXa68Cu+ZW+F1BNVdCGZWWooFEEAw==","shasum":"42c95066288706d5166fb6f6150534c05354de30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1928.tgz","fileCount":411,"unpackedSize":5326272,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGnBQ9KbJbvjUjwXEoXysjBV4z6PK6JLPq+90pTAYMAsAiEA6eRE+vsELbnpxM6KDvZK3LF1eNC+Hf3t5WYrPSLSRz4="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1928_1520355160418_0.1284931678379324"},"_hasShrinkwrap":false},"4.6.1929-beta":{"name":"meetup-web-components","version":"4.6.1929-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ff81580915280c0278247d5267f56b59b575ca68","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1929-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-OuEUm8uPQPepZI79gkBQlOuFhWQOlc2ZHC821zVA0YWFuMDxYVntGbQM13tPiG7Wj2hJ6XAuaZh478BLQxHDdQ==","shasum":"ba89379f5e9d717f3ff45e5d70197f383972a534","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1929-beta.tgz","fileCount":411,"unpackedSize":5326271,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl3keUDgU0gl9QQd+CcelM+A5muGnFhUPR/lwvDuefFQIgfmkpS8z1V/S7REkZqOwrvRwT/S4FcALdg+tnH47XQgE="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1929-beta_1520356409238_0.9226637974116958"},"_hasShrinkwrap":false},"4.6.1930":{"name":"meetup-web-components","version":"4.6.1930","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"50aa61f406609812c5b8022b0ec712d2a0ae56ba","_id":"meetup-web-components@4.6.1930","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-T9DvxkASQ4ftQZxLA0vtLOhvzpGQ8cSzMyXCGQH160mWX/iJQcqmFi8w/otdJu1zOlIRfzKUkCFrXsy1pbPL8A==","shasum":"b3afc497065a2cd06f544803ddc33a7e31c9a9ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1930.tgz","fileCount":411,"unpackedSize":5326266,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1xsfiADSP97ZbM+vJpjdVvqInVEfkjp4//Y0eOOJhXQIhAOH+KVxI1RZXjoAjs4W3HlR97s3VF+8u/M+gwASQatjL"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1930_1520357335947_0.13661744859294078"},"_hasShrinkwrap":false},"4.6.1931-beta":{"name":"meetup-web-components","version":"4.6.1931-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"84b28d101317651c3a35a3998515e1a56d62f9bf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1931-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-g9MLfFyfbyFCBC/QFsjFNAXtHHeWMXQ4mQxOCIXpOLSHAejOIvEYcjz0w13aIPQtG0eDkVZB6lCztbknVZ8E5w==","shasum":"3520da0dea9295c3e4404b1489938586e671db69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1931-beta.tgz","fileCount":411,"unpackedSize":5326893,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH2bAxNXfwKDSYjkUJEj8MWkm8HJP8gEKPKAWkntLdH3AiEAshvijwH3PUbcBZgLZK8A4aB6fsNFJtAr/OwxmyGsgAo="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1931-beta_1520357588468_0.2540991503424359"},"_hasShrinkwrap":false},"4.6.1932-beta":{"name":"meetup-web-components","version":"4.6.1932-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"01ecd54ab17ef592582ec3ed58137ace95ec49a9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1932-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-0CLonrr0e0JJJ/sKZCHgpv1pxus0hM3nL/PUkDlzc/sqc87RAlWBJq86ROHlUyCc0zv5vPMKtrLldRgHBXuqiw==","shasum":"d144c45db8e63980a24642b7739eb94f157054c2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1932-beta.tgz","fileCount":411,"unpackedSize":5331117,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDKxXmg80FjRmlkVw63mKSdof9xyi233fOvsiIDgoFS9AiAjgYSu4C17S7v+WyCrAggjty0V24tb+GO5qW8UlAroLQ=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1932-beta_1520357857964_0.3811246782923914"},"_hasShrinkwrap":false},"4.6.1933":{"name":"meetup-web-components","version":"4.6.1933","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a68d63d17beaa808cfcfaf9d24339fc32ef86c17","_id":"meetup-web-components@4.6.1933","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-SMzQu8R5otNsdsRASReH+c85ZC2rjCp/P9J9etYomnexFRkxuWaV9xJiNxek6dr3wVWm5QD394ZgrnB1eSdftw==","shasum":"62488f8efc158f0e903c5b3347b61cfbec4a73b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1933.tgz","fileCount":411,"unpackedSize":5331112,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBVWgvo7giHVBXeb+qNhdelr0olKnG6JZyJ8rjOp8U1AiEAvkw1jRCebqMFRgjIkmllwiZx8Etali/FMdDSR9niV0w="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1933_1520363126878_0.046486671620873166"},"_hasShrinkwrap":false},"4.6.1934-beta":{"name":"meetup-web-components","version":"4.6.1934-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e2c9fdd8176b329d40ff6232ab6b30d356df911c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1934-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-9BqzAkGmEcrZ0qvei6Kdm6cUgq6mEsDmQJE9houN9U0RJhxj08qu+HTBZAor8nCivQHK6SY2j0LuDx1EY3WC7g==","shasum":"b2062a8eb95f8688c0f3aece94f45f62e568a416","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1934-beta.tgz","fileCount":411,"unpackedSize":5331022,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBA6chjbKkpwn/MiRVS28YqtHMnr2iZaeCm9ay2KbD93AiBgyrAfhZAz1luCaOLNdo8j9jIHLRzOGIRQysJXv4esMw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1934-beta_1520370266048_0.6462869847917272"},"_hasShrinkwrap":false},"4.6.1935-beta":{"name":"meetup-web-components","version":"4.6.1935-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4f057dfee86e57455c889012c5c724d4a9303fd5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1935-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-HhOnAoiLjduX8kkQKimJNbn4vOlzgMlh+m60YBJf9CBtCRA5pI7h9HQp45juUKgnd6MiwQMuNRv44RD54iEF+w==","shasum":"f5947ed70e391805a9746d54cd27e27a3d8598ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1935-beta.tgz","fileCount":411,"unpackedSize":5331731,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDEMGJ2tVGp8l0vf1+IjFY6ZeUskrRZaHbzv/0Q1Mz4cAiBfXD4vMCouu5JWPy/O4y8mLuIxa9WC6aXag/1z2zUpIw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1935-beta_1520371826553_0.5245835226403286"},"_hasShrinkwrap":false},"4.6.1936":{"name":"meetup-web-components","version":"4.6.1936","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"5d895f70013fd782eec9c69550f801447253f612","_id":"meetup-web-components@4.6.1936","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-AjYptkiBH7Eo31GQ0bUaij8NmgDKFihIzCiKg0n7wSA0vHEfIdCm07ltZ9yL6D7n5rgQC8Kh8kovOuGFiupN6g==","shasum":"5fdb46b0807651fd4f556af0ce666bd130402a95","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1936.tgz","fileCount":411,"unpackedSize":5331726,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpMEt+Y+UEF9TXGkOst8YjpuEl4QJ4yY9XIy2RB8bMAgIgCG/N5lf76+Zr1MdEcxU6f6Oc8etvWyCEVPpPB9FO7Q0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1936_1520373242205_0.846209855189133"},"_hasShrinkwrap":false},"4.6.1937":{"name":"meetup-web-components","version":"4.6.1937","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bd97a1c20d537ef626f439804fd243350fbd605b","_id":"meetup-web-components@4.6.1937","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-HtQZz6VVayUw6nMuvfhV9sfpz1hwOq0NNy76/9gQOsTV+wHOGKJOEesjETFU+azHLeQm2/GXt6bIsZO2+OULhw==","shasum":"091300916d37399d316c578d24b2ff75e3bc27a0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1937.tgz","fileCount":411,"unpackedSize":5331631,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHUgRFTl706sQJ3L3pXW1f+iU+2pXjuUHn6dONvT/POpAiEAvQ32Ir3uAiy3c5WtWAYHRTH7IIxjNEoibsT7AE7tTY0="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1937_1520373316546_0.5510879827013204"},"_hasShrinkwrap":false},"4.6.1938":{"name":"meetup-web-components","version":"4.6.1938","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"502a1340170768d449a3da92edbbaf0fdd06b0be","_id":"meetup-web-components@4.6.1938","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-uJqsS7sRB/LMeO2PJqHBw6Z1Vq/E9psNkNKb4Fe5gHQ95wFAZ5em4LkqV+VlOnhf1dLTzQN91gqrvBrXmzKLCg==","shasum":"6f59dd0d2d147d248936dc7b7c568ee4a2e26f44","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1938.tgz","fileCount":411,"unpackedSize":5332253,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTbZkRUtFwb5WgsIqYGSYIUx4SrJmepN+PA/CpbBqXMQIgJuva0oLhjaYcEWi4MY4r6vzx70ItN/R3br9vAWwb064="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1938_1520373323998_0.15392682465719765"},"_hasShrinkwrap":false},"4.6.1939-beta":{"name":"meetup-web-components","version":"4.6.1939-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"eef803d6c40c4f88a68821e3cf14f95f6f0cdab9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1939-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-fHMN9Hiat+UKcbegbRCych9fweW9O2ZL4Oh2Yg3URiWLIHGZM2vsVKz8C73A2Rh9TwGAjDXI6cMnXQZqKAc1pA==","shasum":"14602da48f5654287cacfafc6a2de8995d142dff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1939-beta.tgz","fileCount":411,"unpackedSize":5332413,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+fEXEQlPlxz2S7rfQDfKKLtll8Se/7RxFGdnh6ywe6wIhAM7QR/rYTGGthnFqqkDaMDCmtvuSpC6/nk5BYX3j1G3A"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1939-beta_1520373849929_0.8660727242464394"},"_hasShrinkwrap":false},"4.6.1940":{"name":"meetup-web-components","version":"4.6.1940","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7bd3ac952976fc8441d3a6e2b909e5168dfecc61","_id":"meetup-web-components@4.6.1940","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-xaFpc/Z1MyD+CxmqJqEWRWHJ3YvtTsvr2sIrZ4tWoF7B6eGiTaJdczCArQvyfqDAanl1rqY58RHtgamJRRS2Lw==","shasum":"f7fad13aee3db8f50efd8c19ad271594ad332cd4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1940.tgz","fileCount":411,"unpackedSize":5332408,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFvx+FtGtMmYV6XHP/JV2BeCR1o58srUaoQZW6bW85TmAiBbBEVTPKIcycvJaVWg4DMg1VbUq1nBmNsAqMJws9mJdA=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1940_1520374498510_0.7877034191438144"},"_hasShrinkwrap":false},"4.6.1941-beta":{"name":"meetup-web-components","version":"4.6.1941-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"05e6e5b5b84b7d7117b20c37beee30a6ec5f3290","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1941-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-IvQcbUvtMrEf/T+PUEldqH4bNvzwt04HnoIbYl7TOor+CtOfeqpaCIn67gDutlxtT8BmgKt0qCHYEQ1zoIAJyg==","shasum":"627fc6296b8136fdb542e9a10546756b5e622223","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1941-beta.tgz","fileCount":411,"unpackedSize":5687328,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaFVuUmkOP0syZWDsgS2neqfi0JqrlnsyXsf/ZfaKVhQIgFNljlQitPyaj8Ixb6qhSTwqWHpb7BObu0tOhB7bEbZg="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1941-beta_1520375748858_0.7814479679868462"},"_hasShrinkwrap":false},"4.6.1942":{"name":"meetup-web-components","version":"4.6.1942","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7b248aad899e5c86d6f7c0ce6f9454471355e521","_id":"meetup-web-components@4.6.1942","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-pX8c/vxy2+pq75mJ9TYFRVSGgWOYATqvFzuUKwk53lREaZ8P0Y8eOnl32/nBwClE06ddNmd8MKRXLMR4xL2MRg==","shasum":"ce9696fefea9601973d2cfdaddcf34a1f83e3e54","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1942.tgz","fileCount":411,"unpackedSize":5687323,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIUKRMuNyBt+e6bGPT5spZhsVRegkE7ipTWE8ulH1gowIhAP/sS3Qt/0pucD5RHntDy18cRJsIIJMBsbVzOuQQxuor"}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1942_1520376894812_0.30418183930500353"},"_hasShrinkwrap":false},"4.6.1943-beta":{"name":"meetup-web-components","version":"4.6.1943-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"045c9e609f1563657c1d58800c73e5ab27d3f0b8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1943-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetup","email":"ai@meetup.com"},"dist":{"integrity":"sha512-WpDxGmWqyy0O6ZvXy2johHtOMV4qQhVprT8MfWvgQGIXHqBJqELIJjaK/uD9weyqdA7AvK3IuNH4X3PEruixRQ==","shasum":"3cf613c11fba2b1e04adfa1adbabff8e6c0cf020","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1943-beta.tgz","fileCount":418,"unpackedSize":5739337,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAVSBogmDl3ilq1s6mkgyOBDanGILqGYrFeTpByJEpNcAiBDd0XD1/8Xt/4EPw3i6dZknaqhf5gJpD7arZ+H2ce1Uw=="}]},"maintainers":[{"name":"meetup","email":"ai@meetup.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1943-beta_1520454735270_0.077677744016873"},"_hasShrinkwrap":false},"4.6.1952":{"name":"meetup-web-components","version":"4.6.1952","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fec071240c4de1cbdb4aba97eb8bd5488db07679","_id":"meetup-web-components@4.6.1952","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gDWeOB4PenRQnXQRf4ak7xKjN/lNX8JbFtomlT80iiADd6chosQiwtRNOKQ6ppXxcua6jQqkt5Nx2orqo7ztng==","shasum":"1f59b670651be522d6790b7b3704f906e3b668d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1952.tgz","fileCount":416,"unpackedSize":5692563,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHyiVYZie27cBgdwcSYMmNm3QUXtEn5kB4OA6qCdNCGkCIQCV6cnk2y/tRZfRz7sz18iCq92cMkF8FVGhyGyRF67nLA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1952_1520609443013_0.5749274914675224"},"_hasShrinkwrap":false},"4.6.1953-beta":{"name":"meetup-web-components","version":"4.6.1953-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a1b51ae861aeb0bc7d91bf78987067bca185a7ca","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1953-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-li6cLhRSvQOjPg8m16sP3LR6Wm0bqXFwD48Y3C1EL0lKWcho4lbzd/RRFlPZHo3yoZGm4RHaaHqN8+3cxsSg4g==","shasum":"f0e30ed7448e5bf731197d0333f10c3aa9cfd425","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1953-beta.tgz","fileCount":416,"unpackedSize":5690559,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZh84RylVrarLQd7hDTwxGK5L1bDjHiviZ8OwBfDU+AAiBD5DgD2dOglhBELfUxutx1M2QYTHdnCAT+vBDwiZJQ0g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1953-beta_1520613234673_0.0688310424956875"},"_hasShrinkwrap":false},"4.6.1954":{"name":"meetup-web-components","version":"4.6.1954","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"false0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6628091b97215f9aa6cd36b2aa3330a9e37ef0b0","_id":"meetup-web-components@4.6.1954","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-f1u2isj2ZS+jHItOCP8unVuxfkYpAJ0K98XHksTMwsm7SXY9PXSnvs1uUKtrhsFL1tO+OJeaOQKlw7ILwJt4wQ==","shasum":"cfcf52484d75ab9edf35ced3c5b52291ef7e9753","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1954.tgz","fileCount":416,"unpackedSize":5690554,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo+PpLaIMJnw4+RlF0TPlnPBsMjskgh5o8D9yGW60RfwIhAKJ7l387F9yl1HHXnzfzknS5FM8fyJtZpgY5yafomf8P"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1954_1520614869070_0.7413366293385131"},"_hasShrinkwrap":false},"4.6.1955":{"name":"meetup-web-components","version":"4.6.1955","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fef74d6563e38f7dd4acd956c4ac502af9827f0f","_id":"meetup-web-components@4.6.1955","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XcWjh0KR0iTCxCNZNQV4SGc0OuAb6aDvINtGlq1o4SZ64gxG18upgcgcHY/XJNAUjpO+zxuslA2GB8QcsmysBg==","shasum":"898d5c4c05dc245f0f6e5615689529d1e385034e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1955.tgz","fileCount":416,"unpackedSize":5690544,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGjbLDeFWLE+J06ZMp9lBTLfYkxv6DVzozfc46D6rL/ZAiEAswxgfgbTnGYwSb8Q55Aye204+fRmvF50k0lGo0U2lBI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1955_1520628713220_0.8202350984538995"},"_hasShrinkwrap":false},"4.6.1956-beta":{"name":"meetup-web-components","version":"4.6.1956-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a8da2bb811050b968806c536630e3a403417bfe6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1956-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rp7d/1ZoWgXKeNEkvXEnozdqwkWCHnCjG+1T1Aa3fVus/nma5tsbxFKl3CuRdlu7JXyn7tGRbg25GBHaUqg7Og==","shasum":"d350631150e36321f328858962619d5806c2a255","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1956-beta.tgz","fileCount":416,"unpackedSize":5690519,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWhFxpUGWcJ2PxN6/yoih/EBeg7MBW8oweM/af5B8hQAiARYAkVCD/rMYF6pHwHmBMj4iVHGPYsibJS4Pz+HETn9w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1956-beta_1520818067895_0.7323987396079819"},"_hasShrinkwrap":false},"4.6.1957-beta":{"name":"meetup-web-components","version":"4.6.1957-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"21bf050cd24147376b878707b85b02c60b7725c9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1957-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nSSkBHmneLDALlnZ6edF1qPDk1EIDYRtuclucyu1cvEQfm29Cv/kOyCmPy1wkeizK8mMMok9jF22pjLTWHkZVA==","shasum":"a5c966ba05ccc5036175958d3114060ff516a209","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1957-beta.tgz","fileCount":437,"unpackedSize":5833147,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyRsCHTei4LhtIDUaCj1nzr6TPeXkk7/jCGKBEfqotjwIgYHYcwd5ZgUHoQSpLoZlVoApZJUysJIHLPkruK3Ju3uU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1957-beta_1520874373820_0.8182463041706667"},"_hasShrinkwrap":false},"4.6.1958":{"name":"meetup-web-components","version":"4.6.1958","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f9543d6bd6a3aa69d07154b6901916dbb5723eb7","_id":"meetup-web-components@4.6.1958","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-82JxIbFtn+WYpM/orpX86txZL/SmQDx8dtrgkeZWGzqubjyPHKLPisw8H/WdIWfNEbCe91U7M1PsiiswNdxXKg==","shasum":"d657eef74b91df69fe940f68ed8ab69af0db5b26","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1958.tgz","fileCount":416,"unpackedSize":5690514,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC18OBjbd+5oxGYLjPxsZXS8MxTRUVf5E2aZUZ6XO3lbQIhAKenvLBdepbekGZ2WgwAK5GiTtk71qNgH2E/Z5jR5tF9"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1958_1520879880651_0.5647114700223519"},"_hasShrinkwrap":false},"4.6.1959-beta":{"name":"meetup-web-components","version":"4.6.1959-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"94d8be22b2e4814766541be09cb2047e9d8165e5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1959-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kzR6ReCXa/Wyl1vCbCC0LmbJNZJrPP7j+tgRlie9q7MEQ0f/wIadFKlqwaMgKvDLEnlbGxnjMQ1c1SY+EOe7yQ==","shasum":"cc1de866a85c18ac695edb5babfac7de65b66c77","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1959-beta.tgz","fileCount":416,"unpackedSize":5687558,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjvn0zLGp/UHcGjMSxaKsOeN6+faHDj39xJfeuYZVqRwIhAI/7KbQhWLyERJ+EmEiOYJGjDjMmJYWnD0T+Gg2Agjzx"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1959-beta_1520880168360_0.6358249235948681"},"_hasShrinkwrap":false},"4.6.1960":{"name":"meetup-web-components","version":"4.6.1960","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b1ca51e9975bc7505195cbe8c2482fa89037759f","_id":"meetup-web-components@4.6.1960","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Yo1skZno9y3I8UuDmT9MYKLhMfbWMObfjqAurgF48BJYbLP9pXZWJtoxOUoOY9MFgAXn9P5330KzKQBZIeI6Kw==","shasum":"fba9bc71ef20b43d1f46dbc1fed8c390c9bdf48c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1960.tgz","fileCount":416,"unpackedSize":5687553,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSsQ3Z5H6eja9WBL+rfXhRDGXHU9o079ld/87E+8FjhgIgW0UsI/qIVqFr2UR+7eFO/iGXXWRFN0pUEGyuX38glD4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1960_1520881170763_0.14807322215913654"},"_hasShrinkwrap":false},"4.6.1961-beta":{"name":"meetup-web-components","version":"4.6.1961-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"afe2ab73dfbfe895de220a8b4018469b87187000","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1961-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-PtOiKphUfoi5NNjpnGhNlgpL+HhUR0zG9aZPQM2HwitUUP4PThsK864Y6SkcbX+In9tFGx8oM7xR6NN6aRndVw==","shasum":"0be5d90f963c06438cadc2f684de55aabbc674a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1961-beta.tgz","fileCount":437,"unpackedSize":5830192,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJyMPg0NKj/jC04h9aP0ZlxxFbU87XRPLNOzlLvB/6xAIhAP9csSjQ5/ptzRe6meAuVd1rUZ0xqggc9iKFr6S8qnEr"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1961-beta_1520884748022_0.2548778219650665"},"_hasShrinkwrap":false},"4.6.1962":{"name":"meetup-web-components","version":"4.6.1962","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4d7b5a247384852897d38fb9b8564160c0401c90","_id":"meetup-web-components@4.6.1962","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-l1pLbuQNyNMh4Y4qO3CXoJIV4mFW8IUH57qFnaYmgAzzDxntz1zOKq9pNw+VIQSJd6n9cz2KjFniqMcefjWrCg==","shasum":"d3cb29f102405fe8e7d678ce704005746d9db9ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1962.tgz","fileCount":416,"unpackedSize":5687633,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGSDeW6rAtkzwKoCVfgZMd0hWFNxJ1G7iHArEdPC+A4wAiEA4Xv3yGIbxnLQ2sqjxkVNBja2pkyXEg2rpHnzNTe5Uqo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1962_1520888177468_0.7101100509212939"},"_hasShrinkwrap":false},"4.6.1963":{"name":"meetup-web-components","version":"4.6.1963","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"66db5097a6ae6b657a82247aa434decfeb5a22a2","_id":"meetup-web-components@4.6.1963","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Bhibd+zsMMEJBNg2IDs4rbfZPdYz6bnuVWiZc5IrpeH3wjL+KwTsMqQviGLIKUdIDi3XjTmdiJNhuEzZ+wUY9g==","shasum":"fc46732405af73edfb004eb81174290f4522d062","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1963.tgz","fileCount":416,"unpackedSize":5687625,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoX51jvtXteZdkvOdF4xBdMR1WEqOSYeBJvKJqu3htpgIgc0PaY9B5vqHS1EZbnNvD/yL3Rd1wwBw017RrSbeKA0U="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1963_1520891203936_0.47972457344352115"},"_hasShrinkwrap":false},"4.6.1964-beta":{"name":"meetup-web-components","version":"4.6.1964-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"640fffedea11d8c3a56cbf2afd68dabe7f835aa2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1964-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OUjB8XH2GhhbsmWDkIH6BhY2WiV+Qpa6QPlcLy5jrIRyCK6TJux9Wbw7Bro61cKL0LeY3CxpjQgvbGqmU3rymA==","shasum":"bff30f5ebb93ff433a094077d7aeb2f62b60b2ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1964-beta.tgz","fileCount":437,"unpackedSize":5831285,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDV59M6N69KVWlkuEl1hfDnNrEQePaqXwQaskpYLt69CAIgCPgcCgsvcMk62W/JkCWwZAxqXXYkrxFR8S4vgMXRuY0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1964-beta_1520893159079_0.21346445546163295"},"_hasShrinkwrap":false},"4.6.1965-beta":{"name":"meetup-web-components","version":"4.6.1965-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a50db99c28bb3c42eac826aef54d6ae1ab9a38b5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1965-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hFFG2RgjFo2Dfs/rMnlK4fOFMePR2GRXJdmLliRKGfk8N14avS+CIy3zoz/+PfKAgHaHUUoteW9sUqqfUokxtQ==","shasum":"00fe6df280e7cc1daccb69603e25f43f2c3c1733","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1965-beta.tgz","fileCount":437,"unpackedSize":5830677,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+5xRaHbxUKtdqi2A6Tuj/2saPwq51ksjYJu7+/2ZoEwIhAOh4iFsF2K0B2RkA+xx1N7o/LfzgwGkD0gAUptRdghWr"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1965-beta_1520894561131_0.4680500008861459"},"_hasShrinkwrap":false},"4.6.1966-beta":{"name":"meetup-web-components","version":"4.6.1966-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"15001d66188762384b759d28e9b1127e5d2a9ff8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1966-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Dc0QAW/LljvYTihhC27QzDeU7iXtBzjFNtxvGW8emqp1V3rsw28kqaDTfw34oLKRT4jTI222FKg4dP4ZwGJHlQ==","shasum":"fada7fa57f1a5418c5f6111e4883182901b60ba0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1966-beta.tgz","fileCount":437,"unpackedSize":5830703,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt0u1mLY86Y+DE0WBAIeC4re/+kXV8+TYC66CLX1LL2gIgMFxvd5VonRXfcutJRTu1OK+a72Mg4Bvs6TAcQsuOwxQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1966-beta_1520895481356_0.7246101571201498"},"_hasShrinkwrap":false},"4.6.1967-beta":{"name":"meetup-web-components","version":"4.6.1967-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2e4601e48860d3dd0a5c66615c4ce37c512a7b15","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1967-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tt57CnOWmZkeU0e8XiJ0Cwnp0UcIgNwLeP8nvlo739hwMofTG50QNXhIJ6ITLH5Xp1Va72oA2A7BLW4IbueYqw==","shasum":"839f8d0b6bc4d3c664cdd2a6ca3c4f5347dba5bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1967-beta.tgz","fileCount":437,"unpackedSize":5832424,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6NNRlyzqHuxz6zEKtZW3vJbFNKXscJDDSaRZ+9fxWrAiACdBWtZmHnMvqctUQeFpDttqo0FRUfD4DkAK6gge0evA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1967-beta_1520896750965_0.034487028046996215"},"_hasShrinkwrap":false},"4.6.1968-beta":{"name":"meetup-web-components","version":"4.6.1968-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fc02aa91173d4b14df96495a59744307cffdacde","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1968-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1IutWfVQ2IA4uR9UfaZRSYMHZbDRakIYJChX+K3Ja+cadnF03zCMtzZkpoXbwGKZJ7BNRJeAcPwfytKgGV6SqA==","shasum":"3219be704350d6f60a51d41163a723245b8737ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1968-beta.tgz","fileCount":416,"unpackedSize":5688189,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9avUGEuaZ7JtYjGsrcGJCHq9ZgE+dpwwixSWlfx03vAiEA3n6iM1UJx8K/IRdYUpS7tAdHqpF4bIOca4JBpQ932do="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1968-beta_1520972875655_0.7207760287968525"},"_hasShrinkwrap":false},"4.6.1969-beta":{"name":"meetup-web-components","version":"4.6.1969-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a5c0113e6b8d47768fc5b7f895e99383afac053c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1969-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LH05GC5Fw+Q8cmmQBTXBQRIoqhHzsnBI47nmdklnJcDa+ef+VZLUl4ayWFnVsi2VVNzNljD5jkKP70A+UPJ0uw==","shasum":"98194c26935967b6b4219fd7cb67f597be4acca6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1969-beta.tgz","fileCount":416,"unpackedSize":5688629,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIApsK62lxcLCEUNkNBPr6kzuHCm+wPmtr8LkFK78WgcwAiEAnzIkyhx/LXvbZh5KbyofM14ijdi66CnN3DH+J8OIMv8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1969-beta_1520973093662_0.4850526653663376"},"_hasShrinkwrap":false},"4.6.1970":{"name":"meetup-web-components","version":"4.6.1970","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4863ff847ddba7af33e87ac0c0afcd0ce58bf4fc","_id":"meetup-web-components@4.6.1970","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kyk6f5uwVsL8M/Zm4VROrDAath0+ERWmIeFHXuqi2VfUhXfbmMzP11RTPo9UCGcavtXBIFCTyuM1SzS/kzhmRA==","shasum":"5fcbda57b4194d4cf32dee32d921b253c10a59b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1970.tgz","fileCount":416,"unpackedSize":5688624,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNAaTRGqBJEZanltSXPAcdKbiU92PEsEyZwQ+ZsnWe5gIhAIu5aR4AfAN5Y4OIVRgiSBXpczgw9hTHrgyFVfFVTfj9"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1970_1520974059181_0.4220418798048462"},"_hasShrinkwrap":false},"4.6.1971":{"name":"meetup-web-components","version":"4.6.1971","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8709a1780cfa8c7e573ee43efcf8473954017e89","_id":"meetup-web-components@4.6.1971","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0cqQprA/FoQMO78F7rgGi+OQu5fL5f7hHLOdU4IpGwogLNIiKSAxS8ws2MUESBSbpG37z19jXLWs0aMdBX5sEg==","shasum":"d8d704010820d1f106b94039a5fe278776e77992","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1971.tgz","fileCount":437,"unpackedSize":5833418,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQComUvFKXgg92cQ2JXoaqU7yF7Re5mJk9xme3fy0KOCcwIhALlY/QkGepOFL2nT5ZotiMPZ+SAnkAsEzipmlZJ+s5v6"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1971_1521033824834_0.39294817049543584"},"_hasShrinkwrap":false},"4.6.1972-beta":{"name":"meetup-web-components","version":"4.6.1972-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3d0e70777b6df7e71fa73e6e1dd4f5e776b1cf84","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1972-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aSZFdljtYT6eeSo65YyJeg2f2tRURPm+6GWQetw/hhns7F1XykdSbK8A0egvrLugZFu0Etp+jnAxTD3Q4i4CdA==","shasum":"cf80d73f94ae12d3c397a12aa85c136c34d51dd1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1972-beta.tgz","fileCount":437,"unpackedSize":5833970,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB5iNM+zlyWv6LsYnQlvAtca7dZMdiTybBuocFmP8pPtAiEAiEcxqYho8yAJ33jgEr7/4FUGIfdxScrQ0NFUW7iYeYY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1972-beta_1521036710717_0.03997388916545752"},"_hasShrinkwrap":false},"4.6.1973":{"name":"meetup-web-components","version":"4.6.1973","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"beb792dd94caf6bc3e089e48c01bbd830d79e783","_id":"meetup-web-components@4.6.1973","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IW2MeGXwj8PamcDWLzlNTnaW6eAy7YmoALte90/T9zpDhj2fwWA+8R5NiyTpiG8VipkqwhzliOODY9HTFeTBOQ==","shasum":"05137f07284db67cff9c75300d847c4843f4f0df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1973.tgz","fileCount":437,"unpackedSize":5833965,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdmlJRTZVFUYg8oTdSFf3+7tJkIP3AbxpRyokQD3iMWwIgIGXIcE7bgKWJHg3rYZ6/5ZVUwxb+A8aqap0OVzTQB7A="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1973_1521038765315_0.288233126448324"},"_hasShrinkwrap":false},"4.6.1974-beta":{"name":"meetup-web-components","version":"4.6.1974-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a350b52cc3e6457c621c8b67b012257a8443f5e6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1974-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hW3STGJ8SFpiiBWj3UTaIo5HKE/FiIkaYnLcsEtZJKCPsXC6+nT+QyT2khl+4RSaeIuKKDEoU2D+Egzn3kEI0Q==","shasum":"551b23f84d75d2a2abeb77298be1f5faa8a64255","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1974-beta.tgz","fileCount":445,"unpackedSize":5857003,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEgKvJx1ZVTlUxDVDOnf4wfk8kKDiaXZyyXEA1smPQ+3AiBE6lOczWM/eqqyqeGHnYnZXJ4r6FlrJ2Dk1Ovk4VwIBg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1974-beta_1521047573571_0.8698007705520479"},"_hasShrinkwrap":false},"4.6.1975-beta":{"name":"meetup-web-components","version":"4.6.1975-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","meetup-web-components":"4.6.1874-beta","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"98252563ec6fbe4714ad5deec5076215a1a13d55","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1975-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jURh1toa0rvWkBkwHNxhJNz6KGyTFNseXXqXYoULgG+f9UuNrfi0UaAcO6VJik+t/laY/PawqePljykk5dUBdg==","shasum":"63e64336a14d8ec57416d27c0f3fe821e83c574e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1975-beta.tgz","fileCount":447,"unpackedSize":5861139,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC31ZBGe0jPIRzz+12fzaAGSg14Z1ZWS44AjvF4UlLMfAIhAL6UMF0CHVP+xQqmTSTIOylOGmOh4+lQVMx2WFfaj1a5"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1975-beta_1521051297829_0.07696697923972184"},"_hasShrinkwrap":false},"4.6.1978":{"name":"meetup-web-components","version":"4.6.1978","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6afa252fa08393e25d4072fb23a475dc4f544af2","_id":"meetup-web-components@4.6.1978","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5qk6ZMtRJyu0Q5ChQ7scFOEB0s5ONsElHnVYXei0gdhNPvmjjzUmDsp/KLoitvawsev2ECJzsv0Lh2AxffMhqw==","shasum":"970c465a391bb1bdf6c1f62116709377a6825168","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1978.tgz","fileCount":437,"unpackedSize":5833274,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqRAmxN2OvLl8+BTYDRI9pXbUYMxQiOJigCn/Zla1raQIgf1RGwc2ZLNm6/qkowIYsl4TxW2/dTNPC/72r6USoqOo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1978_1521052724724_0.5328455599518105"},"_hasShrinkwrap":false},"4.6.1979-beta":{"name":"meetup-web-components","version":"4.6.1979-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ecad403820190a5bca7ba1c62c66961efe6dc076","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1979-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-092DqRBpqhB4KDIgEMAG6scAqP2LP/C6HWYn6NWsExLg3Y4mzyfCyqATYeS0KcV9dRdvJ8c6BcnBZulewIoiBQ==","shasum":"cc88d909902f10a473515626ca7e1e3dcbaaf865","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1979-beta.tgz","fileCount":447,"unpackedSize":5860450,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBIqUlPgvEh8rePsiVpPGcIXbqkQRurnXx33q5fHtZGuAiA/CwV1sMHeivztlctSddLLhClnW1WFtGpj6r/owhStwg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1979-beta_1521053774384_0.5189386237802616"},"_hasShrinkwrap":false},"4.6.1980-beta":{"name":"meetup-web-components","version":"4.6.1980-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"837efc64f99319c418123cc9853d4815a1a8d2a9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1980-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-F81acSHYaqVJoRpoLwmMS/iE9AS2zP3YPIvwmgFIDogNqQOvOnKrKOeopW1ji8jQ6GlSwUZeBvm1IJz0xkjXZA==","shasum":"b5987b3b44bf40c914993039955bcf6fa738c351","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1980-beta.tgz","fileCount":446,"unpackedSize":5867390,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEyjtsIjaoaT9STUGBzAeHniM62YdSlPvDDvmBiZ6HxfAiBiJX+vfaHRnsGXGWBT4u5BKmL1UQeQFYZXnjR28IRStw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1980-beta_1521063765006_0.9201624143581923"},"_hasShrinkwrap":false},"4.6.1981-beta":{"name":"meetup-web-components","version":"4.6.1981-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"dd184da4a585dc1bef47d99d5fb3aa97de78351f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1981-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aeYEGrLaj/sMon1pkpc1TpuadDvbKlnTdEzowtcxdQSYDJ5UWqu8Rbb+cLtFxzSDDj7F3xIOhY7b3ycCtRTygA==","shasum":"fe630d11c8c748c661908b944f11f4540072e77a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1981-beta.tgz","fileCount":437,"unpackedSize":5833336,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtOfmexvDzF2WK8aNeoHJb9OSbSxOkzPQC3REGt5+umgIhAPbPJxx5vP5W33LUodZJCquCEfI1VslkW+CST9zJr1yA"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1981-beta_1521065313356_0.4505085582305193"},"_hasShrinkwrap":false},"4.6.1982":{"name":"meetup-web-components","version":"4.6.1982","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"62bc17a204d3ec0b44dfbeb751fed87b4e7f9345","_id":"meetup-web-components@4.6.1982","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AMZRPj/u2h1fzlt1CEAx4icYV9+xvySTShm0CQwIorLBUuluh7h8LlFPTXHd9ZqdIIXkI51sINA/EA73ldYSQQ==","shasum":"6b4d2b21b23f1d111584e17c0fa4bade9c008138","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1982.tgz","fileCount":437,"unpackedSize":5833331,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICMGXU3sUFEip0dn05Hg3aevQmBP/5RertBPj8oDgL04AiEAzblWYafL81FJIXG+mOSspTgPJs35FczHPzF0MiTLiCA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1982_1521066830624_0.9034787277870047"},"_hasShrinkwrap":false},"4.6.1983-beta":{"name":"meetup-web-components","version":"4.6.1983-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a7a11ecd251ac97024919f1c7e0e1e7c6f4f4552","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1983-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-I7rsfVJllV+PBmkDe3hwEx65qGxfAcGBYcq6/9RrV5iZ/FenuIN1BipxytYf9oE/IMnSz4QPf7PmUvTQn+CHAw==","shasum":"c37373e909cb663c716149341fd9294ad0280566","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1983-beta.tgz","fileCount":446,"unpackedSize":5867416,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdDsFanNwZChqgUplMsyxtlxx40ggv8CIb4VaDd10fcAIgBKofecIhI8PD7ue5toUvmEVE7gOt2gJcZ5zKmZc+Wjc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1983-beta_1521067352232_0.3277180714699215"},"_hasShrinkwrap":false},"4.6.1985-beta":{"name":"meetup-web-components","version":"4.6.1985-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9a95e110f3d45aa0f106fae2c278acc1e7333690","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1985-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fnt32wQ8IA6GG7xRmo5KjOJSiQLaZjXEh4lrLHV6kbPQ5ngk8CtXdY4SRo8erneUPQtKBTcsl7PW5C6yQ8bN8g==","shasum":"8420795e4eeefcc81dcf4149d93bc08a79308f96","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1985-beta.tgz","fileCount":437,"unpackedSize":5833507,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCugOmTGgaE4lEUnmV9eQmR+NS51m5jSXT7risdP/Z5QIgSuTWA2fXdGktg3EmeIc/Nb/OJg74kYsQmDcgyiR71VA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1985-beta_1521069094387_0.56741395832359"},"_hasShrinkwrap":false},"4.6.1986":{"name":"meetup-web-components","version":"4.6.1986","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"51c410d93a47e5fe93fa51042fc8bf989a073372","_id":"meetup-web-components@4.6.1986","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fsju46b4aReTX9wadlcXegyv5RSxpJYtqXzYl5siSDH6xcIBBAcAEJDTuwZDBTD7xsZkO9T1FGteCi7VMMPXrA==","shasum":"40ff6c1c5e20324639bcb75a32d503a3626dc716","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1986.tgz","fileCount":437,"unpackedSize":5833502,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe3xpxM4BTHUg7bV8XhCzFUf8mo15b7dj49lJK6ArMcQIhAKYhK0lFXIXrtehjhq83wEuBLBi0g+OaqOB+9Tm9wLSV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1986_1521069314673_0.8572718080989683"},"_hasShrinkwrap":false},"4.6.1987-beta":{"name":"meetup-web-components","version":"4.6.1987-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f71af9d58ad06bbe7b376c14c6ee6531cf8f1fd1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1987-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ckuZOv4QmQY8w30qVSAl45rpjC9p8YofyRq/ot75NSmZ4N/WXu4Q5cCMzUmxAAiD2xODJgZp/tGvc42I1HYnlg==","shasum":"fdb88cbd8bb4356f5e6b06d38381f3b69af3ff03","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1987-beta.tgz","fileCount":446,"unpackedSize":5868354,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHh3khq6AiiUwVlbYBWQsUpg1A9D+gARpDXrSnD7WCQCAiBPhPyaJZxXM3ybRp5wG2h3Fup3eA/L6/xZhACvKOS2LQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1987-beta_1521069853606_0.9810296049390443"},"_hasShrinkwrap":false},"4.6.1988-beta":{"name":"meetup-web-components","version":"4.6.1988-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"db73924125e3b742153bbde4d9a5e6596edf023e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1988-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1PExIoTfXE59QpBVcu1V3N+5+LB7ZbUKOXhbydhareVavN4g3HUPBoVwmmHaNLEBSRqETwmzB/QrCumqFBIltA==","shasum":"1469cfd28a9925377e3565ce8baa9ab63b97a531","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1988-beta.tgz","fileCount":446,"unpackedSize":5868369,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHhUHSLsUAtvocVQqwmApULAnBZrMK/eDq4rR/w4ZwSSAiAb7sv3P3c90DmDOGXxTahcTrbcm48G6xK6HyQGotuPMg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1988-beta_1521070378042_0.6496355470759163"},"_hasShrinkwrap":false},"4.6.1989":{"name":"meetup-web-components","version":"4.6.1989","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a025da57659858b2b6ca50941cbc86466d14a186","_id":"meetup-web-components@4.6.1989","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IbdYFy0cWhVIMqkFW1rHmcPPLH0QEUIFnaaIKOT7umzCHhnsOmMEEPgp4xf3IF+BBRifGfxOrVuwvJPJN6wiMA==","shasum":"2b6faaea17b74f055cc1aadea7b64c244722dcff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1989.tgz","fileCount":447,"unpackedSize":5860673,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFJuV/7lgESlgNs3LBTH9u12iEtB96WFhPs/9G4R1ulwIgJI5k36riq5usd1q9IbVQ7yIE292EJqhUOWNKELgBUZE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1989_1521125373955_0.3133579782673588"},"_hasShrinkwrap":false},"4.6.1990":{"name":"meetup-web-components","version":"4.6.1990","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"998b3e5f9f09c792bbde9568ac69c28a05e129dc","_id":"meetup-web-components@4.6.1990","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Ojv0wKBT6OHR/ayQLMCgPFuFN3dYoFM70bkToQYt/B7+2vr0FLhsAyB/IpMDnD1KKeF4FSdWXbsaZ0DksXWtCQ==","shasum":"2f1efb7080a92b9b877323873d56e3ab205da90e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1990.tgz","fileCount":447,"unpackedSize":5861101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCH+vxlZ6UAnhG5tBAb+o/1sFckHx85Z6XxgNLI65x4FgIgDrvVIEio/azjqN/E/ejWfzAfSSVwjj+b0JOV4K/maXE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1990_1521128618355_0.38437098786786805"},"_hasShrinkwrap":false},"4.6.1991-beta":{"name":"meetup-web-components","version":"4.6.1991-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4281ae957a4a9c4868c62d358e18446379dc8c2b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1991-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-m0ps2fEsNdw2jbPSjwFLLnhvO0opJV76mOxpFYQcFPS6PVENIpBM+GdvkWpLK5eNCdVfdSvKXJoQuZN3LVKSCw==","shasum":"bbdb18020b37b4a4c617baaa9594d9b48422daec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1991-beta.tgz","fileCount":456,"unpackedSize":5895973,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGQD3Qc3qAtmLpRQTGCKIFWGwG/LNMYow8ZHpeETpiCOAiEAxH6RxtChWH3B5YHWCcGntERL97YM2elaZX5J/D8t9fs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1991-beta_1521135989801_0.22805348706706852"},"_hasShrinkwrap":false},"4.6.1993-beta":{"name":"meetup-web-components","version":"4.6.1993-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4f1e1ed86022ffa2150d4b4f306c5e4be28bd9c8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1993-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6GVQY7PUyKp1WX81laD12LWZXGgYmlALL3OiDrq2dmOcbUO6zlcgzaOv8lMA8feyPxYxuLRle0fwuVovxu4xwQ==","shasum":"804274423e9364e8ec980da45cd6ff663b80a57a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1993-beta.tgz","fileCount":447,"unpackedSize":5864737,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEFfIOYrWTX0SXh2GypITjgwt0dZvjDOjQmLwfS+sliWAiEA7FZGmcJ/+Ks92s3OLcSDmoP0mNmHq/U1RAGbeum+TAY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1993-beta_1521213509780_0.3228942747546417"},"_hasShrinkwrap":false},"4.6.1994-beta":{"name":"meetup-web-components","version":"4.6.1994-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"960b8162e2d691a4d58b995bafc82ac5624c2cfb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1994-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kPC5noAY4iEC10dpXOH3zxcNT6GjTccBxaNM4ELdNcc2cgpO+NCTAVSBoJD6kljynyj6TmMBHIgp1d1rNSDeuQ==","shasum":"eb2f124098f7193b37fd6e1854f6dd08659d7b10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1994-beta.tgz","fileCount":447,"unpackedSize":5865088,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7HOHf/oJairqCXXdLP+tzhdrIIYizlx3nr+BQbvgWTAIgYD4u+1g20fAQYZZWY6q0G2TvvkqV1/+yTV7T4x6gqaA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1994-beta_1521226241159_0.7262561423918485"},"_hasShrinkwrap":false},"4.6.1995-beta":{"name":"meetup-web-components","version":"4.6.1995-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e7b9de29538325407ea8cb54c7d3d178fe069848","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1995-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UC38Q6CzVKFHbc4kVIb3q343ahugKmFOulpEy6VCUzVjaSRRXsNYj7+ZzZDKcsdw6ZE31LrCJPJ3GqQ+AmSi6A==","shasum":"0fba93912d59cc3dde9fa64adf27c05ae89e42ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1995-beta.tgz","fileCount":447,"unpackedSize":5864231,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMRlGAkgjWe62YXEoUfYXBRTLT39qtfQN661rhFT8AhAIhANRgwb9yBuWNJKVeY0lJYIqI8DigkpSAzQQBY8NszAJN"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1995-beta_1521228108332_0.8313910600158536"},"_hasShrinkwrap":false},"4.6.1996":{"name":"meetup-web-components","version":"4.6.1996","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7a23b8970f1351bf18dcbfddb2c6488ad6e262c3","_id":"meetup-web-components@4.6.1996","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RDciMZxyLtRU1XIR+nn+DtOnrvldaxQT488I8DetLvnj/wqanrdXzN4Rtydu/uWdQgh3WAdhvSyiN+SR98f6ng==","shasum":"42d9994afa52ff320a0a20b5d9aadcd94e091e89","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1996.tgz","fileCount":447,"unpackedSize":5864226,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXXiYKF5gGXTwdb1qCLPW/il2xlT1hCpTAw5RGWZlrIAIgWq02r7vZT8fSS9deB6l4R1bdYFl6lwt3SMcSNGkddeY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1996_1521229115008_0.06834535579940404"},"_hasShrinkwrap":false},"4.6.1997-beta":{"name":"meetup-web-components","version":"4.6.1997-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b734bd48a4782d390225ced119f44188d063ab2d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1997-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-s75QVrQUAaMvTzbOgG+VJ7h5S2lS5ziKoc3bJ2q2e6R+0v6bPb4qwdx3CaDcVCRD8rNTF7bKwbeMyEHnDwqEww==","shasum":"8f719a49b5bc7da4c17be2eb5607d7aa1ef6469b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1997-beta.tgz","fileCount":447,"unpackedSize":5864834,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCywVEoVF4cNt9gna+8sVVGLuGxBEhOGjutTNd+W1qadwIhAM3AZZQQy6Xno8fhIQ3tm3O7F7aEd9Np9im+lXr0lDZU"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1997-beta_1521232671339_0.36676725267120647"},"_hasShrinkwrap":false},"4.6.1998-beta":{"name":"meetup-web-components","version":"4.6.1998-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3c6fef6bb74b1a19919f559116c05449ee6772a3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.6.1998-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XSUIyrGKa1jEOVZPtlIO+s+0C1Nu+32oABIfj4zLKLBESx2/TdLA39tQJ7LLOOZW5MWL9I4MvqPoYMPR0Um1Og==","shasum":"fb1386d0b332d48ebcd5ac11e3b9f64a8a0cbdb7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.1998-beta.tgz","fileCount":447,"unpackedSize":5865939,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKUCPjoeF1qttmG0qMuMM2M8vX2RYxMAv2drL+yakW0wIhAI5AB1c0YGQBpITCkcsmW86HUpo7GBSH37XJP7vi3ZrL"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.1998-beta_1521238797956_0.7582425175491856"},"_hasShrinkwrap":false},"4.6.2001":{"name":"meetup-web-components","version":"4.6.2001","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2075e840f28d803b333be9747cf9e2b85488cb0c","_id":"meetup-web-components@4.6.2001","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iSOQ0Co1dVEA/zA9MLlQ/uwZZq6lvZ0eJ0zOJAEyoqsMUPBFo/gcyhSz/NzqkglhyGOJCV+Hs/dx4+iMXmRWyQ==","shasum":"f83ece7e31562b21220fe778cc5fbccfe7b1d702","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.6.2001.tgz","fileCount":456,"unpackedSize":5899093,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAE0OCygHTooG1DKCy9XOzf21OZOK+HyYZeoHzqN5YbWAiEA6LnpIRyGyRusPghq/n1hzvsFbt00FvEi8hbMlYjIJW0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.6.2001_1521477593914_0.9635662377329102"},"_hasShrinkwrap":false},"4.7.2002-beta":{"name":"meetup-web-components","version":"4.7.2002-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7b127d9f35d08abe7b10a58481fac922c615a970","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2002-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xl23SXNeOWrRIRa0WLYzbiOfT6RakGFENtkXHzt2Xd/XJl0Czgp0NrgbyV4GiDxNVosaiSE6S731anqJlaMccA==","shasum":"1513f5c6684d871404e28c13449fad8e6cfc5504","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2002-beta.tgz","fileCount":456,"unpackedSize":5899701,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSxvlwFfAhbpNOZiCHmx4iSFRHBafHbllDTDRv5eHKzAiEAsnXfmTn+yf+FPRe4PDFIOpvqpaKrjqzPNuEZu2GA/DY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2002-beta_1521480555752_0.12650678259424208"},"_hasShrinkwrap":false},"4.7.2003-beta":{"name":"meetup-web-components","version":"4.7.2003-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7fe02178f9d8a83a9ad284d182f65f05c4e36dab","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.6.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2003-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ORUZ+pEzX7xcWW5kjWou5vA1cotV6jTeCfcBV3k2wWd43z55dsiXu9LBdS/N/I7zpcbh3D4Eu2eNwnvRbrotTg==","shasum":"b19cfe4245c16f42b0405bc883b1f7853531e7c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2003-beta.tgz","fileCount":456,"unpackedSize":5899879,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEflUWpbyGPraDEih3eYr+BDfLwjWJPUdYqPHmwp2SKQAiA/5MPWvagVk7p/xN2RS9jDA32qKhTpBDcStaaFtPEMyQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2003-beta_1521486693813_0.6883414281387648"},"_hasShrinkwrap":false},"4.7.2004":{"name":"meetup-web-components","version":"4.7.2004","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f2a0e70522d314ae5a640cad7b5d504d1ff9c6d4","_id":"meetup-web-components@4.7.2004","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bNHWpv7vzJnLOvKV/C16APHl2gW0Yc11WXPJpDLIucBtJeT9It4GgxSVlEdwLyg+t5PmZkcbMM4pzq/z5xiZgw==","shasum":"860125ebf26fb9a374b7292883b24d47479663df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2004.tgz","fileCount":456,"unpackedSize":5899874,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeCDlM+US/ohQ+taSqAzbYUqnCrFDxWbSkHFY5rwOhWgIhAMIc05KFk2kSys2hjeg/4Y11BDW79EtYPGRsEtl15rHY"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2004_1521487212024_0.4958587344734735"},"_hasShrinkwrap":false},"4.7.2005":{"name":"meetup-web-components","version":"4.7.2005","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9576c8e55c617e579de821f61fc485fb1b68cb65","_id":"meetup-web-components@4.7.2005","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-R2bPv+GwBOSwCSsPWnngcVF6PG8NOFMlhX3Ti3BJJi4+tGKpJNAvict0i7lBeDZD/STWTfl4FLAaS4FGmgCFaw==","shasum":"97c752dba195ed432ab76faf3d371c87365f9eed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2005.tgz","fileCount":456,"unpackedSize":5899874,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAZYKJqO47/HapSHaKiLM35c++QcqHZe6VcVgwwbPuKQIgCPiabP/GesxqSLRAtuN6J/ZV4cKUdLEapqqfolve4iA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2005_1521490489044_0.8490351500828943"},"_hasShrinkwrap":false},"4.7.2006-beta":{"name":"meetup-web-components","version":"4.7.2006-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"aa8c255d94a7fbe5e98ace2e13a59d1a3a29808f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2006-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XXNg275KUTKPymiQtz9ZEixZ6DjQRxHitcE5uJvYu72odytSgq4Q+Je8Uo2MVF1OFUpMoUp+Qir7R/HU6HG2Kg==","shasum":"401d87298d10728f79f54cfa1fd7d1c918a684d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2006-beta.tgz","fileCount":456,"unpackedSize":5899816,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDYiWnVeTR0ThwwIwWCXVtz990/YaCdnEz5+wmPmBKWvAiB8rbAxCBFXpuN28M+CTzOwZRNQ7APPle4+gJX72xWWCQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2006-beta_1521578972240_0.6723027615032517"},"_hasShrinkwrap":false},"4.7.2007":{"name":"meetup-web-components","version":"4.7.2007","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"815245d2a5e7c4db41d625e841807dd0c2e4eb82","_id":"meetup-web-components@4.7.2007","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4qUvSuTI1oHOffVQ5ZrYJ/47tC5yNXhENIQ+vrLrffU9CvQL72LHbNysViQiz0QsCPFov9eVF7vNRkNB0+XvYA==","shasum":"32302ad0e9c28a9766ed1f1363d6c3fd3b91e848","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2007.tgz","fileCount":456,"unpackedSize":5899811,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+GX4oxMMu+zEiSTrH+8qT9s+R9uYp5aVK8IVCxUZwTwIgfWDHR3s1XxJItAcV7b7C3Bozw6xqvh3A8P5WHh1zNr8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2007_1521579149023_0.0833532241310384"},"_hasShrinkwrap":false},"4.7.2009-beta":{"name":"meetup-web-components","version":"4.7.2009-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-icons":"^1.3","swarm-sasstools":"3.0.312","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ab16882f2d98b71c3b7b844a7df0c8e2fb77a076","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2009-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kq8pWYF3FfvVq+w0RneLYcVD27ItUgoC8wfh1zWh5qpKX+3oKcOaW01m1PlQOt1R4yAFm4h+NF587KiGcaKYig==","shasum":"ca2955361128e6343e33b247471c90c52239846e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2009-beta.tgz","fileCount":458,"unpackedSize":5899678,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKhiVz8DFtVDteF0AJ6STWQw6Ku+s8+CwdkCvYEwlIJwIhALOM5jP0HIsH/8ElmBTyGXEXKdGAZUP7vzsADgSfAbDh"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2009-beta_1521656970724_0.4745426679797855"},"_hasShrinkwrap":false},"4.7.2013-beta":{"name":"meetup-web-components","version":"4.7.2013-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"be6b37cc77a962a6323f299b959788242cb9cafe","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2013-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-apfV6lvzH00ss2SYWW0rcUJoMZeHyyBXk5D3CP0etOEswL9GyH9Iz2q+/E8e5MZ3f0r6kObEFt7rGVUXJhTVGA==","shasum":"19c1dab10700bb67dbd9c0aa4b938d790454a84b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2013-beta.tgz","fileCount":456,"unpackedSize":5906462,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaGICRSrh8bUwIojxPA4lxKvZAkH/yiFnizBbEbPgPRAiEAhi4tEDbmvGmkSmc9z6VxawmUEHuietdaWaOZxfAc8DQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2013-beta_1521660590737_0.20877359906725368"},"_hasShrinkwrap":false},"4.7.2014":{"name":"meetup-web-components","version":"4.7.2014","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"89723e5bb900a9f1850a6f69b964da40a0e60096","_id":"meetup-web-components@4.7.2014","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-e9NwAPJoHc7PoTMChBzlgBp5rW/l+1PK+UIUkJ6tkDkkjs+f5LVb8uROyX1/hffsSVsVdDRUGaKn4TtRFE9Hiw==","shasum":"0ea3e684223d0997b1e5e632d9c21d90220dc131","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2014.tgz","fileCount":456,"unpackedSize":5906457,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE9DRWf5xm+UYX+mPeVJx/WsR3ImWq8M8vL9k1Q/1Hv+AiBjEQpPDoGtx507oKx6FilB14oPc8Q2kqjuf11YsPPDog=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2014_1521660915088_0.2833827221918277"},"_hasShrinkwrap":false},"4.7.2015-beta":{"name":"meetup-web-components","version":"4.7.2015-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1a135da9787f05e6f1fb47786e03292f689fce3f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2015-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fPXwyVFXzNqJFFS/5L/YXUA6LOBMGkn7/YPHF1gvEKuZfYgiOpsbIrLevExRVYq3Yaaj3yF6YrJYOeScjruEdw==","shasum":"e54b170e0286baf575bfc964b8ca6cd05a56b44b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2015-beta.tgz","fileCount":456,"unpackedSize":5910569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCALsBp01bn23WiKDZ2s5dTP1fzVmTQR2GzzZzRymA1SwIgb0FbupRIvGGVKUUt8G9AulEWESmQnirvIW0Oqv/gKxw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2015-beta_1521664107052_0.33444473002084685"},"_hasShrinkwrap":false},"4.7.2016-beta":{"name":"meetup-web-components","version":"4.7.2016-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4ebae796829acc150c9e95d221feea851f883d7f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2016-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+vI3vGj9MTvXYH/h0XuLeyP6wuceP7FxVhjsJDaCJPrzsK/gDXXDBvDCCd7ors/ueGKy9Oo3emAmOxbEYH1O/w==","shasum":"7fbd15258cd72837f515a770a628148f778fa2d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2016-beta.tgz","fileCount":456,"unpackedSize":5913811,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfppz1EEwvCfs9kYCGa903odk9UTmQ072/FLTp7RwyeQIhANhcsNSQZD7k4LpApZ8AmzbgFjCdG/VErtnXIViSvS2D"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2016-beta_1521664445187_0.024112458756540445"},"_hasShrinkwrap":false},"4.7.2017-beta":{"name":"meetup-web-components","version":"4.7.2017-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"22f9a4de6d30a49409917e0a8018fb4464c05a2e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2017-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hm6ZTdxK0rxiBSi105YXaEjw7RmBpUwtxwFQDK3MrtCBhGprf6AiC7DbXjg5CyaI5SbRfZXk9eNffxdEeFZa2w==","shasum":"8b02bb16427db7350b1c9a7bc680028aa2eefa06","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2017-beta.tgz","fileCount":456,"unpackedSize":5910616,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE4R3o58FONf7EMiDDhIdVktbolVj7VB2mUAsbE7VrlMAiB7Om9JA7l93zkpRzY8BG4DqPbO3GXwiQlsAz8MEgjA8A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2017-beta_1521665153455_0.33948729356802443"},"_hasShrinkwrap":false},"4.7.2018-beta":{"name":"meetup-web-components","version":"4.7.2018-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b3db9e8e60ff2744dbb9606a809e981ffff4a252","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2018-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-q8ieBYStYFWEMeL5GJ9wu8pj7+C+7wEf/Rsj7lXeTDBbjP3vbCX/NHbk4thbowLOhfmh2xIFMzHhZ5AxOMGhgg==","shasum":"7b984951d28573cad1cf6156f23a221f3cf56e5c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2018-beta.tgz","fileCount":456,"unpackedSize":5909882,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqwZDv/pbBCOsgI+7T1QERVtXYYHnQQMkbSiuoH1GDhAiEAyMIPIAtUhw/VHymLx3M44LxHZjcJbqTYy8XoJkzPaiM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2018-beta_1521665388862_0.11631796286134577"},"_hasShrinkwrap":false},"4.7.2019":{"name":"meetup-web-components","version":"4.7.2019","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"06f02705160d2ca4e6ebb23c4b19afa39c7d2352","_id":"meetup-web-components@4.7.2019","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-82Vg4JuNYDBkwDy50fV8Fp7DS5lvDmOFQ5+E4A7rZcPjG6HUuzZ1WehIzCGQOsZNpqwpqgFmYLGpHSl+KyV1ag==","shasum":"82cda9ec96615ebed1d6a4145a4b3805d3125897","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2019.tgz","fileCount":458,"unpackedSize":5906319,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd0AYa4SAiIJnzLwqm+gnuSFsyvQdVOQybJUYx04vxTgIgUz69g81gAAu+/mx6YgLJuspbxM7ilUuZr9/Sjk+Mb3k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2019_1521665962843_0.881067598956331"},"_hasShrinkwrap":false},"4.7.2020-beta":{"name":"meetup-web-components","version":"4.7.2020-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b9cf0f51b5bb7048eeeec56cdfb055565a0534bb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2020-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UmUi+Lpv7ScS6gTjH6Qu3USzfLSj1FTzhc5gC7eZJY/FUrKeE8qXIlAzb8qG5rZOX+b/3XIKpj0g1qOQJsrq8A==","shasum":"8296f4f25354011a94344d77dc2c5732901e5e86","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2020-beta.tgz","fileCount":458,"unpackedSize":5910571,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwNdj63Q1gzbNYEw/KDQviDwJV2cy7hOqIHjHydtOGCAIhAKRnNZQ8ayCPP7EL7yA80x8jXvmAGcUqvHYtvR5af4wV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2020-beta_1521666906946_0.5911584709353546"},"_hasShrinkwrap":false},"4.7.2021-beta":{"name":"meetup-web-components","version":"4.7.2021-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3b9a87fba5a195cc5f53b95b71d818a98355aa0c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2021-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+cZB92EdnJuXPLvWd4nkTYVsa7gzR8mcg+4b49TyklLdEXQfEkeZsjvZuF/csdhfsrVFM72Np8RilUdzI5IPRQ==","shasum":"a5708e643daede813e82056eaa2cd39269f9baa8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2021-beta.tgz","fileCount":458,"unpackedSize":5910663,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFMi2QFSW2xXeHlfhYPAZOBg5qKunWbqBaJxvzbF6NBUAiEAjcJI7VTLQ++OESvGXBLjHtTRfXcoqyXx11f+N8GjxLk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2021-beta_1521667392659_0.48892465767121807"},"_hasShrinkwrap":false},"4.7.2022-beta":{"name":"meetup-web-components","version":"4.7.2022-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2f635d5d876811c7be21ce9edef519d69ed54917","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2022-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Z9879NT2acALT3UoxBa9klBBIK9yjdL7MohjKF1dD4Lu2EtZzQZ50BB/+pfBKaIb9gVVHJLsK52HyoU6+wOcAQ==","shasum":"eaf84abe892981c17ab6fb496bf065cc8ac2cc9f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2022-beta.tgz","fileCount":458,"unpackedSize":5910663,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHL1gHH40slER7yDe7pVr5C2WXReZW2ECcBJp3+hx7EdAiAj77iPi+faXq18oLi7G2qorRSDe1D0jwTGHr0Pvajeug=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2022-beta_1521667597458_0.7491054880871952"},"_hasShrinkwrap":false},"4.7.2023-beta":{"name":"meetup-web-components","version":"4.7.2023-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3c4826ad02bada64b9b832b6f1971f8a9993be0f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2023-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-QeW0uoNuFjKM63uo3BOh+lPWQ7oo3MWI7zpi9eXWlmX7WoE0Dih9jS13voCwj9jfWDtkCIXqGmWLJMB1o9kycA==","shasum":"b1f89cca920952cfdcb295ee0ac79b9dffc8afd2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2023-beta.tgz","fileCount":458,"unpackedSize":5906944,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFL0OgrCuwqBo+PyL2q1OK+UXoQmxOhbcoaSSxFNgSLBAiEAvyX244fhQwRCFDyAnVtfS8Y1JZgrqpzjDy7LfpucbYI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2023-beta_1521669173332_0.0965356625191609"},"_hasShrinkwrap":false},"4.7.2024-beta":{"name":"meetup-web-components","version":"4.7.2024-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e7d8282288f7a8c54e574e29b83f90d4ba10ee66","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2024-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Dvosug9ok7A0N5r1tA2xjEFfwiHel45uED6Kv8ZW6G9u6Ws8RAvddv2kCuR0dHh/6p3Q+MMNBxO4uVtSnVvqJw==","shasum":"b25f5b5c9440d859aa9e67d927856390eae8ee07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2024-beta.tgz","fileCount":458,"unpackedSize":5906944,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBqPR5UVzF0SODGu3CAJyFagUJMQRx6wWQ8Mv9aztWBAIhAJdaMxn0nOvxLTWC8UUSjSKhiMNJY6BmVb5kWfVQ/AVV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2024-beta_1521669228009_0.3478643220215911"},"_hasShrinkwrap":false},"4.7.2025-beta":{"name":"meetup-web-components","version":"4.7.2025-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"88d4202f5d86d9ba884cb5688ce081a8e07ab095","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2025-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IX2kP3GtLgxNebsUUVnAnj3b1BDnp4Bd+OPvMdOWUYz1385h5W6518SA37zM/SJsbgc9/00zbNmEwbW0282RNA==","shasum":"6b17b3eace1e3501820a7d53ccf0b4f398e07a2c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2025-beta.tgz","fileCount":458,"unpackedSize":5906836,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEGiECF2hx7BRtXtPli/VByz6kc1NbB+rYOxpfi+zpmmAiAaLDDmpXClPso/0XXdh0+9Ct4Xjty3yl8dD7ngmC4d7A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2025-beta_1521671595004_0.9221883516216764"},"_hasShrinkwrap":false},"4.7.2026":{"name":"meetup-web-components","version":"4.7.2026","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"741e238f110b751cdf1bdcb20de7ac3da8268ee9","_id":"meetup-web-components@4.7.2026","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cxCdiMTRiKDNxFPbEXTwrX24pzTnM88i6cNdos9HrKi+RDD1xXuZJevzk0+ULYS8WtgRJQwGxSylDagSWb0aVg==","shasum":"f477c9c572b0304348258635dae05633b64241dc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2026.tgz","fileCount":458,"unpackedSize":5906831,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSC2PEeQNlc16rAutb2aqAbLa5pqMtuAUPzN2vasaAbAIhAK4vHbqL42nQN3t9bLJ6/Andmzqg42ZsOaf1yyiKgI1P"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2026_1521676761377_0.8242810301241541"},"_hasShrinkwrap":false},"4.7.2027-beta":{"name":"meetup-web-components","version":"4.7.2027-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"89d6b0a4960f2300f537d3f3d96e70399c9cbd48","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2027-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rL1k7NPK3lLAzlsxUjnZfrVcVkmCSUprrShgwervy/7dF3KZJvOfK9PQTpuvHBgS3fmldB7fMHArx7VXwawIHA==","shasum":"fde3458d92f49ab376f12b1fe9c3e8c6673cb446","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2027-beta.tgz","fileCount":458,"unpackedSize":5907375,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsN36H1wqR5zjD66uGOF4BH3r4Jb+R3LfOnB/UaACQRQIhANRRYdmCigrIAxuC2SR7dqVE9pTbF/Fc1g0uFPZbL9Qz"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2027-beta_1521678585723_0.12471351057061453"},"_hasShrinkwrap":false},"4.7.2028-beta":{"name":"meetup-web-components","version":"4.7.2028-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ccf9035a328a36cd6133988d0b38ea644d9f32b5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2028-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-T1BRzTwsRGlNS3RdMT7wzjceoFGLiI9SCPORQpXTREv8vNsCblHFcW+iF5IzU2HJvR6kJy2fi7YxoMUurFWgLw==","shasum":"cbf8b0df12c7d2f1dd06ce20b4ad0fd964f6df00","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2028-beta.tgz","fileCount":458,"unpackedSize":5909455,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHivjWoxUhzY0oDpFx302pamwE14Xn1jB6Y5WLO+6QqjAiEAl4EECS4YmQ/lgeQjft/0RSMnk1hG3tZwgZ70nMb9eJY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2028-beta_1521727844480_0.7719725906424655"},"_hasShrinkwrap":false},"4.7.2029":{"name":"meetup-web-components","version":"4.7.2029","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e025447fc229af423d52169ec0e6263f46be1305","_id":"meetup-web-components@4.7.2029","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-utmdy9dessLtIL1rVAfdZjLl4JSQ0uu0P6ShQm8+FhbgqNSOjpB20Meq8lkp9TzK3BX+V91WTHydLJo4kvrTgg==","shasum":"ee5d3df40fa1c11b97198622935be00a6bf3e3ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2029.tgz","fileCount":458,"unpackedSize":5907370,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw3kWAS93pvKRbPA6ZQeLAPFd+RA+F6h+0/+VMzPsaqwIhAOhq7t3avmNS5sjFH21o5YNTj+MUxr1igaR4tsTvJlbN"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2029_1521731366604_0.42698157090189315"},"_hasShrinkwrap":false},"4.7.2030":{"name":"meetup-web-components","version":"4.7.2030","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"631de88c6e7a3979abbb0a3555afabdc066b0e6a","_id":"meetup-web-components@4.7.2030","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-HPLSZtzhzdCnMrOFXG7WTGWB4qF8WEDhOf71LWJZqUT6A0RPv/8GOeVfLxcNjtKpVVNB/0JutlD1wUlOx8VcSg==","shasum":"db99d42df257f53a7b6b963e1c0641798e5e34e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2030.tgz","fileCount":458,"unpackedSize":5907990,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMCxkvrv8DKZU2U4RyXLoFBlCjc8cJm2CqXjh1OW6c0AIgYwlQnp/eQhbJNWQUXyUxekpF3x7g0Vox6kkKW0kxo4c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2030_1521748006917_0.8325296753886855"},"_hasShrinkwrap":false},"4.7.2031-beta":{"name":"meetup-web-components","version":"4.7.2031-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"cd3223eecf8247a8a310b263126857d67eaa107e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2031-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1sEei2FTf74rKZT5EgAIu2bfxn1hbEC7eY4GllxeTfc6Hg+xAm+un3qT3fz9KON7+K2d0pU+3F4KHQGCOJJOmw==","shasum":"6e5ced16eae54737ebc2e89801da54b2581451c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2031-beta.tgz","fileCount":458,"unpackedSize":5908185,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoFMAp2+dyWytGW92JDo6mnEqypOMLB3jmjAtVhMOw3gIhALpxUyGza/L6724+nt9S+bq50Onb7X9zI25+YjNjtL9l"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2031-beta_1521838419903_0.4454367426215189"},"_hasShrinkwrap":false},"4.7.2032":{"name":"meetup-web-components","version":"4.7.2032","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"d7eb89b70d33f6b02008b9bca264ab64deb9e534","_id":"meetup-web-components@4.7.2032","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-38wSVnZLPW24hlszsEAo09HwmtBxHIzMJTq+cpBXP/TvrRaWsZznREjCSlSD6Nl78c5ePGG59XKBhu5exk1VRA==","shasum":"76790cf9e7b9eee95659505e015e46f5341db3ed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2032.tgz","fileCount":458,"unpackedSize":5908180,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPZnlDfOgA/N8Xf0vXep2Fcm9iS6ubiizES0PbGllq3gIhAJl6h0gZGQBwivXz1uOtILHskRj9RoK+lokj7ot8itSY"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2032_1521839656836_0.9563258007099462"},"_hasShrinkwrap":false},"4.7.2033-beta":{"name":"meetup-web-components","version":"4.7.2033-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bec23d2a3c881f13a3aa62bee28a99f87c744129","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2033-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wYxncyQHaZ/Ah8pP/GuNc/xCgeWjmCMqOANXNVsM6lTJKuquWWplGAVrDIwhxhJTHur0EWbvdCntLgWGK9j0VQ==","shasum":"7b0661bc3e5d0cf5799a7babac73b155451700b1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2033-beta.tgz","fileCount":458,"unpackedSize":5912239,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDXQEHExvM4gweKJaiDUso6P//UZK3OMsOO0xLvY+9CgIhAP7Sz7d4TnhUtAyLlmjVSPy3W9NcR6YPKh5hLALQU2HJ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2033-beta_1522055166286_0.2774474075080344"},"_hasShrinkwrap":false},"4.7.2034-beta":{"name":"meetup-web-components","version":"4.7.2034-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1f32a591a6da4bab24e07562a6db506b91fd3d74","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2034-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Hy6VSAoHTwNMw/W1pYLMBeEFfbhdkY6fbQANZRR1aPb8t4yCajV7CtV+qm3yVo5POqRv+hqIuMOaRJtAdFT9iA==","shasum":"edb600023d3e4842eadbda2f73d5efbbdb12bf36","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2034-beta.tgz","fileCount":458,"unpackedSize":5912786,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGO8DXapIs4MgcOV56/eE1+X5XIZ7SyGiKNORxZUxl5FAiEAoj0mugZ9eRRwvnmqlDn7OAhs4biL7oS+k0cn2S0eq/0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2034-beta_1522074574568_0.8556142460591585"},"_hasShrinkwrap":false},"4.7.2035-beta":{"name":"meetup-web-components","version":"4.7.2035-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"713ae1cc55261178429d21e621207edfdc0c596f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2035-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Wi+SFRBKQkCc5TaWquG121vHinrYyhlOvyI1+FbLrqMuvrkk+UZXCjhcgI28j6frL/uJilxxp1hn5cugpFnF0w==","shasum":"c0cb5a0ce72d4dfc04c08d7915025ec99eab8555","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2035-beta.tgz","fileCount":458,"unpackedSize":5912786,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfjCBghRdUq6cgDinAOcAXEkSeJScdONu7Rz/lIuNy3AiAuR3n5tzbk+zrZW4QKVyGWZ14aau27W0D0RLCqTO0K/w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2035-beta_1522075083519_0.9680465153464188"},"_hasShrinkwrap":false},"4.7.2036-beta":{"name":"meetup-web-components","version":"4.7.2036-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0843fd0a30df896c65ec7216402a06b3ea9e8813","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2036-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-s6/KwNZb8aWXuWjjhApoGI3sHgSO2z66GxOT5ZglkQZ/t/IVTmKDI4DQuWkfklI9A1rb4+eghYdRTnHCGKUhBg==","shasum":"d7351045b2e420ec0a910a4b444bedec357c81c2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2036-beta.tgz","fileCount":458,"unpackedSize":5912760,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpH98IcOR754WQBDughDdFzcWMOp+82s4IXKHOVN8IsQIhAOraEfFZH+xahv4Y/OScxiGVT7kQdbgN7T38PjZdhgCi"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2036-beta_1522082149335_0.029410565205341577"},"_hasShrinkwrap":false},"4.7.2038-beta":{"name":"meetup-web-components","version":"4.7.2038-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"99024cf80095105175c452f1f3db351b74f1236d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2038-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zceKkK7+/qnJ6Zm919le4wfMWz070+tePCLx/bRw3fVGNceUWGBgk5bOkD2YwlVU/5E9qz29v9AYGrEKJZthEA==","shasum":"5609f0be9a079757e084797574b34f4feb86f56b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2038-beta.tgz","fileCount":458,"unpackedSize":5908513,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmVVg+SsKyXhwqxEcY2vBhwazKbV3d7lfKBNn1yDx5IAiBGLWl57+5AIfz0DWC3qR+xPargMHHe3xzlaQs9WJpO1w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2038-beta_1522091810264_0.5837460647550776"},"_hasShrinkwrap":false},"4.7.2039-beta":{"name":"meetup-web-components","version":"4.7.2039-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e2fdaaab6153103e9691835b8566dc344c2de61c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2039-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Y3H+xUJ0nx7dSnh2T+Uw8lGNOYw3HM8ZcnvjPHHAVy2NycETioC6QqpvczlczlJakcWjC2nXmilOvAAyShNKsw==","shasum":"3a09ca6b16ee3a4f136aabada8508cf364da76cd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2039-beta.tgz","fileCount":458,"unpackedSize":5913614,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYmAyo7xI6W90nbYqJfp2rc6usj34dTc/z6k7LEmEqYwIgCGv9j5dztMxL8EOiL7i8SCb4lVZsvV47CqGbyn5mhkM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2039-beta_1522093522410_0.26289698431895037"},"_hasShrinkwrap":false},"4.7.2040-beta":{"name":"meetup-web-components","version":"4.7.2040-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9a8b600b4e57042072780f8f14c35709744af7dd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2040-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-N5vxO4UKiBDRWzc1FUG8PwAk6eJzFesdNQ8JoKzIFWeKLSvOvPgG2WpVlfHjtEI/8M5hdpnjeihxzCve9Ko+Bw==","shasum":"285995063f4710de20f3bf5d5c0c86607515b3fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2040-beta.tgz","fileCount":458,"unpackedSize":5908643,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtNPxb3vdgfXLQIVGR/+gN2kZ367SoMPd3DF9LjJ2OiAiEA/cGlhuOYlYd6OgtQATEAoPKkJtujhjD+XAzPK+/OXqQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2040-beta_1522098727327_0.7736324608257619"},"_hasShrinkwrap":false},"4.7.2041-beta":{"name":"meetup-web-components","version":"4.7.2041-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2a44b981e2730dab546ebd6cfecff101649360df","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2041-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rEvYsTbBJXyMEb2vTrQ3EDqYxjL+2rdaShn4hW2SSuu71O51Uim4QGEhJZtz25LbYTF5WBR+tLX27FS6MmE1uw==","shasum":"4cba98df91fad868e47b58a1551161160081abf8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2041-beta.tgz","fileCount":458,"unpackedSize":5913671,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQukzwTBSZ/oI++bQbaFlItETvNNjvxqyHlj/Hw1JI7wIgMywosBuDZHe0zClFkSJAc76m6oNnLKzgH1vus8C/F7c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2041-beta_1522104095078_0.7105560224317207"},"_hasShrinkwrap":false},"4.7.2042":{"name":"meetup-web-components","version":"4.7.2042","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f4433438fda65199a0db1b1638fe52de5d5707a3","_id":"meetup-web-components@4.7.2042","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0o61P5aqRzpMo+6VFdbmwo8aFIQwfwAq8IWLlsuYO7tXjGCdYlBYUGUVu9f6mQ03Yh03f/1IrJh0yGdZBgA1TQ==","shasum":"ec3ed28d313d889f644bb9bc5039a4cbe1a7e65b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2042.tgz","fileCount":458,"unpackedSize":5912234,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvpI8lHa/xbd0x42rfc/+e+pv8YnW2322eqTexVs1J1gIgbTsHmdR2je8RoIeRgKpCz59IvbJCsAMb81HFmD3oM60="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2042_1522146784642_0.9635425363348546"},"_hasShrinkwrap":false},"4.7.2043-beta":{"name":"meetup-web-components","version":"4.7.2043-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"45feb0a9fc4ad2e6ace5f55728f660ffcb335efc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2043-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZGfshvDUCOiem4ESFsd8gE2C6+9L2pCYPWnIIHMHYJdc6Xhty0ob39QDbygqCbTQgVc4qyhaYzxY3v7amCH2Rw==","shasum":"5801002ae8372258e0e4407904057855d4e4abee","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2043-beta.tgz","fileCount":458,"unpackedSize":5912298,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1TX0hBYi0JBvnUH51FlQdUkhNl2I38unVHIk80FcMewIhANA2lkYuR9L5KtUL6q7kl06a9BHWu+Mv7A0oxvUl1d2P"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2043-beta_1522177590154_0.4378561843129314"},"_hasShrinkwrap":false},"4.7.2044":{"name":"meetup-web-components","version":"4.7.2044","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8e8d0bf0d04d80e58de022a6950edb828d5d9c6d","_id":"meetup-web-components@4.7.2044","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hbBWhMHfPEaC9FeHL0PJXbgglSjKi05OtDwmGC5sGXY7Vpbxj7rHiaw1OWQuyE+TtvzeStmcA0nFoMDIpFnd2w==","shasum":"1de816763712faa893237972c56b5d340dc923d4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2044.tgz","fileCount":458,"unpackedSize":5912293,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBF8y5/zQMUxSHId3tolFgEoQCH8wvSVTsFleQXFPs4yAiEA3T+ncgMqKTPYaY+Sh9QanBp9lrhTIzwpP6RYEjhKsSQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2044_1522180074831_0.12926483838158265"},"_hasShrinkwrap":false},"4.7.2045-beta":{"name":"meetup-web-components","version":"4.7.2045-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"15fa586b2e597a27fcda4fc0fa61d9b91efb14dc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2045-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-A1ESXECle3SBRSrWEdtOzrfi4AmFuMy5CgVGARKe/ug2scFQq8SSjPycq2RzfgCddVnBiU4+Ztz//2+Au0I5yg==","shasum":"ebc601bcfd872fe82359a489886a61df15dc2b36","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2045-beta.tgz","fileCount":458,"unpackedSize":6424963,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDu/OWwxotJgIjuPAJDuT/c8iVgRSiMDv7KqLbctGfcrQIgYR8mPZgvXobt7q1JK7cLvNzd1lYL4UHAyVLjFZ0OP0c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2045-beta_1522248299366_0.11075453383231637"},"_hasShrinkwrap":false},"4.7.2046-beta":{"name":"meetup-web-components","version":"4.7.2046-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"aeec98da284cc6a6f75a41a0c828c9248265a2e6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2046-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-SwBDF1yUAUlWTXI1Sy6VmwgajzebqVIGF28SssjPBwHQt6TyGSLJG2g20FElByjTlPI51KZaYNbVE8lhBkHNhg==","shasum":"f88e405b3288eb338fc523537b39a2bcc4554274","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2046-beta.tgz","fileCount":458,"unpackedSize":5961159,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVN/wSG6CjTjrDcbmgNmeohITGxye32wsnKe1JVXjThQIgVXv94sFn5SYvN4KzfloMoirU+LThhQ9tZD47q5QwqaU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2046-beta_1522261796045_0.7750027797129264"},"_hasShrinkwrap":false},"4.7.2047-beta":{"name":"meetup-web-components","version":"4.7.2047-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9364e055043324f4ddf8c3bcdce70e31f5460be1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2047-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-H1vZ55npU43p2h0R4TZLCUpp7FcNJE/KgItYWZrgRw+S1iDha+ARMerlCMplbHhv+CyGE/8njIoGWDY6YiOb/w==","shasum":"c557883b2920d0066706041937c096c1dcc36829","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2047-beta.tgz","fileCount":458,"unpackedSize":5912233,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKylXbcIRMfXm5QnTzF+dLQfYgpkkrkQsytl2dWeP6NgIhAPGn4XSLtMulai+X+gZu2ICRQ4hTyNdzeodskCqqkcP6"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2047-beta_1522350953733_0.17316780813599708"},"_hasShrinkwrap":false},"4.7.2048-beta":{"name":"meetup-web-components","version":"4.7.2048-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"aa5dca1759d71e109619aca5b0a054e5be7c7980","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2048-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Frr5ad+LUxIiQgjEhPwpF5AiWpQVptoKGpRnLDdTMHHRzMCOqy59PI9cc3l/jswpKYpHOKR7T4J6bouc3UOieA==","shasum":"a3ab9a989c81fda1a0098895296a91fdc0251cbc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2048-beta.tgz","fileCount":458,"unpackedSize":5917082,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxjbHAAJl2mG4RifoQ0U3kX2wa3aT6TbBHmDVQ6h98QwIhAPZwYTugFSO0o8LFcDvqmgLhcdaU9Zp1VLAA4rzNpjh6"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2048-beta_1522357876829_0.05011117442813551"},"_hasShrinkwrap":false},"4.7.2049-beta":{"name":"meetup-web-components","version":"4.7.2049-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e0414d87cfb20bc4ee6febcb3da5023f7eb2eb45","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2049-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vFTusTGFHcE9VDHk2jgULWW8BEq04QoUCzFNjuojev7MEuy0h2pr2Hjw+Pp5yPFuWUgx5PaWFE+30pAntyxzOA==","shasum":"9900d52ff132f092150e820e6266b98b7cb1e907","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2049-beta.tgz","fileCount":458,"unpackedSize":5913262,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMM6TbN9a/++hq3zXBStYW0WQxYrOhgTRLpsSFgArSKgIhAK0CE3VYvP+4hMQjiKlY/w6u9wiPvJ9n6cMoUQjs/ugF"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2049-beta_1522366574955_0.5232786995795404"},"_hasShrinkwrap":false},"4.7.2050-beta":{"name":"meetup-web-components","version":"4.7.2050-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"d4afd3537eb73a09ab55df4c14bca8c4f445de31","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2050-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wpq6P/sR1Vn9wcWiUrJdBttdyxt3q9cdpcxRfzaXapYgre0CyDj3OifUDbVue5YvWYnBgQOEaGvdCBo++JtisQ==","shasum":"1eb9ab54ab7dc631dd603ad766f49d2b3c3d547a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2050-beta.tgz","fileCount":458,"unpackedSize":5913475,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChouNSbrwihn7sYHhT8vupEmZCkKK8gF3JliX3iLdCSgIgcYb21qlZ39O0fO0dnLaMF7bxhiDsroGkxtLx32eOCd4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2050-beta_1522366919147_0.19593990184809718"},"_hasShrinkwrap":false},"4.7.2051-beta":{"name":"meetup-web-components","version":"4.7.2051-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"d8c9ef41c9b8e61ad68f1d5c784a240285d3f1c1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2051-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EC9W9S8wSiZv480bGluO9jIV+bG1JMGttp7bY+xu2rxU2s2NwToNwgPfWGgQ7ArOJfzdKJTSTWql+CGKzJjlqQ==","shasum":"fcdd6ff35db36e03095162d5dcbe9acfebe45f0c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2051-beta.tgz","fileCount":458,"unpackedSize":5916908,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDGapR+OjJdxbCH01jkHy6dOP5gspWXn9GEjHUhWYkCAiEAipwLOt0uTktWSVTGY5lBRmk9OoC2JPLu2yUUfIONdRI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2051-beta_1522367167817_0.8093375292750111"},"_hasShrinkwrap":false},"4.7.2052-beta":{"name":"meetup-web-components","version":"4.7.2052-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"cc3c9c6e27411580bdb4d95c9e11252a514010c9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2052-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mJ/EH8IKTqIygDRFvgSN5tfrZlUV9Yx0AWRVvLMrjs4tsJ3HhAaIZIeqg7JtTjdP+unk0dFGk1m2InEtusc8XA==","shasum":"464fc9707f72ac574e39d70257ab74e279568cce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2052-beta.tgz","fileCount":458,"unpackedSize":5912397,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjDWmGoUmpvRjNV04IWEx2fTJI41jYzSmB1qhK1Kkb/AIhAJFOtiseYE0WtMrnAXbU0AKQL5Q3nYcNIUVHJVQ9e7/a"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2052-beta_1522367456360_0.14344168717956673"},"_hasShrinkwrap":false},"4.7.2053":{"name":"meetup-web-components","version":"4.7.2053","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"639f6dbe0dd71e9f3c13ec1b7459fafec4b3bab0","_id":"meetup-web-components@4.7.2053","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zszuB/SoCifrCZ7p5WuMQalzDuqSi7KFhuiCKSDp2Gk/Ama2R0c5kImmf2O1UA2+ffJJVPD/oAsJYISEn7DtQQ==","shasum":"118aa0655f7679bedb3589db5e48e2da75aa1d1d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2053.tgz","fileCount":458,"unpackedSize":5912751,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM1tTOMP7eBrbmaM1wVpbD+PbRilni0yOFvhdejrJbOAIhAILg72cQ3gjHezlI0rB2RtsbsKzk3eEbuiTD/Ia4D1Ag"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2053_1522367502133_0.28517301697807973"},"_hasShrinkwrap":false},"4.7.2054":{"name":"meetup-web-components","version":"4.7.2054","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","lint-staged":"7.0.0","jest":"20.0.4","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"007e1f59175a236ab3d0e4306653d3ebaded09c2","_id":"meetup-web-components@4.7.2054","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LxBRZggq3/TYB/BzyXDa/vIrWbahUc1EEQQv+WNTXYTO8EMO1cPN9K8LxpgrlSNQktPI8fcdEmdsG0FnD4zn9w==","shasum":"1dbdd7441bf9915895fe6cbf1ff7208d4975c416","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2054.tgz","fileCount":458,"unpackedSize":5913928,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwGp8u5SfRZ5FMMslxeKd/KRuv5NiHnc+aEmt+FG3yfAiEAjkvEcvx4zznbLjErUH17MLFSkPG1sCwCt3ZQ6VJUAU0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2054_1522368019534_0.9086948763565761"},"_hasShrinkwrap":false},"4.7.2055-beta":{"name":"meetup-web-components","version":"4.7.2055-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"82520db12125dc6d597e29dd6eefdf54ddfc3aa3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2055-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-858ZxlF6R8QrsXswpym+ctHXZ7KpvK7ujjU9eSWCR+QQMBXYT9tiY+gQmEWsshOGWJKfzn+qDmH9g4IXIQdFgw==","shasum":"05385454c9c9fd0e28748068cb5aa4387dbf7c0b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2055-beta.tgz","fileCount":458,"unpackedSize":5914180,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZgOGDeAWQMNZkqL39gHpV+Zg9tT4FAw8cna2P3xkKyAiEAhlWdpeo4DVoVFnsgT+DvldehBukOrMdxnxXRp8C10U8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2055-beta_1522426839507_0.6691575209682445"},"_hasShrinkwrap":false},"4.7.2056":{"name":"meetup-web-components","version":"4.7.2056","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"81e3d3e91542dcd9f8469e9168631c45840a0c8e","_id":"meetup-web-components@4.7.2056","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-87vO0P0cMLiYTyrUkb65NGSarA0KjlnjfyeGtdNFxLcuwR8V51EysoDrPgL9UpXojtv8e6YXuwktdPmmo0u+6w==","shasum":"f313549ee6de551c1ecfe059fa944c32cd609d89","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2056.tgz","fileCount":458,"unpackedSize":5914175,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdD9wOF3rvTmUFiB5jauL/kuDSDWmLmkNU/R1n3UNuzAIgGZTxekE6moSWiNtoKaMhlGpVB6BYaFm5hEQxv4MU+Zs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2056_1522427102661_0.7329439953151338"},"_hasShrinkwrap":false},"4.7.2057-beta":{"name":"meetup-web-components","version":"4.7.2057-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"d3c5951024a0ec6b937eed45238c0e556a5af588","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2057-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8wa7ZKz7G1ydmBq4EHlgZVJUnNRCIONkfz5ohg072jQloiNZTTBQxPcbRSnsGuq7v0FWvmRBBsaHlfMhqnNFaQ==","shasum":"0278f01ea633ecc3ef10f03235b651df6ef353b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2057-beta.tgz","fileCount":458,"unpackedSize":5919957,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7u01ELaxbf7RoZJwGgIS+Zp28e6J9CT/OOnWAsvCrKAiEAyjqO3Gf/GQNymJq8OMLqv95HIl9+7g5xgdz6dM2iE6o="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2057-beta_1522681084499_0.16705716292255746"},"_hasShrinkwrap":false},"4.7.2058":{"name":"meetup-web-components","version":"4.7.2058","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ccf4a0c6d297fc56b4766f5e27e290518e71dd10","_id":"meetup-web-components@4.7.2058","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ngUlq3uvhuLNQ0hQ1JW/wSVPOWZoMuAFHxIFyMOHbZi3Ft0AO+KCCFaPjwrJGj3kJUMR02YGtvdHT2K4QwgKjw==","shasum":"7a499d7dcc3f468b0099b99b0bbdec2768456b6f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2058.tgz","fileCount":458,"unpackedSize":5963036,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID24cfGD97xHpYkx1ig/bWvX8p/+KWa8cdecYMHfjJKRAiAyPwoeP4ucn/PPsmhIjy4vWP2rw0pHyDQL7WrUJdCzFA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2058_1522685529371_0.27650335484541944"},"_hasShrinkwrap":false},"4.7.2059":{"name":"meetup-web-components","version":"4.7.2059","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0149bfaac4a389d4354386ed855acca8ce34f697","_id":"meetup-web-components@4.7.2059","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1qxMr7H+5YlCq/5DK6Zxvz/EnUqAW/UQQNiWikj4R331cctF9AwPThbdbvgDVDaEg+KoV7rk4QwLMn2yrbtYPw==","shasum":"6e1b48d07b4573e6eb6b3d9be9aff64e952065d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2059.tgz","fileCount":458,"unpackedSize":5963135,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe0eh4rYSFNsk8Dw+OOzccXtDQfS42Pp8EQ/brlPqNYwIhAN9aE2uVweQ4atr3RUmNGOgLTE7GxDvon8u5g37sD09V"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2059_1522770212739_0.11351187904289439"},"_hasShrinkwrap":false},"4.7.2060-beta":{"name":"meetup-web-components","version":"4.7.2060-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"62e65691f5e59640a21a3990899fbad494720235","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2060-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0wQLq5TBY7Bf8UYSzWf9nR9KCWPl9uJXRapQeeFhKTJAHr9WfDvk5CIPcyVBF+CTZ6d0bGCkttf7JR1IMJNfyA==","shasum":"a100ef8f2f18534e1ac00b640c63aff8e222ee20","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2060-beta.tgz","fileCount":458,"unpackedSize":5978008,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1HUeGKNX342YkNuq4Wj7RIlJY+PUMZeVDU8owG8Oa0wIhAPPDdyWrVID7ldsfhOHDpYo4Gn90+8t1QvSekINfp1+b"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2060-beta_1522796055873_0.028536798428648202"},"_hasShrinkwrap":false},"4.7.2062-beta":{"name":"meetup-web-components","version":"4.7.2062-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c7f79308c371577a77ef5549457ea89559ab886a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2062-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-A1nHVPmgOTarFYObkywkubDVP+V+ekQTulfdj6MXApCVQjE88aAztnSHv3yJtmNP1MwBUS9ezLQ6axHyX8w/cQ==","shasum":"d1ef26b28dd507d57adcdb134a57d4a23ef2ee68","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2062-beta.tgz","fileCount":458,"unpackedSize":5977890,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQXtrVX5e8Vu7ggRyhid269+bVlCt/U7P2It2QAzGa2AiEAyShUsSyFLICSoDsRLAl6I7o0SfCBKELAYRIPLqVhoLY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2062-beta_1522798334018_0.9164811255397831"},"_hasShrinkwrap":false},"4.7.2063":{"name":"meetup-web-components","version":"4.7.2063","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a15d916524c9103a70ad73ad0c72cd570916da94","_id":"meetup-web-components@4.7.2063","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-p2z1EyNybhTb2KJ1Sg9zsfOkVXgStIfsy9FXoXIr15A5XNbPgPtFN4cILGpZJw41Up+RG/bw+F23e9rP93w1MQ==","shasum":"4372720f86da087b017ad344163e79751f76757b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2063.tgz","fileCount":458,"unpackedSize":5977885,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENd9w/ZSwlkUysaKAW72ecKTZQSVB8Gj1X7w6roq9JfAiBj7lCGfVAk/Jl+acV5sbRwDUuArY83YZedYq8YMXYq8w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2063_1522861260537_0.13089146062537482"},"_hasShrinkwrap":false},"4.7.2065-beta":{"name":"meetup-web-components","version":"4.7.2065-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.26.1","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7e02f0f8a69f8cab60a90c07d02fc1c386e32c77","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2065-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aBtN6UKNiCNzNl2BxbJJUGpI4EAtE2MfNRQOx4glbyPQ0Mt96gsw3Lf6J29k98so8xSBHc2Ettu6Xhm/53/OYQ==","shasum":"40d15d0f94a732ad6b4127a5326c5a8baf3ce6eb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2065-beta.tgz","fileCount":458,"unpackedSize":5980289,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjR+Q8q+YmCrFeFuhF8bc1En5JYOd03jZoKt8itqcH6AIgf6ELsqzyIA76ORMdRj8hKQuSDiAH1Prd1Novq/44epU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2065-beta_1522874615976_0.9702608969562545"},"_hasShrinkwrap":false},"4.7.2066-beta":{"name":"meetup-web-components","version":"4.7.2066-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2cf35bfde22d67a95fa0ee2aca6d5a86e40f9d14","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2066-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Q22iEHcnI43ib9aAqycbQTIk1sw2IFxSCvj05UV4P2lRSAnQKXh+OjLFMvdWXaWQrvD2QYoVmpotc2gWkNp9CQ==","shasum":"11b4fbcd3edb3b2cfe14d7a39b324a3866c339e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2066-beta.tgz","fileCount":458,"unpackedSize":5983222,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOYIxk9EGIHPmZhG3/HCHoZkCe+FRBy+b/7Euc9CvfQQIhAKYCycoxbLtdYGQDCB+FuF7QuXmbWQ+bRuJYk6qmQmo4"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2066-beta_1522878765853_0.9577985528710165"},"_hasShrinkwrap":false},"4.7.2067":{"name":"meetup-web-components","version":"4.7.2067","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8564710209576d18e4360b45e0e74c7dffc7c393","_id":"meetup-web-components@4.7.2067","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vS87xT7V4gyJiMnOizKRpqalE7fv19nB+elW0B4U1QbzBSc5Whj+Pems0VEShfLJYh0GcvtH0HulLxNwM+eiuA==","shasum":"2ff68426be1512c1d650a458eb1e2dda924e6ee5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2067.tgz","fileCount":458,"unpackedSize":5983217,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB5yFxtXERj++3N2iuu7y5ah2dPyTuJgsn4Uh2ra2wxRAiAWCik29xvxEnzlvY+UHf4l8nVuHlGe5/JIX4gm6PnSfA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2067_1522945357251_0.025964686980257223"},"_hasShrinkwrap":false},"4.7.2068-beta":{"name":"meetup-web-components","version":"4.7.2068-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"false3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6d76160f8edd0a66ce240eb8d20eabbb2d9f43b1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2068-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vTBEtoaHTTyiv5BagBSperDf1ti5GeXA0qb1wKM0MYTcXTqIFvH0oygqfl9G54w4uKQjVeFYeJUcu8kVvYvrmQ==","shasum":"15b506c13b7440946e7c337d62ac00f39d9a6103","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2068-beta.tgz","fileCount":458,"unpackedSize":5998536,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+OWudZLSTOPRQWoR0SkbyFBXzgTEOU8eTDQBTAbZHuAiEA/3FgC7BCH6ggvctEmfhH8UsBYTfDCbWral62nlDyqh0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2068-beta_1522950206279_0.16694536437889562"},"_hasShrinkwrap":false},"4.7.2070-beta":{"name":"meetup-web-components","version":"4.7.2070-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6ba47e6798e54af386e2cefc278df5fe18eafbfa","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2070-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LqmMZVKzbMW2QJqK30AzsUWL3QPzvcaXk8LL/wPFjFO4NqQ6+hesJuJKIlzKSwaiQOnKBwe7oysAaOBDYhmNbw==","shasum":"208308aa738a0e762f4ff0421925d95246472ff0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2070-beta.tgz","fileCount":458,"unpackedSize":5998526,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPIUT6WYjRGqniphCJt+hGY2MybfbdxyjTKVzXY4MsPwIhAImjG/YujUFZNvbnTOEvxN2qt09nAPmuG4g/Nkb+Oj4r"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2070-beta_1522952431833_0.7880453487699541"},"_hasShrinkwrap":false},"4.7.2071-beta":{"name":"meetup-web-components","version":"4.7.2071-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"71b3497965bd441591d5b59f45f55a7035db02e1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2071-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EmPwvNsnHlyDCXjuj1unOC6F858wSsuKDQdD323BCmVyrEUY2WGm6iy04YeeFoa6yP0xsixJ1vtTmmL03tCmkg==","shasum":"c71f699ff1b61f02a83d70504b41f05801c15515","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2071-beta.tgz","fileCount":464,"unpackedSize":5991036,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEkpMnvAipyEN7I8ZmPz5YuIcU2bItrDllDcAdhrlxW0AiB5yIshHcRmlO54lE/mfMH3+UN/C0pGJTKCHBLiFI8S1g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2071-beta_1522955450577_0.08763895786954468"},"_hasShrinkwrap":false},"4.7.2073":{"name":"meetup-web-components","version":"4.7.2073","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fae683eb59171b7acd20173a5e5bf20acadd5409","_id":"meetup-web-components@4.7.2073","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rQqbid03dZGxleA/jQtJf9Y11+MEKH78XM8O9pF5zqMoAvKSrSXjcqzBcfmJLUjabfvKp/y4nbgRy8tBGToplQ==","shasum":"dd79d282995b614c57828600ee89b1ca28119346","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2073.tgz","fileCount":458,"unpackedSize":5998521,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmyzHihO+s5td1EgAC129UrR2zr1UlkKi4o/rfFis5RAiASmm3X358SjVHYhAimPPz6koKvPSAk17MaJjOI2U0AXQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2073_1523024578700_0.7368194103634007"},"_hasShrinkwrap":false},"4.7.2075-beta":{"name":"meetup-web-components","version":"4.7.2075-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3529476a5001d1e69e634ad919e2e6a9509d1b2e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.7.2075-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bclAxIrkmRlXSEW6/EBNkgzoiqwBAe+9fHW7V7o3VyUiu/+gs6fjdzu4JRmQwB67BFw2ByNBXdf423bXu2oDRQ==","shasum":"6c0b506a06fd3e737e9552c283fce202a8b02bd8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2075-beta.tgz","fileCount":458,"unpackedSize":5997274,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/WO3/9SR+RDEdsrYu3JgJiCEvbtdDu37bWLj8oEme2gIgEd5sNXnxZhFge6YfXE3+dsDUgnTAo2F9b4xGGo1UwSY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2075-beta_1523031046641_0.57635449444655"},"_hasShrinkwrap":false},"4.7.2076":{"name":"meetup-web-components","version":"4.7.2076","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ef9d3599ea194c4572b27f0d083a2d6d3cc4fac2","_id":"meetup-web-components@4.7.2076","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Pjm4u9pLHenQy1WeLFBuDUBdXxOfqK4p3Hj2e8yShzVW+D4f979Wz6yigbPYyaEzbmRkGs2NQdHmk1Jt+hfaDw==","shasum":"cec550a244655654fe8d50e832d7fc289ae26d21","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2076.tgz","fileCount":458,"unpackedSize":5997269,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDelgWlrJ78XlIItIfC80hIyj8gaLzivQXdIzmYovXy3AiBuEgsWF+Jv/sfe1hBmya+0V+Wbhc9h1be9rNkzws24XQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2076_1523031333924_0.8949051698767319"},"_hasShrinkwrap":false},"4.7.2077":{"name":"meetup-web-components","version":"4.7.2077","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"31a93390549f029aecc66aa726357420e1356d5a","_id":"meetup-web-components@4.7.2077","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-PdI8PkAnkJ0i0AOcAAt1ocVumWjY/2s5JP2iF0Jf2X5uuQxUc740i/RL/cEIZXurbReVDxxL6pOwiu+iAasUXw==","shasum":"f3767a0276d2982729ffce462b049579cba28804","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.7.2077.tgz","fileCount":464,"unpackedSize":6005083,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTAOBcTfGL2jhyY2x5VlspyG6foULGBFiVuesOqfMsqAIhALYUHgVaTAMw8lnpa0A2Qool060j44EAyHroabL+AKGL"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.7.2077_1523034277710_0.5226077042377739"},"_hasShrinkwrap":false},"4.8.2078-beta":{"name":"meetup-web-components","version":"4.8.2078-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"86a1b48b66da9c948a45558185fe1c03b7bff56c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2078-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6cMQ2k+833I5qh80EZ5r3Wjs1wn5Haa6eX1KIenLFaAkR5bdliCyPVXKKIjLFRP0zLqADlTbr+YXccdUB73JVA==","shasum":"28bc0f56fe20b592e4238fa825d5e01fded1e249","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2078-beta.tgz","fileCount":464,"unpackedSize":6008683,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHeM7NkOg86PemlE40tBDyMT+axqSy+dZZtCgWA2HEjgIgZE/vPEPdwltAgtmtW3EelyKKwemNJXCU64mn5z1Loqc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2078-beta_1523050325260_0.6017687724262608"},"_hasShrinkwrap":false},"4.8.2079":{"name":"meetup-web-components","version":"4.8.2079","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"af3dd1237ea09c52a2a1b4bc175b2e68b85c58d7","_id":"meetup-web-components@4.8.2079","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IEprEXyHmGTofhu0owvz4bQvJfPNiXLGzfX2UtI5WBnQiMaudNLd8Gq2J0Oex9OpkPA++OYAlcgt3xif1vYPWw==","shasum":"8144ddb34beaaa8f79e90e21db01728c70e3b61d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2079.tgz","fileCount":464,"unpackedSize":6008678,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2diEwI6dot/Fl9wI/TAmRalPKYVgdq5O0hYqoB32ccgIgM9Wv72YhDPzo+i6z+2uUzf7KdoshGMg8B3sRpQBVvK8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2079_1523050857689_0.6041959781650335"},"_hasShrinkwrap":false},"4.8.2080-beta":{"name":"meetup-web-components","version":"4.8.2080-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2dab7e085bb80356d783226b4521de7ebb3f02e1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2080-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5Kx+Uo3mKZit43+nR524zL3FOjzd/GIkpJQGI0gIuSlResr6wRBKbm1H25uux8oV9WgQPeQ94bejdwsKfmGkIQ==","shasum":"143f60a37f081e3cde2e36f81bb31de90ceec02d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2080-beta.tgz","fileCount":484,"unpackedSize":6160179,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5usaY+vlJaqpArL+57YvjNNE2EVX7JGMZopnfJbbMdgIgBjXFEJNROy1SRtk1b6mgIlsdFs5QXRuJntcC7++CSwQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2080-beta_1523299115288_0.7285596805188101"},"_hasShrinkwrap":false},"4.8.2082-beta":{"name":"meetup-web-components","version":"4.8.2082-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c2fc82e541f81ed4e5afc6c691fdb186561ef7ba","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2082-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-C2/jd/Nr1oeK4wMA9OmS8m26qvTCl0gdkAxieFpRuFJNtB90TZmRzszHzYlCdEEReJLT4dB9pByfgHRN93ieXw==","shasum":"a86c016b2b7c6c829a804d7deb770db452c47244","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2082-beta.tgz","fileCount":464,"unpackedSize":6009007,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFQ0iyW6biBS9FkLqm4Gnjj7Tx7QfVVm1/xRLbeNreDfAiEAu8ahqQbL+JLf7kNDR2NsS3fT3lhj9cr9gvJvxXsMdz4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2082-beta_1523300922171_0.5777476375931654"},"_hasShrinkwrap":false},"4.8.2083":{"name":"meetup-web-components","version":"4.8.2083","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"696855033ca96bc43ab3807852336edf4920b873","_id":"meetup-web-components@4.8.2083","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xCYuOCW5w95DP52jxq+kRFNNxt2FONSMJOo8hWVfdMMbOAi3Ci4typtc0ZHgVvtgL4GbPkudBwdh6CX71/KPrA==","shasum":"95fd03961e4d931f1cfcb097046af502728abd81","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2083.tgz","fileCount":464,"unpackedSize":6009002,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6PrfLoTtL3V1hVtowYfsAtsksdCrmyc32ir10680zAQIgNYsyeCRHamed7+BvpZVbKOc30lN9/qFH23NazUrSey0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2083_1523304003239_0.09983886366597772"},"_hasShrinkwrap":false},"4.8.2084-beta":{"name":"meetup-web-components","version":"4.8.2084-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0a24b630fbf4b5287136a22d7aa0a305389c77c0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2084-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7aRl/r3ECI74GzMIiW/xmCpTYCwWEJ+gOG6AQzymIizOFxCRh6IRT7WsJ0XLFIKs5VLXAuqUGM5nbKIqxWAniA==","shasum":"28e887f8dfef119f68ffd3bc8584bfebd5dfafaa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2084-beta.tgz","fileCount":484,"unpackedSize":6173139,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHmixbWHaH8xyNsquNrbRy/KbB+Y4lMpv0KBcMw/t2Y5AiBVe3dvMfo+qVHNLh31JBysnepiLHw665yj7s/LBjLHwA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2084-beta_1523306089953_0.4683742888902884"},"_hasShrinkwrap":false},"4.8.2085-beta":{"name":"meetup-web-components","version":"4.8.2085-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4af64291652cbc35a911d76c42d4b297dcae0246","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2085-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OLuGGYIRpuHIEc0Hxyp8uQByy9mLgTperjpzke0WZZfRm58zjoicmKq4sLxGRvHme6mo9lsN+xLvCXzxf+BsEA==","shasum":"187c6a5965ae0d2fb2f82c68b14fd1760635d119","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2085-beta.tgz","fileCount":464,"unpackedSize":6013518,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDc4Mg+jYtizbWWn3yBXHEuEsWnOKke2mNBUp1+uao0vAiEApHLUUpLZ83IG5IOrgs2SuQQchA5I4eRW3p2iIZ4AlwY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2085-beta_1523307138413_0.14037597527362689"},"_hasShrinkwrap":false},"4.8.2088-beta":{"name":"meetup-web-components","version":"4.8.2088-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"35f28d1c7122484389d035b63b40745f5fe3267c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2088-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/U9ZZTCaom6hZhGZ7ZUh8/Qp0si68SZPOO1OV55q8xxHeK0BoK6LjH0Vyb4g27OQFEe6xzm5F6opwG9ZiHITfw==","shasum":"7c265da450c8e44802adb117d817396f4135495c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2088-beta.tgz","fileCount":464,"unpackedSize":6011339,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqc6DCUj6DtbeO/4t8pAflkXmixWLVpLsM5GRVfHCHzAiEA4DLdh8Hrm14hI5jbWlJbAZrbtKIZcL7M3pia/0DfIiU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2088-beta_1523388409907_0.523958829256371"},"_hasShrinkwrap":false},"4.8.2090":{"name":"meetup-web-components","version":"4.8.2090","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fc30aa6619694ce3144b97ddb316b7aec91a3f9b","_id":"meetup-web-components@4.8.2090","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Nk7VkrIzm5xg7vFChBGNzVpMGnDwu/0WwT/CRuHQBsBiTIzb6HBnidXcxfIc9BEYbG2dg84llz8VZf8oPRXxKg==","shasum":"cbf15246fb0617c198098aff3d031eb3eb3984bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2090.tgz","fileCount":464,"unpackedSize":6013448,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFHPZvpYGs92ffW3vUfvRl4nfXPUtceHAnALMaRpBtmFAiBqqBsI+WwXDRs7z/mhMCs3pU0LKzCuMLhZfaAddSXUWg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2090_1523399110018_0.23120379507022837"},"_hasShrinkwrap":false},"4.8.2089":{"name":"meetup-web-components","version":"4.8.2089","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"dc92cd5f4a07943e35f27a1c4be132a25ca15811","_id":"meetup-web-components@4.8.2089","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lUEK9rWIt1DOGLW6QFBjcrInhqxN5wOpy6oQGntwDqKLTn2MyHjn8K29Exgm61gYSQex5oPopsqk6fYya9+Nrg==","shasum":"0ce6d33e747f1179b563ce1009130a2b456201a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2089.tgz","fileCount":464,"unpackedSize":6008937,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHihYy80wbwi2jkKt2xMmsbHhpxjpJpuyP3npXPCQjl2AiBp+lTJJAzbmLUkI7iEs3Nsd/kbFPWp0Nh2FrPN0GvwVw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2089_1523399161207_0.9785646513164332"},"_hasShrinkwrap":false},"4.8.2091-beta":{"name":"meetup-web-components","version":"4.8.2091-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1e5e15a58e3b30ae160801d0a0276fbdc1bc608a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2091-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-D2ev/I/WpGVtmquJuZ8NzBxmQma/zmuiC6d1mu/3Rr/oQkSjEZIwD/v8r+xJYjnwYO6Sck6iFLuDZ0VAmegaVQ==","shasum":"3a59d338f87cc4fe53185d38ba662b025dc937c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2091-beta.tgz","fileCount":464,"unpackedSize":6015890,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYEvmdDw/ocr8GYgbWwgP/sO05VgTCmJRU0lkAYJyIlgIgfvXlgbgARsZlN0R36dDz8n3H/6RS/y097P8MAzXsulQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2091-beta_1523457479340_0.9314454925903595"},"_hasShrinkwrap":false},"4.8.2092":{"name":"meetup-web-components","version":"4.8.2092","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0b6c07d06767c01a6d9930af0ff3dc052cf53629","_id":"meetup-web-components@4.8.2092","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OVkiU/F7GwA+lIRhNWueyJPf3l1Cj5jn0KeP7vKSsunlTqxzNBNAOZbFsKTsLrkYY4lVoRwqPZ8xqdQDFWR8Zg==","shasum":"0516efe64b0b52d1ebb5ba03baf43cec4c947bdb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2092.tgz","fileCount":464,"unpackedSize":6015885,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1D8Ds3fl2v3H9Z28wJg3HjKjRwnOWo3ZVLrNuBuZ4jQIge3GplHjmBjSsD2y8d/LpLvBUBxq4ZsUFxwNmVWRM/d0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2092_1523457987829_0.4590997666867054"},"_hasShrinkwrap":false},"4.8.2093-beta":{"name":"meetup-web-components","version":"4.8.2093-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"df37a9b30d9f96ccbda1c6bf60e3cfc549bfc002","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2093-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jzidgrykLIHspkbsQpnl8Kzb/6nBqh15tzJujIVSqcCvDSAbeVQ5eCG1jNS+MCXoIaB2zf1iPlmlBB4EpWaxcw==","shasum":"a46153c8f0428b71cdbb8bf4cb9df6277fc555f6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2093-beta.tgz","fileCount":484,"unpackedSize":6180998,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGoQa7c79FVlk4lAHAmfv8t9bmG1ec5f9mj4/MSubZrnAiARifgBrJ2euroEzXagGj0X3FheFSxlIeiDzTWst8TC3A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2093-beta_1523462550575_0.854223402763626"},"_hasShrinkwrap":false},"4.8.2094":{"name":"meetup-web-components","version":"4.8.2094","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"03309fb2fe2a30db94b0964e6a7aed02f17516fe","_id":"meetup-web-components@4.8.2094","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-yIx5BiGwRd4raJnSf8Q/+v6gs3bQln7DXseXbLTEa+fm79Ky7H6hjHeoQ8om9ar0dKX64elqK6+it3xQutCKCQ==","shasum":"8c19d2bf82792a496c9ce9d781d1163381b9ed33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2094.tgz","fileCount":484,"unpackedSize":6180993,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXs264rLsc/+PAZfaA1VOcbilvGDkFlVlEzNPtReDU1AIgWn0YutAZLh+E3deLinL5GvH5dOkDA7yWV626GuxPEBQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2094_1523464302572_0.35379716111635173"},"_hasShrinkwrap":false},"4.8.2096-beta":{"name":"meetup-web-components","version":"4.8.2096-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9d59484fb0a8406c84a5664f97d049fff4f876bf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2096-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7/6Sbwmaa6F83TjOQ6/2sW9ovsgT509yeqpn8Dzc8MTo3NFYD12A2sTrNhxvEwMlg0+ZPK/8/WqA7yvhxLYRpw==","shasum":"1e16d4e172c37eb31360b47f49a804886b3c0589","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2096-beta.tgz","fileCount":484,"unpackedSize":6215382,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4KpHlH4+ukjqC829diqGuw4wDZ0A9ZDqiV1QMnZOTxAIhAM5COAgNPZvzfSUDkYl/urDoYf7ecO/dbc1aE9l0sjj/"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2096-beta_1523467777324_0.3336923956994007"},"_hasShrinkwrap":false},"4.8.2097-beta":{"name":"meetup-web-components","version":"4.8.2097-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"944b1c6eded786b92de9b634d5fd1b14c1be6423","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2097-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aLulm+sdWLGDQ782ecbSXCo8NtPz+QAz5jfEZh0FUp4eNjE+DFbD8RRqSLUUBJgSp6yA46eu/GHdnGHmj3FlIQ==","shasum":"9af3c8514fdda2552b156e545c0426e9a01cc75d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2097-beta.tgz","fileCount":484,"unpackedSize":6176616,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfCxhQBI4LbfFGQsVotIgUJlyAkCoL4TId+cdbSDjehAiAQpoiTcIHThzwX5PSnzM3ohSzWUGzq83wY870G/m/OLg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2097-beta_1523502460643_0.7150100091942746"},"_hasShrinkwrap":false},"4.8.2098-beta":{"name":"meetup-web-components","version":"4.8.2098-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"087bcce66928fd2178dea49008108ef9adf9a217","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2098-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gI1PWsTP6Jjo+sqEKjha9dKn5AS+2XUGbhMvAJoJdSstJRsawlCTWJ7F3fIQLpErtwiHjlGc35QyHMCdOdIgEQ==","shasum":"40cc69286515842380b176c5e614e1fc728e1ea9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2098-beta.tgz","fileCount":484,"unpackedSize":6176104,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt4yBF0g98AN2u//3WhMzpM9HTkGYX2ApCQbznHInBsQIgXmo2UjiNLUR49WUrK57PdpwR4a6To2R0gfVZ1QRf7SI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2098-beta_1523503202970_0.8528924886614013"},"_hasShrinkwrap":false},"4.8.2101-beta":{"name":"meetup-web-components","version":"4.8.2101-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"092e6970ef36c08620085b29df570573faa4cb53","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2101-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wagolcJTuCwXYzOK4pu4ZpnlW7nHYzJznhccobTzMNEQTy0T1TphzKA0j7OKDnh9Bcg6xnJpLWjBkXrv5dr+Ow==","shasum":"196574d58dc74146d1fe93b5c6525aaf132bdf7a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2101-beta.tgz","fileCount":484,"unpackedSize":6215411,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGjy55uePvWbeNNVmcACN1njeMfmuIULZ24OW6z/7ohIAiBlzNXxC3WGLUhFzcTFicgT+W437U55maddB/xtSBjm9g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2101-beta_1523528662993_0.3395857746597064"},"_hasShrinkwrap":false},"4.8.2102-beta":{"name":"meetup-web-components","version":"4.8.2102-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"940f45eff412a6fd95b4a4b42176742f89a44c3b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2102-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-E4NN9pTsZ3xbLZUJQk2+2cjDj5qhUnjKTZSaXuPas6xD/pTyybCXXyEcsVYpqVWvR4ZzOW+8YWQrtHVNwj2kyA==","shasum":"ceb63f2c0c2a49e476883c220506fd9f47f2c6c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2102-beta.tgz","fileCount":484,"unpackedSize":6215453,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAw4DEdGJzjfvxnoV0Y2663XkhhynabdAvn+OpvuCt7XAiEAu69LVnbUiWdtbIHE193mt0tSOM+h+VknxybBatWTPKk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2102-beta_1523553472108_0.9835956913670154"},"_hasShrinkwrap":false},"4.8.2103":{"name":"meetup-web-components","version":"4.8.2103","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"70b7833d3d10f060eaf43bbfac01d17c20eaf2a7","_id":"meetup-web-components@4.8.2103","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/OBtXn7UM2Is/7oOjdlEPy1feQ4ph1KCb2fqJrCdy9AaUsXlzF0SvM2C6Vj+EufSHtxYqcMWg5ixRP5j6cjLlg==","shasum":"e7f6e101296c57e51bc1caf1f820133ab6b94fec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2103.tgz","fileCount":484,"unpackedSize":6215448,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZyJdxYyWNVCjxbjPnl+BoxAHNH0EpFIZ61WkAY3UAXAiEAsPkDKlQG1mtURuszFOBWCSy487X1yaUnCNbrcAK8Kz0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2103_1523554215273_0.794143021891379"},"_hasShrinkwrap":false},"4.8.2104-beta":{"name":"meetup-web-components","version":"4.8.2104-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3d9bb6c89bf4db09700d945d2176c5c2c8c0ccd5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2104-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iP3NmW4Qx1gJB/XbFWj4OJ8ImZKcv9zDB3bCkaqfB+m114soEXsWVMmb3r86+dxx4ydYJn9Qroqa3NrGtZBefQ==","shasum":"4aeb730d1db2f8e1aacb33497bc12521444c4244","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2104-beta.tgz","fileCount":486,"unpackedSize":6208339,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyLwKA357dmKTJgYe3mmjBitra8Mzo1mzlq8l8VPcyYwIhAK+n3VTnkxKyNEQXbZykd3eVek/VwpLH9aOHdCfYsX7j"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2104-beta_1523557007817_0.3841975249486389"},"_hasShrinkwrap":false},"4.8.2105-beta":{"name":"meetup-web-components","version":"4.8.2105-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"27edcc594e89fe3ff8d90acb4ef9ccadb788c7c6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2105-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qam/BG/OFmtG8SZe908i0HBSZHOPGF+yjCIcL6q9PM1wqmxl7oftoW7ftaHi1cYENgsEmcT2iOvNWu+Sjo7dgw==","shasum":"102ad4587c4e283e73b81568e3ba7506943e7eb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2105-beta.tgz","fileCount":486,"unpackedSize":6209448,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIElkMImzotBhpvjBjLknai2JtTkNga90oat56W2nkYI6AiAbisyKqNbw2ubE5r3l/wqxoC2asepQDen8/oObG2Dvbg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2105-beta_1523563840193_0.7251025405825262"},"_hasShrinkwrap":false},"4.8.2106":{"name":"meetup-web-components","version":"4.8.2106","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c5258070e4d0e1a9c261e4fc5a12a9a9cae081b5","_id":"meetup-web-components@4.8.2106","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-NALkc8Uk45iZrnbGaqjQrKRnsnhjqGgRb8tnmc8X8GrhuV60mdve7N7nf6uF/ThffxN4cxDsJ1ePENCs/6W9cw==","shasum":"e5d43611a644ebac3f640e7873a7c68a314c1789","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2106.tgz","fileCount":486,"unpackedSize":6209443,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIBQjgrGR4kHbRe5r+gdd91fn8guHrdKc+13DTLXIkh+gAh8EgFwlU+sZwStjHRMkI2yhj9H+4Z3Q7VPkX1oMDO+m"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2106_1523634974660_0.7170173214537188"},"_hasShrinkwrap":false},"4.8.2107-beta":{"name":"meetup-web-components","version":"4.8.2107-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1","react-dom":"^16.3.1","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e53453e1157a15209834f05a687c68fb48ad9884","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2107-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4ZQSgu/vpOKj2G/Xkmh5Wvvtc2Ok0mtLiv3fmEKECKshQYA+0flkJCPan6BK2TniFZ0dbGrbVldbd/6R489k7Q==","shasum":"c27faf6042c637568a036e32f388f2ceadd64156","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2107-beta.tgz","fileCount":486,"unpackedSize":6193078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1JrKCRA9TVsSAnZWagAAPysQAJt+cWEEAhcqk0BdBwH/\nqoAP6mV5lPRYBHTlFkVu3ciw4revSdv/zNdBdtwysF/pEyRVOXTty1+9ySAR\nL+ZZyfU8PZ0ia1W7nafchLTTNl7HU//RGZPy4qVUn+VRJRWhR1ATi5mTHa2Y\nffdUHc4opYTAvqB5VdkSKAgHAr+B/QeHze8Z1OVtNADdpsHY7b7/UMYmQa/I\nJE83QheSEmGf9pW6ykwOOA9qWFpwFDvACokfpWfPQx6DifTuKq2CEDxXAp97\nkZqWPZbq6P0wT3P9QA6YOkDR8N5TRUAceV3AyKtlH02uZEQzYAC+MiMLguW8\nZsIUtjcKkAKgmAWogvdvFIFLTRiCwR/fhlvcEtrSNbShsKCNT5AZ1bksENrd\nMuGvILXgGbAeGOLQRztnLQUxGGrx7bsVgFVBBi6mrSNzhe4yRzIKOGy97dJ5\nfheU4DZR59fboNutEKqpMlR5xIu7E9qIsl/wLYL7Gw0rDxfQu0Vf/H1vosSk\ngBeSsMd1NUcGGGmoIoIBhPFZ3xAHwm8JCh3CNY1PQE9WMU81/Dqohhfrf3cs\n/TYqYYhjBHi7obfG3hzN7s5VvWZZEgwWoWVKFRq0FUWWqGInkIEIyGyf73CG\neOuDfFQKGJ7ZoQC4caZj3bbOGbjhHLcVvTynK3t6hC2GOF0tVeEHrUWsHv5P\nu4n6\r\n=IjpL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUhaiv/LoQy5xgo/lL9C0JS13qwBCRdJh82HVKx8Cv0AiBbYm/YSS7DotdvHdxyXvuJw5WxBwS5geSlZCwvImch8w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2107-beta_1523882698394_0.2866412699863099"},"_hasShrinkwrap":false},"4.8.2108-beta":{"name":"meetup-web-components","version":"4.8.2108-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^1.3.285","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^1.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"eeda0a571095a4d0eee7c2166e44bd19fd01e8bc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2108-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dVtHxP89b5hmWLTbA6jSG2CwbIbOrohtr2zjm/5M226qH3z7m6Q5XntVR3p8sFfwVAlHfHuIUJi+z9+xWTcVdQ==","shasum":"8b46601c399efc65856fdfa5f11a35d19bfd32e4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2108-beta.tgz","fileCount":486,"unpackedSize":6193100,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1KOFCRA9TVsSAnZWagAAiycP/RTsZJ6gX31L7z3WBeIZ\ncwbZK4kOWhwDNSiDjUsYxbfoJ7010Sa108B0vq73e2FKU2oMVXr1P3zBawVh\ncnBeKxlOd3ZHOTiansNx4MD9M6pktGQXwFDGZATsyWN8tigYMs4s5fzWz0eM\n1VCSkkzla9CaS948eIIxV/HEwZEcwjxKxDcWqIgYhI/Na+4XD+PmKnL1uH8q\nOtOuAh/4UIGpvUAvANzf1nAO9z303ke8Iqppbojy6efnBvdITF7utiY1e/+n\n9TS87fNoUA9VqH6n1JilN17CQ3d1YtkDw+UjfVBJ+cESr8afuQlyRMK1MoHD\nxkv+OFpgC1prJN43GJvYrBQRL3hFNj0cwUWBhUNDkCid1qHq7s1NCMPUM/NP\nUL8XFLwFDxJx+RPT5qqkwVWY7tdYiVgQgXqqWcP9cmK4gMIhBdY38CqEumFe\n6iZX/Xc8ty4Z7JK8hL4K5LN8b/Xev7Y5VJOR+ZcIR3QcGlzOZNpCCsGGIcHh\nhnvbudMEc5zEClMHXorp80jozpkfLiT2nsrzBc1/PR+CydY3sHudzDwQgLhG\nhMGORroQ8hOAFdYXvCBrIriG9c4pWUeC86KhQizp4u1H/xOtfWYao2RxXoHy\nCgN5YrFdK8RoEu7wLTs1zvoD2qbFrzX3qfa76PLo38lAzL0V2Yk/DJwhP+Fj\nNZXF\r\n=qUKE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO3W6l3J7bEpgJXYNQ5YLM7d3jKO5BMsqyDuyB8DVJnAIgJr9eyHuwH8C4u2i+IuPu6RY1weJUH80xZSC1vbSiWNo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2108-beta_1523884933287_0.9650785322024287"},"_hasShrinkwrap":false},"4.8.2109-beta":{"name":"meetup-web-components","version":"4.8.2109-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"38e5c3c91e99f6107700c476e7ee65377e945cf0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2109-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0rkpHA9wmCkwrGM+V43csywf2tghCikjKBJ9rQRNEEvy4lS8EGxVRV0Yktp5XI7V5rB9S8c6vGAHjCCWt0Behw==","shasum":"57b060e55afb940233051a4cc03eb45d232ac40e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2109-beta.tgz","fileCount":486,"unpackedSize":6214790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1LbQCRA9TVsSAnZWagAA8BEP/i51NPfE2japOdrVitxd\ntFqBFEgOdJHlr81Nf8oP/6AXhrbHhzzIbHsjc8pXqzKcuExJfAqG2Pf+ksQg\nNII9kRzz9gURFK5b44aQWkGJsmM9KUZJ19YuMABJgNfslpFv3ujGATwgoVQH\nY0IcFH5KaCzaK+szL21RvfhSo/QtoPo9XNBur9WleMxaq54guto8bivrpjcQ\npCNayuxCf5NaZupflR+T3Q2FZKMQfaJF8dTRBguZk0RYQiJE27d+eN1g0DGr\nA827XsCFI0dR7rhECM6GNm/tbN4Pc+IrVOsg1WsNLGBg2ZxktRd9l8DpapDi\nXktulq+vQYmadW2wLGiZBv/zntk3pNYUoaynlY8/DFRpwiHCM/nJOoYmyR2/\nKzzhvGl4P39mbxpf8PqnH4YuiwxT+73cLSTrE4VExU27oXbSS9YVqp3NKd0K\nPATXAYU1EGgRMKdvQhEmCHNlzkPN818RYhZPO3q7g3xEh/OxUKmkSRiNf8ba\nNAJ2XhqpDMNoyiZgNMVD0cYxBDEudiSmEajcYDsxTIOq5AzeEgSG8NKSx4j7\nCLoqJ7C45lOExGOvnC52NANotVxITV1osrPceM6efnwc4yWSRolZPL67Vn6z\nVhjql2zdmGjMsOkaT1BOIk92cUMj6mlqa3H9H1mtVx+E8ZzHMfWRt5oeHl15\nzzdA\r\n=7NqB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/JGePUmVKTz6ILUYPOD83fKnxlxFaCWjRr0GssdHTPgIgamjWjVm6JTki27fchslv4rNJ+93goOLh2jdQ4rWijM4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2109-beta_1523889871711_0.3756969310637903"},"_hasShrinkwrap":false},"4.8.2110":{"name":"meetup-web-components","version":"4.8.2110","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.0.0 || ^15.0.0","react-dom":"^16.0.0 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.0.0","react-dom":"16.0.0","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"cb2ac1c96fb9551fe261c7991d833b6735b43cee","_id":"meetup-web-components@4.8.2110","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-MFZijyWj6I+g3WcGgNp2fEfA3hbouD715hA9o1I7HzzuHTHnWUE4nF9qQgCZrPyGy0/84skbKubwIJaWkUp0Iw==","shasum":"27cf431df5f13e8f816d0da2062f1cacb88fde8f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2110.tgz","fileCount":486,"unpackedSize":6214785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1LilCRA9TVsSAnZWagAAbgsP/i5Az+XB34OUIaQ8IVUV\nlYOa7q+NtIAWGPSckb8hu4I868qsNJor/+yV4wusvcN94OwRu/SsNoXlvvvw\n/Yl2ewAew1RTHV2QuU7h8rAABOUKEcmRIx49ByQhx3Go+QmmLVRuVEGiNe9y\nZmJPjU3RfawYnC0zkSK6SRR1lMrmfA0aRVEXCjPXue7qcdpWY2iFSizPu76o\n26VsAuqgrvDAt6aYJ0pEdAtMwvmANwdMtiXswogQTHfKje8cbNI1TAQ2gpxS\nsWkJl2FEKiMYVSv8mAiwINDT7qPIoxrXOtraPnASwbEr4mLHO8bxIamz9Tgn\n9nPoLO72uG9zU+JdM+eXwRTP2XTZB6f1DKAoC83/o+0ES45EAQxnNgbJSPOT\nWGu43sM+R4JFg2QNz6STRxWsuM711F3l0RB7eTN+l4SAruO4JKEll05YwSsG\nwjrzsrLonMS0sNH+gxukqnSPUrw2thqbczjuaDtNjuWkpP5uvrvIOx5OALz2\nNT48uA4LPJ6Y0Cb3iCMHM6g6nZx+Pqp/v5q8LNSQs03WVBSHp7E1n2aA02u5\ns3vGr5wAzbL3Qbua23XHrsZyfmARXRqO6K/8NRnlZiLOYYUEGXx3fAqTRKSW\n34xz+SX7VTrUzX3hUc53aLCj0q3pE6sUAEhNwA8A1QY3azzMfeONb9GZpQM2\n0HCe\r\n=Dcfn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBRX0dVaoIkelIFvh0M5JM0SSSeSTIVVCtsCklLflPGFAiEA2sa+k/bF8CwYAaMbKOrmX2ba2cE9DYd7QTH/AI5X0GY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2110_1523890340643_0.3177459709671746"},"_hasShrinkwrap":false},"4.8.2111":{"name":"meetup-web-components","version":"4.8.2111","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"658e59a5b87ebc979df6f9602e55b8bb77674cf5","_id":"meetup-web-components@4.8.2111","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ezwt2q6bJY113OEAJImnQGJdd+10icklJq3HyaDxVbnxFv0neyoTNdfA21KrFn8kvAassB6LttxwLFfI+zRwvQ==","shasum":"f333a39b2a9b13180e31f85a40cd08b64d8abddb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2111.tgz","fileCount":486,"unpackedSize":6198437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1eQOCRA9TVsSAnZWagAANL4QAICZh+yj441LfKq10VJd\nGBUHzfimFUc/7SbBr/HLmtrXKM8p/zvlUI22sDeddxi/EtHfR7pWutxJr1Ly\ncsAQ0zyPfQ4Jzhb3CJosfAbGE9BpH4OrUBrVVvF34a7fjJwkZOuKxh9wQxRs\nJNcppuNuTFdc+JpVtvR7lu/ftbkOXC+1/txjohmQGyLIy/f2pt+QYjkZfhzf\nhxXsCCg4rRgXV1aIy4W7+KQ4s428Rbzvh8sUiZ/yujwNKaZEFESY7qPxGIOq\nLXWkTfPKkWXyr6PYoWz80OZEWZGu+zxXGaWP4PC/c+tLuTyIn8lBTdLjlE6w\n7DFM0iiNahz6RTclyIHofWPISLus3mfXjduLafZ0659cNpQzvUs7lL3Z4u8P\nX+QIFpWxhILNunWsYEIRj3NvknQj/CPoKj2CXy16Wk7q35uk14yDKiRpGYn0\nuhitlc21TW01EwEfsZM+JcJOmu20BzxvOjsdL0bDoh4sHJvYh+USr8LTzL4/\nu5yC5HIJpax3wHgfUgo4C1SArMfdbaqM9HjR9vtJJgIUUPpiSAlupiKb+CzO\ns0SWMfA/x4A/Cl70ehxjfTDTE9m0R1O1+muZc/yFxZljBT5SAe0fmfv1AWOc\nF0PYGrWiOQT6gF1J3cDnDuuAxLcrb6dNrEU15Njx9YGoK65dP+fJQASG/Ip9\n97GC\r\n=wJRn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHpBTti4V5Ou0/ddaHwvkShEVdpuVTFwNuz3IJ7IDAFvAiBubILbq5FGIa0fIbb588HJ8tFLmjQdxIcbPIxxWjr8ig=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2111_1523966989868_0.3498239069376372"},"_hasShrinkwrap":false},"4.8.2112-beta":{"name":"meetup-web-components","version":"4.8.2112-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1a7862069ee85eebf3a84a23fbf8498d5fdce087","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2112-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-T/EX3i1Q11IGc9c76arKQpkYhAP4u4WsNd0NfmHKl0AOpprWXWZdyEgUkvLVg52nJ/w+DjJcr2tAnpDwIvXalA==","shasum":"b536687ca6f6b735e857321dc2159786412fdc6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2112-beta.tgz","fileCount":497,"unpackedSize":6253287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1piyCRA9TVsSAnZWagAAH+MP/2REqthYWoSslz2/f9vV\nu1Rr9XBJN3dvRnP/TC4lT2pVkD9/x3gb4lhoOKByUN6QnwdtI6HJLCvtrTwK\nGbLcdnW9BYXmXkUqQ6oZX781TBF1xfYA/SREYeRKNtc1IpRrcAoVTT8/dwiA\nNLTDEZlBS6OyCJmmtnoyZ8A+/9SHCY+3nqjbJo67La+nWu/Mx8i4h1M2cioG\nHrt1oBBb+g2+Z/Kooa/2uZgq1BugB/5Dr/nq47FP/HZJbfr2cczU6ubQE5m7\nwp+OhiVJVtFxFrkVgnYvSGsepuD08cbdg/6bi/XedEJObLI869TLxbtoiMvU\npdPdiVbDAQ2gDcYpyne2cyVosSpo8jjwOJZsfTrfs74cooYZHFkz1FqWPYin\nhGXilR1G8lKNtsRCHYT7wdgJThmvHeGqNi7AEnNEJIcVdHn+WWDDi1FGUHR+\nHzXOztsu6Quf74E1dyKttsevvTFGqxxT7zestAkg+In80cbQ6tGNyjR1bYRw\nexPh2omr7KKjuID2S8giMZsKjLAxdutGqypUHfrnUMZeD5jW6ycQnB5q2lRr\nM2zeDVfRFBvh6vUm097FZGAdfaWfYCfwRp6/ebttDzfPtSBklZ4X+p3TnGGo\nNBSa9pVOGrEkmD1eTkF5cwQeTmddcS2HYuXEu8YjHWRIbfCvqFolFDt5FLqt\nflHA\r\n=l/Az\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZ85Lrp49v6yQoDIczZwXzeyTgRZAQrx6MWEHRcUy7FgIgPf98a/fF6iB3gAXcmqg6l5hepnjJQW0Jm3K+sHbY4Kw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2112-beta_1524013233425_0.45099499148639133"},"_hasShrinkwrap":false},"4.8.2113-beta":{"name":"meetup-web-components","version":"4.8.2113-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a60596b710e00d1eda6c9ffcbb9efe056b2a6fa1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2113-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pEZHVusSihJfjX8rlCoU04+S4zWe5dLBfQC1SNb+6aj9NIlrf7OnMl7h1JHaXEcgxUT7OTjFRqDXgLoySSv9Dg==","shasum":"372b7e5a0c59c7bacd31a94b0752b73ccb5d42a8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2113-beta.tgz","fileCount":497,"unpackedSize":6253276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1pjvCRA9TVsSAnZWagAAXPQP/0itG3WfHQfAXucExvsc\nQkw7dgSMhIU7Wqi3xLE9VMDcd/VdETb1S6AXUpIfqfgGGESih9CVZPDESSfv\n0Btk4+wWMWzGOWW4MnqURoNPZ+gZbYs7fHog8G7XLV8R5Qzlca3CNGpIdaao\nsYkKeeHD73sw+elwTWAjF2IYZX2EneCjkPijxS29xcUEjqyA/08Xsr9J7KOc\ntXebUPWPrIqan8nnYqbdPF1eYLIFa+/Wqxss+KRihZuHNIDBl7mrRmxqrKA6\nVl4wNFCKliVnidsbNEa3YcUXbj/LF3gsYxhMrD7D9w+o+ZSDHy4Qep0iUq0E\n/yzWYfnFVkBc/u6g4Y58R8imlQXNkYZLyUfiOxjrsHxFZKyXUnR0EB+5bKZ4\n1ALMRj4bpVNUTPqPADfiQ8M1z7R868rCKCKtc91f3msGX2o5TCoUFLJ4dunS\ntTm5UicTc+5ErUZyVqX1aBYAN4vc0OOYMaXXb9XVfPmV1by3F1OutI855pxi\nuagXM22MHoqGgytR0RThPHoFQRT4eIioRf4Han2mQcQ73UEo3RvRJTNlO273\nj1El5FxGmAwCiwaiT03MGKBkRiwUKvg/sE6+8o7VmHuLkWvnzJJvI9TamoAy\nX2UbNNHLViCnjlVIyC8eDhDC8rsFAXbDmLjxErJhcdCPwhHvZgOy5QxjMI17\n/ouh\r\n=qyxp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOK+nIfV2CpS62GVlu+b1ZXsbckIvQW3TaT7hE1T5snwIgHtN18Voe+gCxJCrs1iiOULwSBEcvO/Nd9hVLpPxPExU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2113-beta_1524013295341_0.09711433735826613"},"_hasShrinkwrap":false},"4.8.2114-beta":{"name":"meetup-web-components","version":"4.8.2114-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bd05afba7fbc658de24bb1cc568e25509d4e6f6d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2114-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jytXl9Uy+V7umeYHTkn3MlWuw6eyL1PWSrcA0P67rG7p56nuk6rF8gPhLRe2fd2j/4dUl2mg7c5ZF2yntaKeTg==","shasum":"1e2ee135e683dfe581c90c010b61b4572ec7e4ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2114-beta.tgz","fileCount":497,"unpackedSize":6253884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa11bgCRA9TVsSAnZWagAA8fsQAJYWdnzCaxHZP7WR8tDw\nAZ7Gm48Uu3tyTq3FDUCU2IyUP0GzBQuLSpU0xW46i1Q01kTh8v6dshiSiDJU\nlsFZwntoDi08U/WzLnniIq79VTxLER012XsYyoFVjxZybo7Tw9VH9NIggYsi\ntABv5++IOaWgmQPWcF13+ComgnPyKiWI0jpQ7Wu833qja9DKcu4G/L+8oKZf\n9ZRUXXh7S6APQphkMJm2nspBO+r9YgAk6MyFBcXXdv7Jcl5NbLctKxfJSRr4\nOAylB13okdSlfCNe3iutvLNxksVuXXbt/9BajXHPPBoa4zncn+8ZOaa27Cng\nC+Yg41U1pqQOd/AyxhN6Inz1wbCYmFyinbdmZ30/xov9r1Xg0BMX3bWZENJq\n3Fb8FudcpQxh/+KBaKOEJr2dWQ7S+ssHBdcNV6w/saZeWxAolXaF8hLWy6Iw\nU+drHoXhJC4sk04PoL7LiYH7INgmFU+ZfAybvKaMm5TL0g+hzhezgajkKKmP\nZx1sX0peVPY3gf0TaBaowlcLPKQePWWciNMm5PVDQw2Wm/KB34C0jVMK5kRN\nTpw2Hdz8CUl7VXnxSWno1fpKhbe1HdkScToHHA/LlNeWfn0FmDArzQ0kQEaB\nF6non65cD7/vn4ySZ5TWprnzA6bUCFwgHtNqLME50A/d+XKWmE2c885lFAdc\nqfLx\r\n=Fwfs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0XZm1mlmKApOwqbqyoVXoAfNH5aME5Chvx+ANPzWAWgIgYQxhwb8UF2c8FbkySjUULE0u3igzOxenRELRkc3PuD8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2114-beta_1524061919825_0.8422245844988041"},"_hasShrinkwrap":false},"4.8.2115-beta":{"name":"meetup-web-components","version":"4.8.2115-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2a3e27b6ea4f855ea8bdd3f972601e1671c2e492","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2115-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xSHIT26TvjSsgsfL/WLDTuB7gSDlsixX8yOuYMWNQCgHTSBqpne1dv39c5FSBk+Fap538jf12TVqxW08Oh3Smw==","shasum":"582fd660668cf1395a8b95ae44b196de10f4f41a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2115-beta.tgz","fileCount":497,"unpackedSize":6254842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa12M0CRA9TVsSAnZWagAACkAQAJKNj20SB10EzBEk4JTU\nEV05GHv2jp4EsTSQtwj577MJJyeR/stvgtgcQYN7Z2PS6+S4zriw7b+36B+6\ndpFF8gly8bPfPEj6rnNtm67PW+eAx/6k0Ihp/BHTFXcShP52X283cBHjkfdA\nZeEmkIHFe2UXYc9ImejH55y/0PZ8AIdc7sR4fimbbsRqevGyUC+1ThMzd/pf\nFMRB9D3oY5OJgdLQ3L41otjzeEiI936Q500LRiBFhNc91b9R99XMaYZzq4zT\nU8r9GzvP9ZEDubUCuznbRzKORVbL020m0hL5k5D+oz9fByDsydQeZ2/kLgZj\nVj3DLDRxm8T9LQo/FLcdepGV7nObDdzpO68sF+CJEvGP6yVfyuDmwVFxTvul\nGfeJf6D7msNi4UkQ4hK+kxtjka56ejgPUHm/hnFsx1c9aVP5aQGiRCFClh06\nF3JWTaUDJW2Qai/woDlIZqYcl4H9pH/TlECtuextRQJP0R/1jEpU4HK3ssam\nS47e9nGH5iaXoDRNjOKwRxlgeExHNZhTYwtn/T8mBMdVxEUEzyN+QrsYPlFq\nYXrk4+43WhK5aOSujxx3urG6XMAHf3yyZEa14i00l67+tHc3C4uvlNwv6AtL\nbYxdrSGxplE4J9Dmmlw30Dj08YL6Kujpbt/6uoxWGoooMu3exn/jLtVVrc1F\nC1TH\r\n=T+o1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICr5WOl+Dbplm0BP+sT56XIDpcF05/pmXe+nB08D+1I+AiBsdVAi5nR7r+6NWezrYaaWcICQsk4Mh99VmZBAOEDoIQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2115-beta_1524065075966_0.5120807730545887"},"_hasShrinkwrap":false},"4.8.2116-beta":{"name":"meetup-web-components","version":"4.8.2116-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a6c8cb7370a601228f54e77607cf7bc2a77ff5f3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2116-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sxDE9HCc0rrXgLbU+/QCeukkwpKkaNGkg3IkjSKsqLq0AiWlsQR477DUH8eKzszoNftAryoeKallPUd9rpjsmg==","shasum":"076a74e73d0cec5b54804ec8807bf0713392524a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2116-beta.tgz","fileCount":497,"unpackedSize":6253854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa14IuCRA9TVsSAnZWagAAUuoP+wbnckvIAqU5oZZnckrQ\n1ar9ogh8y3GK/5z19REjKPxx7+rbh0KCymL17cToeszwNjuBLhFUMdkrE+R7\nsGsWVg9y3K32rx2PG5nemnJqnMzVHyq1BhRxUr5VnRZm0abAZkvGq+poV7FG\n2TrDrSV3YnD6mdTjgio7ZUS4h1q8V2WFwANLgmdaUEytc3VDPQfeEXNYzrCt\nHHPctoVS5xhDx5V7hSy26UArIY0PGNnropDfk72bs9yIC51e9zF1UNqvLioQ\n+OFSGyL7sD7X6lGNd8SNZGq7gwY7PjSsAPSWFzpbBoruPIuoJ/lGb1yeWSPJ\nDE9cl1sQXA2u8HkTh3MsI5M+swYoOQ9ijjQCpC9w71hpWHcpv9FKxdIiyWFn\nwPpO3A5VkXta3YvrwCvnseTeqLK3xT9w54t8IxOCX9CXGOLbmOOSQe6cxTkJ\n4wRw9ku5AWFPTVwLYeW+pp3Wd5TldkUf4Gd257GkxOVoXbAhSF1xpis3v3JJ\noT8e2RSxBmk5vg7kcq9Cf8JFks9obpb2MYV7cx4Fpu3/B/pFs7vJzMnpn5Qt\notffh/W/+Qu4adGsYbYzYH3CQGfnjay2y6yMmz2bNd9JpAIXw5HbVvy18JMF\nPHhqnOJgqIud2Sc8gOin/yqjn1NXscHZ/nMm9OoSJW7odcZR6T2adVdgU7WV\n3fD7\r\n=SE+r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxZmTzoMwHZ2c9SO3K7ViTh89lalNHZ13zY+FCCE1x+wIhAOAIcBrPfGZllfZnnHMi/lZqQefAw8FftFGuqRfiyrWV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2116-beta_1524073006609_0.447498568433631"},"_hasShrinkwrap":false},"4.8.2117-beta":{"name":"meetup-web-components","version":"4.8.2117-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"@storybook/addon-actions":"false3.4.2","autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0299416a3e089b54791a41b08849fd7803e8415d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2117-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UIJz6BWb55JVf61PzqNMLzJQiJCttXwo850glb1soStRruQM/o+KOQdgRr9v83sIrjuxfucs1UwtL5HLH+QGgg==","shasum":"63a596d61c6fa20052cfda03ae1f086d2fcacc79","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2117-beta.tgz","fileCount":491,"unpackedSize":6256394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa15r+CRA9TVsSAnZWagAALhMP/itMhS+gg1xAvQLfkJfd\nId+3DHawEcFcyz6XX3MPinmBvIho3C80pEwrAipjP+ASFluUBkLBLB6IbZDF\nlAfdCPjNXKe3sjryqYkkhHpmcQ+sWFORwBGDe1zzYcUK/MGWO9MNKLlYt4Lr\nn5nr0NB6Ew4O1b5efY/s15YSpfLqixgdBH8Y3oVUwk6FMpjtY+1eMozOurKZ\n46qQ6I43YAa23ui+C2GENvhY87iMGuukIcX2GXIIq3ecHR9Sq03PuVIthO5S\noGeTuOknS0vfmcKHUQMWly6KR0ILBlnttig1n0aSH+nL9/2L+UI2zyNAEN6a\nUcweLRLT2VOn9Up7DSwxSIHBM6VkvJl78bIbKoyUpE2D7UBPgR3ha40fMg1Q\niK9WEYyPSRZAvCM8douqUsDmHsu+GKgcIgi5sDS5E9yE+8jKi3puiMRcvMA7\nZVZxaN1UwtshLmH+oL02MKczin8zU4mJaArjdURqJovG8+c8xB+qvf9x7dmG\nzYGsRsbM4y9s5a44Ea0kEC39cgHnn+KBg0kYfLhmzmkTWfGYW38aaj7n21aP\n87UOcxVzVSO8ZK+VodZY7G97pR1ymMYexcrCihQJ6U0fSSBMlWrim4xRaN4E\nxb6ov9faNRR8Q12XUrpLnUqGpYdX0DyMkqGFyeiEoP4va+OVQXY1DJ3P6Vw0\nJkAd\r\n=ua1i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFvVfkQOq5SY5pJ6uVOzT2kDpzXIbdfG7m+wvsyndFUaAiA/nPSIj8/APVn55JzSPmxv1q02Y7QNYGnkV059/XOsYA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2117-beta_1524079358257_0.5343609533982128"},"_hasShrinkwrap":false},"4.8.2118-beta":{"name":"meetup-web-components","version":"4.8.2118-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"@storybook/addon-actions":"false3.4.2","autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c32df48f393fe10cb786601195e691c90426f982","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2118-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mgQ3AxoWsJ8wDGSdb2r85lrzExB6Ry63H7kcY6OcKwj8qZXJAWIM9REsNwyvj0yWSTQ2Mu4D3oE0NGx95D98VA==","shasum":"fa6b7313f9ac56c52a09ecb328f274e9607ee12c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2118-beta.tgz","fileCount":491,"unpackedSize":6256799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa17znCRA9TVsSAnZWagAA9FcQAJJOqrqiW160ZFxAgT64\nbMRVccoWWCyb65LtFIPQYKVo4qTd8TX39rKsb7c5UjGEPDyJEq7kqHXDeyko\nZQDPKhQtRHaGcdHl+GHRB5jao4D2Jw9jP/0Ph22o8T4lD5c+8AUwX8ppTY3g\ntTj363Cb/hjTCC/XQT5EsL1A6UDic7pzQVlFDfynqEO31zHabnJmvpeAVHKM\nL6nTegdg6DUZ0mn1jBrc5DkC5Yd0xU+dy2VFycvblri8Crt+ClXDHYw06t9L\n6DBBUP/fld9sHNoyfbFYd7vJfP6dVxkNKFT7cX6vuE6j9WFHA1ORrsnkhG1q\nTGDDbRUOvuEnmkG/PprGT+5vYb5P3+ViXXxoKfKafjef+Elus0donCRQYj0b\nVkeWyVxsmjBksxrIuF0P5MzRY6i+XJA/ydZm2Gv2cRIYcZ9CnSeC40TWk55F\n3b6SiOMZMIZ5YyZEc0+YM4atzwyXm/3FJR1zNDtS6CRq35Y+9ckxeV4RQ7wm\n6glEQzW1+1UaEf1nqKGP9GaG9+ZgUvNJJcgdI9CtgC/hyhWGSMD9NGGwvdrh\nVH1NkQI4eTFzSPhOV6kwnPWe2UPhNgiF4zef0Ut2xmC0LOcDnmnUFQOkldfJ\nHmOnzIRQJSx2YoQPye59sDpPDQ9scdCDUtPzd3UizjrvexFdyp1p/TDv+xvF\nqw/i\r\n=W25R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJPvlFNLMXEzgTN7dQtIeHtGSBzavvROL+of23xRtJqAiEA3306plwdfsFqSsn8XVwgRe3+SYFjx3wxe5cV4Vw/pMk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2118-beta_1524088038879_0.7351587930544183"},"_hasShrinkwrap":false},"4.8.2119-beta":{"name":"meetup-web-components","version":"4.8.2119-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ce9f8475a3160f466e5a6160e72bc224c81df9cb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2119-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LCxcCMXzy+cNj1JBCzu+Bby64T+sSUC81tK86Mj+B09dgFfmskWnMUKw+G2buDBaWh4ZpafWWhaPzANdj+oFew==","shasum":"91a23f47ff900a5cafb97b1df89723f812c0b3de","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2119-beta.tgz","fileCount":491,"unpackedSize":6218582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa18L0CRA9TVsSAnZWagAAL3IP/1NYqQ4B5WQLZsRh5A7x\naiJaU7Z8y5Nym5g05U5uOT7APPT8iWW/sjfCSUknlJiJM5ixeYuaFosNpbGG\nk/r1T4P1RSzEe2vSyjwC/mI+Pv1PeMkmyz5W/sOwrE39LRZDPjt2+n+eRwAl\nianlvyClseDK746R92Xq/pDIjzDZ5740IUvi9p9t38ie0Rw5oHsG96bnavc7\nb247yGcssFQxsomwkGIFyZA6CUs7W4qYiXTKMzsygV1qZ2zuHsQ9yjjRPC45\nlpLnVHqz80JjwCWlobGBmCsRUXse6Z6fswwdUufV0iQDauWTEnOui4+Glbmr\nxRl3285uHJTj5i6pIGZ92aRpX0AapDIiW7F2+mTHX8A9wQZJ/+lrO/wtCxnR\nsSqoh5pWb4F/scurz8C5f03SMZWZjiY947ATRHCh+gZw/s+p+uBvRRTqXjI1\nxMUxmigQFZh5uv2wmb8OPFTuTeFy/iqzf0L8Q7R9aeWy/0V5L6923L1NlyEn\nQ1Uc1tEbkH0POk3ssrC4m8IN3gZ8gloTERExnxq5HRsp9WxVJZlHMlIrkIbB\nNpndgGhOO7MLpeI1IiGgIyo/rn8SkrMwItOIeAu58xg5YZZda1KhTbr3r+/+\nacW3HZw8iSMPvnJKJ/5PAGR2NuwCTyg2rVShb6RO2ayp4a/54i2yqsaga4LQ\nh4O9\r\n=Qe6j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBztN2xukwN60mmuckNOIgfaHqpEnNyvka75mEP7ceTBAiAmrKiyU4fs6o/Xhg8884Ommlw0MI4EC4lhRh64xPcyRQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2119-beta_1524089588577_0.3872292534043644"},"_hasShrinkwrap":false},"4.8.2120":{"name":"meetup-web-components","version":"4.8.2120","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f33dca7d3e059e7e514b11addb6b9a03bd81906d","_id":"meetup-web-components@4.8.2120","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nIp1R6V2OHyqmGRjYXvWWyMi2zW48gqH0Evt3ggYQo6etqQn3KKM4X/cQTb+YCQgRiVT7xnHN67V65U9cDCijA==","shasum":"acd2537aaa8343417e79c09d7c41c5d81ad9c7ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2120.tgz","fileCount":497,"unpackedSize":6253849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa18NNCRA9TVsSAnZWagAAFDkP/3yrZauVe+skwPEBEgfl\nQxRrQbrgAsxU6YtD9mXMGPMSFYgmaDa+O9SS0a9DB9sKBtCbNnTpYno4Wrim\nkFgkjGFezolTMaD5ykBonQ19ChDvcE7JNWXmj4wgmihyZvAlvcBsrwHHhkhH\nllRqzrLMmjwzS2o5tpHkvatJyvvLIFeu6xSPvGhuIsr10fw5cfm/u4rbZEBP\niQWG/ZUdSZhn8e6Av8DX1VLG5JjIJbZFhrIR6pDQGTjxC93Q8vhudf9Kd1D0\n078B6uHwFk6JOOjpOfevvpprewlIeEk6gMPQoYpaMUUNCFtHAxKRvOy4vlVz\nLijg5v9EPnmmncOSwj6uD5+jtAq7UcM63Oto9zmBTNU6pt4W1uovBUn+U6Gl\nrrtqstMCsQF1dPm4uyZBH7BTNMsryX29cVrJQx9tscieGpuWZQWWrDltLYOy\nIKmBBKAlaNP/ZHQmLaP3X/rTTCI5TVsaek4lQ7KoMX8dQYbEKEK2rQizY98a\nvFGJ/IhduOx+/ra+4EkXkJjC0c2V4fC2+zRnv5HlYf7e2L7v+iUH19Jtec2J\nfxjwVbrZT7yA/xhJ8nnuvcgK47k1mBS5j6uDoT8IVLtEsjIIV/IJyGVqaRVv\nS9X8WiyNE/i3+l6tvpKsg9GWhmzF5NhS1UBLZpTvkkquzGiOyBJxf8elczjz\n6X8R\r\n=lLup\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHm7Fl+QqiwW2Itmply3aOnekg5V7o9YBVGz/vv0STorAiEAsgUP4PY/ss19XwyiEXD0XSdCvmetD8EXL4m0jmKpqQs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2120_1524089676893_0.815955389448155"},"_hasShrinkwrap":false},"4.8.2121-beta":{"name":"meetup-web-components","version":"4.8.2121-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"687692253b647d7fe619d0e71d490d8e8e4fc4af","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2121-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-payqZju/11l5yELwkwUUVUz5QAcIQ5Xxd5PYjadKT3rUXhaR7iP7Sldpju1xvI4ORXubRgpgHfLihU7TOUTPBQ==","shasum":"49606354274df83b74f8e722e99387f4c292ff10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2121-beta.tgz","fileCount":502,"unpackedSize":6342764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2IH+CRA9TVsSAnZWagAAslIP/2nwLYTSHo8XEon5rLUj\nXNX1H9JdZiRurvDubgUXaF+P/iXutMPGahyMYLVfaqGG5H/uHunxuFj9hgUd\nIka41fAnQDSczuzr4S7hn03dUnbG11NRODaVh9wwG5pS/ILjiteojRDjSYVZ\nK1Yz2A5X3iKHz0V5dSaWDuWnxJm620FaQHdW5+1XdBbn4cT1AnWiEDCoSt4e\njbzFYm0uxrVCRiSk8scs9RBIJu4nUPZ1k2WNSUKxZNfdaMtVgezn7cjTjofS\nLE9oea6bc8/UKxq9XHcRlY5vttQu3OUJfaaYcY0CA/3M3KjUHwapc1uDKH81\nVSP2OSo6y26ZI9vXc1c9DpbyWcMGZikrNj8Gd4hXHIfcQuSg9vI2BTZPbHIe\nF4ZMHUH0tDJcMs3WoTeSJfdI3y8ndPPOZ9uD072vfrYoI26ib+yRe1ULYSKo\ncuQBcfl+XXiFRZd8kj6AYdwfYLB9ZYIauICg1HezY+EPEwTxGsf15X/ahCyC\ndFer9SrURDim9H26wduqNM0GbOCNBTTGys+qDXyJpo+RdOiIre59DiUqXjGH\nHuFZctcTwtkE4CljUt3xiQ8VfdcCMyDzhqpkvD2JwIxxrxWb0ywfPB2/fzy3\nh2sSXzCGkFcpj70b4JrT9S5jwspLpvExANKX0w+5WIIaNyrb2Qck0cK/I/bL\n2djE\r\n=WNjj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnrmisp54fMWHhf0/VBtkovkWRnOMRjp7JZQYRmcU7oQIgV/sBFQsZsvNHp1/5hzSoSTDYtoO1NzCKP52gXrczqgI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2121-beta_1524138494439_0.16568364568313587"},"_hasShrinkwrap":false},"4.8.2122":{"name":"meetup-web-components","version":"4.8.2122","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"5ddc55ce77894ab7d8007845448f9ab5951e9fb8","_id":"meetup-web-components@4.8.2122","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lT4T6g6PbtWpUrb+8VOjO/0RPcTdeP9bEJuloB8ZeKKp8xSB1qEJ0tJ9d0ebNi/joF1Dg66sC4eRCtYaIuQKzg==","shasum":"2f22421325ba19cabb0b168db62c0104666a0eda","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2122.tgz","fileCount":502,"unpackedSize":6342759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2IQ7CRA9TVsSAnZWagAAJPoQAIXgrys/m21w4/yYH5br\nhjlvt9+hqXcSo/gqXLrCN2EH+uFOoGRmJ+tVnlHgU95tmgPzi2VyUiNVtY0p\naJbYcakKpP5N7m3UPkfmOob6Yuc0OaqD8vaIAf7XI2a3taDQrs4b7frZ0E43\nqamGVapO1UpdEuuO+7SCZRqM7Y2fVKwxyTDmwBC3brMa9uRADXuZe8WK+lX/\nLM4XYIcQIcyY2Ypnoe6wV2S7DdewHga6T4n88wUs+oqNgs4CF6fnwgjqxyJ+\n1cVZsq2qsDFtEjQJS1vcPJHHBT+ZBzMTszMeGbyMfsPfKr3/i5ek5sG3g/V7\nYwZ3GaD0Jt9XY8dhf0XGMKo5qAfrGSWm46ZPLMjrt9Hi66YJ+H1KV056c+Sl\n17goyccvloqYXQ7ITh5CdfgwmdEHWa6tmwTJ8iu8R++pIlBHz3P3gJCGXKjT\nQi8Z8r5dozE8+VC6CiS3QIB2DOlAHafZR14kF4KejV6uMrLPvJ0Qcu/Vj6mc\nxUVoLFU52Yt+6nAw7ZaxD9uPqEr2lB3JUz74xF0WqEy06MdKohgZM16mCz6S\nwocm1SHfYpBOeepFoo/SKszdI/W29VLr6zxcpAk4rolG8Knx/iyIriw0f8Wg\nrvpeiyumwQW2+CpP9RBP5Oq/MjgqOX0dqIyEybvRB3mrylVpXu9hcA9zPfFv\nBNUh\r\n=I9vH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFOr4TyY+la24wGy4co7ii/Q0tfUwsB2pbsoYthxZCnqAiBFIdBP/VhF1vC8WHz9wbpRD151eP9tiCvkhBZ+VU/x5g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2122_1524139067460_0.7221307264545258"},"_hasShrinkwrap":false},"4.8.2123-beta":{"name":"meetup-web-components","version":"4.8.2123-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"77cc76f672f675a3a76b8780081511a67bfd3bd4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2123-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9SieTJHjRZnLlQ0NhS8bBWlCWHF9oIaKSAifYIx2aQm1xkMAixn0bDB5uCbB520/03QBws8bEBzPsvHuZCjUUw==","shasum":"8148069b1db201bd94cca838379b92d276931f18","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2123-beta.tgz","fileCount":502,"unpackedSize":6406675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2ckGCRA9TVsSAnZWagAAQ4gQAKTPBDhwrxEAwaILbrGA\nbqJ5VE9wgVwRCCdT7AWpKpUERBPKtbN4fn6v/C/D/MdeHkMHc9NOJl/4dyIX\n3IvEcoDsCic4QnhqgZo3RkHxKoggtt+1S0Ko92PhDRi0e7LF4KGCxQDMQPJR\n/wX3M3GKYAE2gbYsGb7MBM4Co6IFvfPINPEWfLSO5Bjdbhk2kLPYLsbh7ywP\nIv7p9LWBR0/O5JF04A0WnlHvytIu5k1SoSZPvXRhLVZ/VcyJv6aHX3vZsRd/\n/VIifAwVaz1fS3udEdBCSaVfoqs/yyVB4yhzzBXT+fD+Txqzdn7cxsx1GcOJ\nn5KKeOsQ6NM/4p5Tu/pD43CcbTtrg8VP6CpEVs5IZ++Whk97PA9pClg1grwN\njQsxZ/FZv5hmTuvma7vAA9TAHMFX+nehfd9v0E6RNsRm1/iP0gVMG1A0qHUd\nB/+YeHZKLMjnl7PZ8z/mR0d1chM4Gwtf3eOkYv5gm70Ft+VKc3s6NlDhZtG+\nIfudbti52msMUPFrKobQMifjoXW+n68nZxaofzBm64tjlgORD044WdRESRyT\nN2Rsf09LrS0daipW5GEYzM/Ii/feeDe/4SMTP5ibxl4mUMegS5Ku/Z1KD5t+\nZf4bQHGD8xGgSQ+fqeFB7HCYE6dmX+WOwhIPqiRjnOUOw5Yle4RPGMZlOHXg\nYA3X\r\n=U+DT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbO9Zj9q5eWg7BxEWX5ZAZg0z4LgtRJwqduUtYDznsgAIgAxof56nqO2zz1kopRb263ycpY8XcA8p9efcUPUHocK4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2123-beta_1524222213995_0.4812436915411009"},"_hasShrinkwrap":false},"4.8.2124":{"name":"meetup-web-components","version":"4.8.2124","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7e00f62726c584f7af56c7796c666a184ab56ba9","_id":"meetup-web-components@4.8.2124","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-w6FNKBc/fmAhXFAQ/dhbu4/J8195t4xhThYqK7LPdrk2E4JTskZb+b5pi+lNXr5snrflGmrlD69X5zLMvYu3yA==","shasum":"0c7346e0cfca09aa9ce5bd2ec8b8106d39972552","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2124.tgz","fileCount":502,"unpackedSize":6406670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2cuuCRA9TVsSAnZWagAAGrgP/it4qx+QvnbpMDaYDCU0\nodLOEacGM50Dooplkn9fzvzc1T21RhrwaX0pO+j151Imlsy9vKZmKBePfwaN\nDveXxUXB1vHSMx9qdXxZPyv0UeWPCpMBsX1cGfxjt3fVFu5hmaCmQNtrwX7K\nXnVo3yx93wUm3YPQKWh3H7dPgz5RudUFOELxXpbePQfwQXkLZiKcwsgzq5Tc\nv8j8I3qNueuT5t7aR/3wUWVxuX7E040fkzIvan/OrurxtnETz9KIMZv1ZwBo\nnozuWHRpSgaym7QRvyB9qr005DZUMI25zaB6o794DscazTaaJ/5Xbir7vYeb\nmH61BdVCMmjIECDKrkHGRM2gxJmVL767seK/VU9NTwrFe1UY2Uz/LzisYw5H\nkwCUO3qpQFjsbGqQlLdxhFDf8khWS+iiTeG0RHdO6OMKnh6MgCqR5SGD59F/\nbIr9YEoUCxz9PyAqRJRt7q4ZF2hyQX0cBrjMElcSj6dBYoVGgrppExQmN64u\nBXZMEfh5CyF8XCcs5Cs3Xvuw2D3YWdwAymm5ns79dGm4ZsvUH8NG3vljM6MY\nu7c5rFl8By4qwC0kObOHG0qB0S0rBU/88wFyYzf7xLXZ6w1MxRySIdBI9CTh\nNTJilz/A+RF4A/ymkuOyDK/bQFIBPbUwxA7Y0jdD3VUjkyUBpOt9xyaGp11I\nKe+S\r\n=4j2i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEojgjydkjTtqbVuk+7MZkosKp4+3ydblRf/ec9+FQxvAiBcPPcOu4v18QnkHZ743BozdWe0Scp4nIPpTYrliznMkw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2124_1524222893693_0.39470661235911764"},"_hasShrinkwrap":false},"4.8.2125-beta":{"name":"meetup-web-components","version":"4.8.2125-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"de7606e8f28a24289674d5dbf8639f9283860989","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2125-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EpN+qDOGfe6HYtn1MCrde9m/KCnwntQI1eIPetVF7P5y0xdVOMwBngoD6fD5IxpEM3+3YGXWccD4vIrctHzzwQ==","shasum":"9ab082101be5ef5705d665572ef9f2b5923d1c8e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2125-beta.tgz","fileCount":502,"unpackedSize":6407712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2lWgCRA9TVsSAnZWagAAPV4P+gJH+gKsJ3EXqRxncrkz\nmFhEDqTjxN9ez6tJqmNhNXRgYEVxVK2zCp96lDJHmPRPTHI7MWmfTnSFLhtV\n645B2VShibQBPun+D4HR3Gh6L6tzR+X7Ry5v5D0iE7FGpvPjdfunnTrSgWj9\n0n7+S3zBeHzZMEseymi7TQgB9OTruFN2Z955YLBqu6VFOcCPFLSVP4VdzJBg\nDkweK3+2fFAf3vzQkhkViMEpJC9p4y1hKjEkA3Np23XidexFv+tQHziMFCge\nQn2keue6trF6RFGqa/Rl0Xs8JnCzjLzoFMNp6mJk9FJppPsVfHnyUV6YhVAP\nq0yfHB2yS+1Jmxupe9w0PHTDKz2IYJcwLBVQbFkY6OBXQKqQ4cqsGB76ho8x\nIsRCJlkRfVQG7lYDrfbtaCoErSyV/VJoDA5H69b5kR7BH6TMxZdamjiSblgp\nnhR/waNDwxupQrd2bhJFonRJeKtzecxSCdm8fMAwSD8PuBm2rkFuUp/g+F8Y\nCeYpW2V58zyzzu+0akquK5NYY+jCcMbly+IqPtOwB6c87K5ceG++2garMw+p\nP9/M1GCINWUayJIeWIyYa5kqCctYuzCXDuYMRS9PutSAhyNz/+zcRj1yb/L/\nSae1O0xrUfzqRiIUTvV/SbVE+rfMyhda7xgMm0LoGror9YqGRUAe1hnoMDzP\nNUwi\r\n=jJ3M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC89KJ88ntitiE91EmzQOUOKwVVUm/e+PWULMFpAvtgyAiEAmeVUGlW9ykU/7Ng23lFOEYlZrjqcLxlQ8sgnjwF75bQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2125-beta_1524258207740_0.35317627064752144"},"_hasShrinkwrap":false},"4.8.2126":{"name":"meetup-web-components","version":"4.8.2126","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9dcd4d9c100d610443686a54304c72eec660c7e9","_id":"meetup-web-components@4.8.2126","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cunnXeBspmHuhgL3FZKAEpZ83P0mUvnsUTif5JdoHujuIWi5I21Ar7o/zMF+WUJg2onOTzwAg2Xe7j1ahPoyFw==","shasum":"b95d3ee23ea235ea371d20b9d9518c17ac658e52","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2126.tgz","fileCount":502,"unpackedSize":6407707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2lf4CRA9TVsSAnZWagAADtUQAJ9W2LdiL5HLZ00/fU5N\n0HbfGnBP923lMKy0daRggZeSZowA5kY26pCwns+fJ9BIq6RY4hWoYEeQfnaj\nVFW/oFYKqTFJwIqAb+vdlkpAlezqJ5h9xHeOOUToH33v+JVuBB1JROaVkGSp\nXkgIHyEYb2DOlXN6kmg/bqoLr1Qyg882J3UBKuhOEn+hf6P8qYApMga4TSXt\n1vDdOg7D2CuwldJHJDFZzwQAa6SNo3e8b6hl1CCKF22livyKt00WNl6aoKb4\nDvmI7NIZwuJzMMejPBNO0pF1AHEKkzmWlinmu9mbLEiRuuJ+yjE98D1xVSOj\nPGkZrl6UzOY5uHD4GmPG3aEJ4oz+TiGrSFcISQBPZvCq8bdZBoyI2HiIFvTi\nQJpL5mXaWVTZpHeLd9ozPoS6wHsDy0UAaUtp8y7he2SlrH36hkgab5Ac7Go5\nNXahIx0WT2VbvaF+5BeOAxN5MpdOqdX7nMuo1RycKEm98baazk5cXN4w4G6Y\nh3CeOYdj5aaQSxpeYEMdSVtLkUvRyZ5Lt2klDnSMfQ+ZPqQ5eCPgieMlFvn0\n9gSK1z8p/ZbRBzsXJY5UnmmArkT5EOFFONNXL0K+HX/4iREGrVpe9+ivwebO\nr/dusegzo6etPpBTbpl9dwoux8QoLxcwrkdQ5qbAvJBNzCPhsCJ/LtIvKRdU\n8THo\r\n=jAej\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICe0MM+gv0AJGuEZUh2l30MRKowQOICBbOfvCiIWTNwfAiBA2sXofEFeRd5WhF9kmb8/Hdyrk9i36Z8pDG+53Hm4nw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2126_1524258808536_0.26412567645010476"},"_hasShrinkwrap":false},"4.8.2127":{"name":"meetup-web-components","version":"4.8.2127","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.2.16","@storybook/addon-knobs":"3.2.16","@storybook/addon-notes":"3.2.16","@storybook/addons":"3.2.16","@storybook/react":"3.2.13","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"32a741e07b4b472f3777e9a597804d08b891f841","_id":"meetup-web-components@4.8.2127","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-U4jzuGcoFxAbc1CMAwYvi01hSVGapA7pwNFZO1WNEu8HxlB2F1gqvEJW9cDMXaSeZQpQDy0PF71uyTslZzCPyw==","shasum":"1ac0b7134695ef08692425c2f6dd1c35f3cc4327","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2127.tgz","fileCount":502,"unpackedSize":6407709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2l4KCRA9TVsSAnZWagAA5a8P/RGZTbC6a3p1IZEGSgIf\nYufWO0Fr8INTIroYK3jJmj6jcEz3NdbJCG82O0QArznD3zeyHJCh7qSBoUWe\nWkSoklYmgxE3EqzOY+e0ZMDzZAxtgCgqIKJslLc2iiyFg8lHRYvA9ITA74mW\nTycIJYWax1nos3/f31TohRM+NwHmHmuIoTEyUaT1Fr2KOkAMCh1a3nL4/2tD\nbwo43xDak2eht453lXtLt6bIhyBObeimtwhn+/E6p2nNOqZAxAaRqoDw9GTQ\n5N8/h6NdS6sHYMZFtIEsY8nFbNHRWoJvN+K+RAym2a7YZvystKC4n3LjlYf4\nKeQrO89kT7MXp1YxXTk52K8ClKAXUfkBLK9rj8PJ5aRxPlnCcJbZhDvgE77z\nd23QZk146dlS9Go7Lo6JhWSyDlBpd8HjK0F+KPoTWgLHJo+IFe82reN0BFQo\nhEKySOUztBicx+OUZeSt7PXkz8dWiY0Iy4jrQuv/gYFbpQuOh5Y6ETC0Gc97\nKw20DKKgD7tMgdlUnA5AP9Td7jDlD3aCEUs2nc0l25ryZu4GZy2m4D7ZXn7T\nJCTe/Eec2LsEq5874AwtH9G+fvJe+WP+ytinU63MHUtu4xtH58ZaWsVCpLGC\nlWaPDAS8daShRys+uZY7gqYf+ewDvMVmnvJ8qCz/cnXb/0CrZAdghAXYLatL\nnc/O\r\n=cj74\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG9XgtgoXmdT7HaXM66J4eT1IcuKNOAxaSpoVZdKoL8wIhANxJzBw7pZsRP5laBPf3+lHUiT4FrwM72ZKrVR+loVvs"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2127_1524260361723_0.07848663533036215"},"_hasShrinkwrap":false},"4.8.2128":{"name":"meetup-web-components","version":"4.8.2128","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"657a97e73490071f25bfdaa6cbc449886d3f71f4","_id":"meetup-web-components@4.8.2128","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-h7UyatrjQ297hf1EvvI6J/BOW4Yqoc1/Un8bWkuxwsbuwSnaJUPTfGxckOS7+FjnHIj+tw4O5f+LXIvVT1pNWQ==","shasum":"500cbaa2a58411d9a6cee3a36b0240bd16b19c6c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2128.tgz","fileCount":502,"unpackedSize":6327709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2l/mCRA9TVsSAnZWagAA2UIP/08dxCnnXgSyhG/jKruz\nsJxmo4KHMUHDKryqizhUF6Vy+qRKJMH/33pi66tWxqRp27+bUSd9IFvFVduZ\nv+ryRK15lVWcXFeC4ITEJkmPe7r7qkMaZaWy3HORIrR+yO7/0bhfS24CnZNw\no2sGw3yzc2jlmO157/0nYdJ733pn8gVeUPzxuTBnARxr6/YRUrtcSF5eDEcP\npijybZNKlT7p5s7u5yewVT1WQu+M9wAWrORUoHQp7ZnMP4c17S31aKpJAK/f\ndtB2p90BhxwwB1LdwLYbM44bD608RFtpCbm1Q05KhQinWSq23L2S9ktlHWCr\nG7iBF8IpPbCdJpgI/yM+4+Wo4jIxpmA2NnmoM7jZ2SVQkS2Enp+UzsYSkBmR\nk5MfiR1bRAllpg5RprI/LeXvJ53QJ0p89RG4zUopVRtv8vob2M00znIfALGm\ntmyzmm/XZf/Vva+XsVNYfPS9xttj1O/ycdKCw/BSTYBSY4qLwSZaGtC+ZrX2\nAi3WO9XpEZ/kME38Es3AG9tTeNOlCthJwlbT6Eay/zQoGeFjqSfB3j6MIn6S\njLL0mi6GqkGfJEloLT0dPYl9j/59f4OmJ55yYvBq6QzSvSLjCuVh3EH1HW6X\n60XD1sZqPm0KZmcpiv87PEOJSsVpFXRuBy3GerkkOzA2lsKn8II7CXVzXTWB\n2VDc\r\n=bKWE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFP3IIAS1pOniFVG4JnXucJEAct6iZ0G/Xjv0Qx9ExfPAiBgXWf3iheYPwZiAdQvzcujYmAjTW0NGUN0zlppHL60mA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2128_1524260838460_0.08292857238694551"},"_hasShrinkwrap":false},"4.8.2129-beta":{"name":"meetup-web-components","version":"4.8.2129-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2cba6dbb379919eaeb61d6df1b1e3c79ab392582","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2129-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FeYDj04b4Dx92gujPOW+fCquTmkOkU+2HD44807V98bBRaRYcAyldA9L6eb25DWWoKtjfpyNeA5ptvlmo3GEgg==","shasum":"8588511b246a115e8256696039f1c34253c93dc5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2129-beta.tgz","fileCount":502,"unpackedSize":6328616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3g7CCRA9TVsSAnZWagAAP1EP/iihwbDymS3w8U+R3VUg\nJUJogVKjBuQfMjwRzSkbRMfIZaV65jdzdXA00VSuLNze572Z0Ygz9SqFc82v\nupN/nUkPdRNbEaMLDUA8jKUlJqi6VdeHK9tTqxVu3v9+8xtXMBq2TjML4f9A\nPXClqxe6q+yA14QZP4Sj45fiemDRFnKwGQsfV+s+yt9Rp3RdrrwIuHSPfomj\nbcNRIvgEwxhHOmzetzqYbKx6mHNiKRxwz8a6N+0+7tyC0cKq0e0JpARPWTyb\n9HQTPKDn6HviJdi3y13asjxfKhHu17e9yn15q6KNjw5/fFsE/uoQuPjULnbx\nQ9IzxPe/h7fm8QSbWt+QTjx1WVuen3VtQxQZY3fTPXz7Xo2AdXNdLcQL6ujO\nk19VgUR3rk4jfdOj37L5VwqaaiE3gwQfWp634S7ppaeDGafGl4OYB/Jd7NWj\nWMDOHevvfa6OR/Tae9MYT6w5Hrd6Z8xqP8epDtU4JXExSYAVjXdIn+6PrW+S\nFQv9CPFoNwcNNG5bOXGoX+Z1hBy1yarv+R8zaCswmH0hdqIx2iCT0oSxcobE\n/CsLJqk6CNgtaFK9hSRID5MR2N444L13Vn4HMm/69L2C6IXNr/cpNKD715hb\nlfuT9TEUaJgZFIb8+HMfveltkoH/JF6jcygbsUMV6pxViZ14Ksq80bFEqTho\nht6s\r\n=L/KP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2QGkBv1diNgvwNCihSxu8+IQVzBIYj7ct8mm9h+TJOwIgWcc0wh1CTaBpoORXPPYKqzMs9clP8G4LUZe7jdL02ys="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2129-beta_1524502209529_0.09985601081899809"},"_hasShrinkwrap":false},"4.8.2130-beta":{"name":"meetup-web-components","version":"4.8.2130-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9e2e872ee5fdfc425c874c09ce8571eb17aec0da","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2130-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+0Y+JNwE03hKDQvySsRdu0Rbe6Z+l/dLOBvEWUzidS2aeYmuNcoYljXFCFEDvSNYbPDrko6fylgWYe6eHl1ROw==","shasum":"2e8ae016ebffa0cf5b7f23defbc09cee60ffaedd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2130-beta.tgz","fileCount":502,"unpackedSize":6339109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3la9CRA9TVsSAnZWagAA3yIP/R1dqrwnTSpFteUNjd3j\nRkGazBAX5KO38WM9BjQ2tj6JFWmOhAAjzaQZl4cXCcmeYg+shu3W0JtAC6/W\nUodK+9+zdsvInJ81WcHCffDkHoPPpOKYuK+He5quyULYHS2D9CWUyH8dSwok\nC/58yOa5hAFqBIBuUKaQgBFE1z/adEzHXdhPazzOdiTjRfo0pUGsIk7+Cr6V\nCyvbJUavFzNv+cmcABNprlaQpRGvvVA1g305Gy0QI+i1OEJ+tsaWdLVvDeFD\nf8r/38a5D8ffeXmCf9xBNvqCSYjbgq7rY99/tmF45p1DXJm8lnuSLAsao9yk\n+hdXc62xg5qO4DUgLPPsAXcIbEeAlLPPpD4vpCjcF/+Okgnsfwx2N2uCGUKJ\nfS3ptVI+h7HrHYjfgOCa5tOFuzrzE5hgzKOi+guJcWNLEuHdBrMYLYlUgazx\nG87Ou8Q2MXJovGXRkJ84H3q5iewviVd/Y5vWw9D1Vnj+zvcshDzTSP/SwB2m\nXV/wHSqvp4eo/oy+3CQn3b3CSnOW2zEfpD0rlTG8ASjY+ZEranS4n77YRqab\nuEAhKKNn57m4nYxNx3YYtv/xGtjou+MnnvgKvK0NoFesCEZztBUFy2IIPxrJ\nAdIdBs/tRAZSLe5BJXR/+tJPoQaZZSa6fATQ15OqfZG1DEuFB6B1vkH7bms+\nHHZD\r\n=vN7h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+YPIeOyIuLWcpfirh6pEGG6/d09n2Z/Y+2fDRj+ne/AiAsqWcDg64CowUgu8zaW8KX/J9L6TBIwd+UqDtIA0smRQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2130-beta_1524520636806_0.4178263904618229"},"_hasShrinkwrap":false},"4.8.2131-beta":{"name":"meetup-web-components","version":"4.8.2131-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fc6ba588ee3a2d6fccdc3ee8e671f61ef2a2b445","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2131-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-y9WF2MYtNSjmSAXWFs7/oT+bLk3/wdWD7M/rXFCBGOWOYIe9lUQ3YiG3JlP3JMLJ+lLUgOmCy9MnNnhZt2O2fg==","shasum":"a7ded535e1d9ede6bb77b70d2357dd7585b46b53","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2131-beta.tgz","fileCount":502,"unpackedSize":6339007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3leUCRA9TVsSAnZWagAAO4UP+QCcZW/V9uUQRsvKmLHp\nFjSwLGfJ8D9N/Ll1kXoWCU+V7Kn5jgnw9rkUjgVxnecd5VviaUCl6uIHUHuI\nfiNLKb7fcfdjyFnqut7+nh0de3wFlpH01i1ip8KIOFjFdfS3eI8Q4qzLYGie\nRGblrDMiqkdOqXTdH6G0OrMe4+3G4ENlUx8juvtlZe6wJnM21jyESHZ9J3Gl\nCZen0b6Umfs5dtDrWRfrezr8ZrPF3MiwbXQSFx3l/yQw3jbOHYkiBIUkrZ7U\nfznbOnlDziXgy1xt59lLuZD6t3sO4KkbvMMsZFgepeSjnKWklnsAqUDGDb+t\ntUex2NgqkjNt4MVQjNyBOPEIDsEY0rgUqPGUPMRXk45ADLqtOF1CcQ3W/MsJ\nws+HAZF7TYWkTuI5rO7OdeRkYPgFUU+hw9bcvnyzySq4fqly2/932d1iU9/z\nrl5r5X3YWUBnOQHAoxydKNzdygt7HwVbUNq+frdyiy0/MK3+jiQ6MUDERD6I\ncqWT4fhsyR4GAdb4QqrwVHqCAJy82+ekjruAruWJq2TeL1GSGY+8CyBU1r32\nO84+T2w12wA821Co2keTypX0gXX62lBfeVrnbC6SRi7qo//PtlkuZSbZ1iI5\nydrMV6oe/0gTaViSmy27nwk6t27iD8Q8ftCdoHb50DSzCZCyYYHzjhmyPFyc\nY5K3\r\n=cVkb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/O/5snLpU/2GnKTRHsrIAEnV/pPQPyRp+4YbVe4RDoQIgYbAVax/6ebLULXUbetPl1wufUt/4dofZ4l8iQ825ey8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2131-beta_1524520852201_0.9410785994219284"},"_hasShrinkwrap":false},"4.8.2132":{"name":"meetup-web-components","version":"4.8.2132","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"abc34db03219a92b8f3bf6ae9712413304663da3","_id":"meetup-web-components@4.8.2132","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iOVsFeHjThjg+MeFwvIfBNm79w8kyeqeiSoY1YcLf3ADX6avX/CHR5l0UJInMT7X/BppPP2MYklM9U52JlUDgg==","shasum":"3c90fce7c69a584bc85eaa6d6cd1219075232b3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2132.tgz","fileCount":502,"unpackedSize":6328611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3lh4CRA9TVsSAnZWagAA44sP/A756xZK6nH5X9PgMQ2J\nogyq0kQaHTptwXAfI2HcE9CCuIY/GpWC9nQOxuGVUtplDKjTdCd0fh4t5x0j\n1ZYYVnimDDMPUz07tjz+/4+hz+tR+hrB986M+ejyfQcqyeIbW03SykWuZrXz\nfGhoKp4ep16UBUq3/WLeRq3dqx61iRlnqnpUQplKMtwtfGRWkkylsr4CcUu/\nePFg9zxRDe/D8ypuiHZHRL2vPcu0OTHa6ujEwEM7OrGpsw2r7bMi3gdEdi3U\nTmip9tJff/WxULCvk9pE3b4kx2Q90e2fCldoUxUPWQtQ3pY7Oq8KXgK75cv3\nbJh0d01zz7aLa6swI5koFhAbSv6JAcdEaBJmjpOeZVDIa34ynOfOvYMkCU8z\nzdfUgdzQE/4vddOpOaGJ2K39zf8YofuUUxpWw/T58kqGQ1JMpm+PmrZkqxX5\n5rXl4mAsg76o4abhjGtemBW5YG4NEsBNhYkrFtfRJR4Dl5MYFu5tzrJfPt+1\nNsaVURndZxLZihk4vpzfgz4utL6If8H9cHXzcgWiKit+wGrLiA+UdPhnI1jS\npZ0wFo5ZLkZGW2MVbKoyRgT8E0gRwTpVSNhMMMiJMn6ZhOsCs3K9WKffNFi7\nN5Sfzq5YPmdzdbWxxFkHE2Odc9Z6ds/xhVODIDSNSmkHajLR5t/I0BzUDZvp\nOeRW\r\n=Z/pE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFDv2TqbLkFNWZ5UlC/ne3o2AlohyAXL+CDQPOZl23QdAiEAkt4GE8hJh2Wijce2L/VEYBcviMNo1D7NhF7ITYTx0sE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2132_1524521079822_0.5729409021787746"},"_hasShrinkwrap":false},"4.8.2133-beta":{"name":"meetup-web-components","version":"4.8.2133-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ef987e6114921627b612a889f2dbafc287d02820","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2133-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Gow13fm1r/hZCF6f3fQJqkylm2m+009gWpwDeE6ivuudOMgpTGGyVmK4YhbN1+279mbF4BjyXuz3uQxLADgXOQ==","shasum":"1a64a4cf1326328067780a865b553b5abf2f1a46","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2133-beta.tgz","fileCount":502,"unpackedSize":6330157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa33jbCRA9TVsSAnZWagAAfhEP/1eCoSVI+NWERjvNqBtm\n8I19RPV14dfiDdSudQUMRKGJXoQj1WxwbMiV0z394Afr1hN2Yp8z/FumhC9C\n7CBTip5jBn1GkmmTHxdIzGEPoCbVYPT23YwVZKllP1SH1tcQAGWO0b+URlLu\nZhotosCUKTjJEiT8kvjgEhn0vYdcNfLBg4Rob4QhVC4t/jK+bNdIV+3PCgyv\n56DPKedurHl9BvYmEvZeZI8jIi2eVyYzRrB66KwzIOBDaW3y60vKzfw35hpq\nem/Jy3gHJuh6RLVtVWPI1SYVLmYDA1yjwtW2g0UI0epn6veGjlIaD3WNyCcT\nM6xF/P2YTvyaDwDW0VKpPKm4O3wzejqfwZwUnDOMt7gBnXJaTDXpziPGe0CM\nSXTCEkAg4BlDQMrc//ub/7v6KdaY1LgZPgzvJt1s8d0MXSGmIcmpOlfoLjqT\nBTBXQc5bLHKEo0/s2rP6eJ/NWvME6WjQM1p0PLKHJ3Xs9xAnVrge7PJynVWN\n8uS4k0w24xpzP81ech2IzjoCPv77/cea5++E9H6/aUBESS0C9QMmyA1rjV6i\n7+sSLiv3gXv5r0g0WbwpWgyge2xYW2VQrv6tK1CF/abmeqOzPngUqZk9ZCIA\n5rDcvgvcOLJcET2QdPjb18ADRBeqPLsBnc8NISW9PvxG2Q+bRQO22dcdUST4\nKwt5\r\n=Xgmd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNAwheC6BSDK1N2v8GEkA+pEC93FQmJaUO4ejbmtM1FwIhAKBo9EzOaXoAoOT6h/5sLE3/lp2KQhlhvXh/20XzswJ4"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2133-beta_1524594907330_0.3097559188102952"},"_hasShrinkwrap":false},"4.8.2134-beta":{"name":"meetup-web-components","version":"4.8.2134-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bef7f9e3621a9d5c8b0198c069822337fe4bbd48","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2134-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-HoO6UqVQnb9A6v2/YDhgDr/nX7rhfklZX1d/imHgyAdWBAdG/Pl8oQCBBdh1PLOEEW1b+R3rACHigE69oA3o5g==","shasum":"687f4c48b03122c191e52440c6647571b4cf1c46","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2134-beta.tgz","fileCount":507,"unpackedSize":6348565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa34smCRA9TVsSAnZWagAAO4AP+wTSk6KHF5BGmO1YG+hD\nyPgDOPYrl2fkVnEu/oIDTqdNb9f5S4WbYI44aruz6l14gkRpLMSDFwbswlTv\nrh3OCsmES5aN9BM6B18jwboA9/5SUemr2oR0EYRTROnvbU3fMG7ORhOvyyIJ\nrAnNStyF2ekPn3dYvmXmb/pJ4kJEb0yLKSD8RnvGPUQcBPNPJmfqd14k6G5K\nt5iuizt3IAuroowXUgWj7RJsqYcW78B9601W77w5BQQll1KwcHu262dWVT1E\nhDzGgQGuph6sZqyYiL0VEIM/MMDIAcS5cDFOBfTtsPgs0sJL/vsuCs01eqxd\n0efCl9nni/2TsL80zgT9vKqJeQBrsQgJsbGgiGK2fVk0XL6MgVB0My2T9NZg\ninobShGLbwTKl90ZXDe2rrQ1FoVSJb7EfUdIfm/tau1sMczjuHWykouUD+eh\nd9zSvAK8zMBSm0wOLilQ3Zb3A8tdaLXYVOPvaiEcjSwT9aCuMCjThRTWupd5\nZ9SWUNd1oEpGB0SVgrCoC55qik/TS9hwvnpG68ancue2x9DVIlzN49348XgP\nuA7Nd91m0NKT+nyILNhRs5HAhhrAZLWhAXPKSYxIb6RZh+mTszY9CzMciBXX\n7ftcJFMc5xnJ/S7+57owNI74dWJTHPGDl7wKRDOWyD/BmJ7qQV2Qb95sIB/v\nE5mj\r\n=qurL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlZfyultANvK5GLfqv8JiNbvqIPAhIytmPusciSSCVyAiEAn+UeXOlwUoLVqCynGe5EiTqs9I+Vz0/8Vc8yJbf3h3E="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2134-beta_1524599590539_0.10791233194890526"},"_hasShrinkwrap":false},"4.8.2135-beta":{"name":"meetup-web-components","version":"4.8.2135-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"df3b43a88215581ff55f5af2e9d10d1dde33eee5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2135-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IzHdaAMoCERb5gu+UM5I81z6ozN1Uu3+7Jfvz2zE6pa2Pegw4knhunSk44sK3QB1iW6Cbh9D8JlY/pxLF8+K6g==","shasum":"ed7bc13a1264e0c0170608ff768984ea79523745","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2135-beta.tgz","fileCount":507,"unpackedSize":6339416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa35zoCRA9TVsSAnZWagAAeA8P/iEXfOISItmQcJ+uE0ys\ndFWIBmpHTNB9GqbASAAOit6gXbE3hI4YhZyyxd+P8KKLb0XMlobltwv1BOqI\njQ+hstgByQlgZYuKgwS+r7/NS0yZqxxbbuyE2tyxqIgjZL9MtXHc7qxrhUgp\nF8xKZTGO7V6X4k+8xs6GUUJXDZwpVC+MWpa0FBgewx+r6Vl/qFhm7aY+jzJY\n5UCuwcoP10Z5rQeT40fER5z/JHWEwQT8CpMKSugtKUgkDEhFnoe5G4P5fBop\nSrB5idlh84MDGVX7S1BZ2oh+kfBeiWTKIsGF3vY+G4qElZeEd7ajQDF0LjBX\nOvn7rqZ2nxRsMRlBA5VRTUc+2J/a0OqfTOCj1GrwtEFgWfYfKtzlLZUFOqA0\nd8AiEvsQSQHNoGCxBtfOcRGWG8oOfpQfEFjss8pQdcC10A9tipbzK5QQ8K+2\naRVUoiM0/O435nzGoPfMJuOoUiQQsN07paDgfho3nGso1kmbH4BcXLJoZXOK\n28j+n+9kDYGYsakE6qxjoIKzRHTb986kj1IXCO7SBYhr6ok7EmFxYtdrIndj\n440WTHCm9VxAkSOntB2aOSZl5stmQ2aWDgS9kCwrH+uDHyvtqHPhA+Be9RwH\ncqo/EocleR92ixJr9Gge4ttl1BUCHRUprvxKu+wK2Z0VINZtcHkXaokLrVyX\n9HS0\r\n=sxbP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7WYeGbFn0r/4VNEGtCldk/OmFU62lzGRKieuPbMhArgIgPYfRT/Ob4JWJ1u4noErpftJdms1o/9skZCltI3BdRYk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2135-beta_1524604135857_0.9284519120936299"},"_hasShrinkwrap":false},"4.8.2136-beta":{"name":"meetup-web-components","version":"4.8.2136-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e58d482f25ab6979aa2288c3f623ff2a5953bbf6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2136-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+8rakeJPDEca3aMbDrojjV6PNMdMawPP6ATh0SJuSTbpWiMSo008GkK3Sk+0sT1mtNnJe2+Rhj7pqo7yyfU5AQ==","shasum":"31035c1d22654060488e9bab4288429e5d3d15ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2136-beta.tgz","fileCount":502,"unpackedSize":6319467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa355lCRA9TVsSAnZWagAASUsP/jSHFIkF2lN56iW0Vc3+\nJoWqasf9AKY5hEOhH1ww8f93JodNKw+yWpcVUKog9CAQswxSVx9mdNmCQmH4\nfFXlvZcDtZYyf8sb3wpwEd+DvWkEY1Eeo7sllgqdZjAllPS/nMx+qy6yj5iB\nJn22k7XCeFpibBTPaawIlZzRcLEGfnVZfddGWlzFQaG6OMaIzBbchbOPE/Ys\nN36fgyIEBGiDj/smS1yMQSl2v7Y9Agh+wLNt2jP7xG3ApZ5TqBHpDI/8wGYI\nxQGXVdPtNoRh6tjevIj8cv+OoVcXiPUcb6XqFzBM4QTI0n000ajiMd/QqABQ\nk810JDaUykywbPKj3jKh46jFd3pZHxnlMzJRcLOhji+5pJhnmJCVYnLGMj/R\n9munBilkV7uAyaMoGLVimehvmFlu/8xB/dgCadxmj9Dt7d57IfVI85dhvYUz\n54s8EvTZY6FRfaUZ4B02P8L0VqWS1m7PatOP/axoBODncVKPi8VDPvCrqI7g\nADPr7V6/aoR/xOzHk211AjXWEOw9Icd0lKuWQt9g3vdmaPBQPJLZ5JBKMY6L\n7hclt+Gz3SeRX9POWkDTQlWVsVW68XqRFKlVVcBRC2wb0MiOPnp+69f/zLBw\nHqBIJxuWqIiNjY2kONCNh2SZj4jNqULRazBoS/nqEQa05bsgsy1Jz8OFlmjz\nwwub\r\n=CIuQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwbBsfTnRwOm9tMUGAadAJdNhZl3AoFSaFe/bT/tuAzgIgQDWkoC5hof/Xqjo0S2+B8IM1+QE3yBG6Py8dEf2zvlY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2136-beta_1524604517164_0.941303002448012"},"_hasShrinkwrap":false},"4.8.2137":{"name":"meetup-web-components","version":"4.8.2137","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6f4419ec145ac6f777f5aa68c2b1f351d2d5f4a7","_id":"meetup-web-components@4.8.2137","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-3JUET37Ddq6DIBuinu/qrhxMuq2j2atKV0npHrCkY+QqiF5k9sEXIsW0DH44l16MF54DpKw/V8yggUoSiAmGzw==","shasum":"1a9c9a7d179662baf3fe15677475692dcbcdd180","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2137.tgz","fileCount":507,"unpackedSize":6348560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa35/6CRA9TVsSAnZWagAA1kcP/R9iSpEYzziFfOJ1vJQu\ngoiS8WxQDv4498MwJCVld55PdzIHbBxEDFvL6T7TpHvdGTT6xWWRveyt+JOr\n3fGWA/ofOk8asHnDa2g7i7LikSrA24bWFN8vvnrtkdV4a5LW/JRAaoNpJm1T\n0eC6ekzM43/MTbNfav3XC04oDCf2ZEKV05HwM5bUXB5zKHsiN7sbKm6EfVdO\nfb6Q21h+powPgwf2f7foOYNO3UDlEv6BosT1S48j9/uHnFEMNDWufo8NaQVk\nsSqzc/br7QOo7tcfQzb+b9F+gw9EvDmo0pW25lrswwNYzmlZ1vZMI8cPAkjM\n3X7PuNtNl3u2hligcRcpt7ANZum9TT96BwlPJSF/OqDLoF05YpXwJWiMmIZB\ndXlA4aTo9enhTSswuzQ8GUUh6JA03AjyqfE5FIn+ecIKGkpDm5r/F84tYMQy\n6FhUk1x+pRpy7EBFhUJ3CGjj7b2wwub5rS+HdEqGGp99nzlH0JffrsQXODRI\nrWvBPOCWHQmhMwfVEqa8oYT/7rD67ssCT/2O/m5FUWYzS/inaMEXPN34o5jI\nqRlpQRhUH/+98oyt16FQ3dg78an4Xtd1jo/ruST6j1dX9nEqWC7pmGDDD64j\nXQY3DO2Hj2SE/XJ0jd5neB61b85vY6eBcydd4oOQt+zh1TJL0O+C4KX2/oeL\nDxRN\r\n=tB6Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgxFrknibpJZ+a8I37Rr8Wmjml5Q1saEW9LuQ6sWbcWQIhAKE295PMX3Xq8+/7OEKBPWymSAPjgMnmGGb4XoCw/wx1"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2137_1524604922134_0.10476508773405735"},"_hasShrinkwrap":false},"4.8.2138-beta":{"name":"meetup-web-components","version":"4.8.2138-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1ee231e5b89e6998ecacc83e1f783a57cd7486b0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2138-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bHyEqvfTQoeZwLNGwXfsUJdeIJ870Q+rM+hmuuS2zEv7AGi4tYFcYaPqHyfsiBbsO/JMXZbzhKj+bPbwEOeZBw==","shasum":"021427ce43e467f4b35a35a59753980df5eb50cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2138-beta.tgz","fileCount":508,"unpackedSize":6348010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa366BCRA9TVsSAnZWagAAB0gQAKD/KGd7699CcS7AaiZS\n6WNDY4tTFG4jKgDj5meSkSoffjldEwOrkmPo0Hy8BG7xZwCJ9lnkLoqH8yy3\n8uG3KHHY0os+I6gIry+d8G6t6NzIHwQjGnIE+vyTudtFr18tyA/+/BhxP+4+\nwJ+84aVtwonaoX6tOjlpLNsdAmO3BJRKddXVYMVVWLhfSSKsmAhdy7fIC/wm\ntnrp1vLZvA1Wq2yYNTzSULstH7DTUCucSKpw2poQX5IA3t6ld/R2CaUhzEP0\nPod4khy3AEL2GuFhgriYxTrG4SfjxbEdNDpXTkmVzhKxRYdgw0GTS0/OLGB7\njpTzpJdRkVl2gZRj2DPyQ48V8G+Cd5TddMU97OEDwMXqycQUI1DKCjwvLxVu\njcicQ51ce3lwHZhZNGA1sXb9qSNW+OKAdcDwGxbHPTqRanPLOgzZSaa8Smt5\nce2z4TmnLH5f3iHLaTikemP9kZer7Bo4HlTT0fXJaIDHEDOVoydFUcr8YYmo\n0LdV39mjYzKFsjaC2iY5kYP+p1TWfGEZ5eAP4zGUeHpbuuu01gXSYzRhGHUg\nnQyJzbe0Zf259ZqlG4s+IKQSEbl6nf16ngYe+d1S8VQgY1ASNrciObncNyJF\ns5k57tezOWN3/9L9HKin+l1fXB4+oYGHZyLRYFovY8YmAdTJhVpq6O3GwXSh\niOMO\r\n=1B92\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHieF8EuL5w5pdqGZ529tCH+5dO2o1HUafFGsvuGU6D2AiBiOzyxzX6WZ0MRfvIMdw3BuOvzW5HX+CB6uFM8x9juXA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2138-beta_1524608640727_0.6085894878388785"},"_hasShrinkwrap":false},"4.8.2139-beta":{"name":"meetup-web-components","version":"4.8.2139-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"cffe95adb44c915e1a6f82b9ededa30f862c5325","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2139-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wmCKdt8TCOlAqalrlAWsmTehjf5p7v8QwLQYWI6OOavnpX5LnkULsMcSWOaVhiAw3/TdPRjd65T8OVL3LAwOLw==","shasum":"d7332c968c8ed2996a7ac91eeb4959ab810cdd8f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2139-beta.tgz","fileCount":502,"unpackedSize":6329533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4K0GCRA9TVsSAnZWagAAtVUP/0c45jQs70GZDc88v6pr\nKHPUk5ApgS9/Vhkt9HtZmdTYzm2UIt2NhR5yeEZuiNS8vVTHLcP5gwOe1d1C\n+hmfn9It2v7hZOidWQZUFff2rDSYZo+YpNDhT7KMRNBOO4MM9GgXPFmyYhUO\npDkT5mCiuVre9MvDh3orAzHQuXHvM8IZMkPMBBO5JKZH/A+k9xYCLapZMCpB\nM8an8k+Au+uomPacdhQhJjpF/XNI+7D58/P3neTFnH1jhvt7cHAViQ2Y6Usp\nLRsdmEsrLfNj7YmEHq7hqjoEnV3VJByYdGcAFbNTcfAfwEZ2oQClKSgibBH/\nANiptmXTyk3yuyqkL7ZXf89wTvWy7jIyVcgriVqoW6jxbQNT/6R+jHx+l+3N\nbf8On/FxRKkWtcJYhH3AgfSJVuYrJufwa6vQUrdTJlRMw9Xh1Hq2LTV7Xl5f\nDRqm5olLfHeoXRYlv1PpoFTWevX3fo8C29rvwxtQcl73I8IwU8GByqRIOjFT\nBWT8nXRCGq6hf2q4iGism9HGJMrEHXDKL0M5RVZNtAN3Q89bkeyYNZ7KMsPr\nX9mlgC+pTyFKNeCvlOXRVzCRhyWJEibhzbWKrjBftc5/AMs3UCDTPw+doFmy\nI8ZXBG/kyxLMGHcbPrf756La1jE7JIfo5gHtyMhDpEtT7jIVUWzFZmGb7nKx\nNZlk\r\n=cb8M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHse42QSst7y7JX8duM3BXa2Mqs/9ibrDmnohqW8jcogIgNpCHxxDFA512AKUv/zZlYgwcd4JdqusmJPMB8oduIN8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2139-beta_1524673798137_0.22737301155422762"},"_hasShrinkwrap":false},"4.8.2140-beta":{"name":"meetup-web-components","version":"4.8.2140-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"27701ff114cc3b78ebb7243d8b3a0a713bc43f45","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2140-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JGHBIW0WMq/udEA/oLkqix48z7r0nRUi/FvGDHgKjdL9oLlYOJmXjcF0wOveSK4kZMM7ODAwEAFhCMaei0H98Q==","shasum":"8ea95224f471acad352910de5e04d0745d8d2cce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2140-beta.tgz","fileCount":507,"unpackedSize":6348455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4K7xCRA9TVsSAnZWagAATK0P/im3TsZ5xh5BMZ6tXPkD\n7el0hmuR/i8gR/nr04I+/NgmSEnKfHiBpv9aWtrLCaZba61M3oJh7CC2wHYv\nC4EQBkKtG9ugiAH4UJLSEbMWhOsI6x+kabxLXGYte4wgec26eFSQIe88JIFw\nx0GWjov3bKwXEX+SppqbYOH9k8I82JsoexAiMYmm872JCHl0M0b+rkzPD3Xz\nzQiUF5ibQo6Zl8EiKI6Ufsen5wGeV5m5YfV/1JovItiT9bhViLfOZuN+oRRT\nlyU8L8vU37UGSNEJdLcQnkCYMYhsn4h26wFewbz+mFbd0+HEvvofEfmmPBot\n71IhUZ3ZUTfbsf3XHs1BUt87NklRgA34JQJgPqa5LL1mmo8L3X89PQl+tPYy\nkZvqwlhJxjz+4sBQW01jTkDCnesM6h53X9KyKMexE9cCzd0c4ewPIt7xjfAO\n0WLCkcZvnlK1USG3Wci4tPtu1YQz5CZ1L0G5BmeaN2eTdLb4VAFMfH/WwE1I\nsyxAJzZbx+QfDlVC2ilOyXLi75TlwUfs6mlTo5Kgu8KeYJYEGief2szLX/M7\nNVrMKJzcXuawMrbs1g7ZDopD5DotSqpKniFWTtYK21UVWkJlsuv85MAUtjUK\nCrFx2oIZaPjXq+X5y+qo+UkguNtLhdpILCY4aaHuavzejWS8ve8aQsFhaUvj\nfnGg\r\n=ibRp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCov+vF888rjxiNbNe696LH5AWdzS9ZVCmdE8V5T9fTKwIgESoRY/otw18t3Cfy19V4NcrHkjUwY7nrm/YSeUA64Z0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2140-beta_1524674288353_0.6692003032736544"},"_hasShrinkwrap":false},"4.8.2141-beta":{"name":"meetup-web-components","version":"4.8.2141-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"648fbe0f8e12def9cc83f583af333b7c3e8f270a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2141-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Abblzhv+yjL5pJbuiCKDc/VxNNCjB1RGp5rJjzz1LsEfuVdW869R/RJg1koWeb+Z8CnW7NobE6AIRthEr6Pp+A==","shasum":"696e0db3d07b69ee9466fd21d60163c5071277fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2141-beta.tgz","fileCount":507,"unpackedSize":6348950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4OLmCRA9TVsSAnZWagAAKLcQAKBdWgW3XtGhgwnEhcbQ\nebqba/PJEhBL2cPLqAd6XyGbubEY5Q+WCsZkQNmm2z1BkHUAkJbZVfVTfEtO\nzEwttsTqvMJ06/G1yrt1UAnSHS7M4f7KgFQYKojcGBt9k4VfO+vMlQ2Cf5xm\nNMjHQ+nBcJP1ImZQjOTLXvANlE/N2jD+epiNFzstJ4ULgXcSVO2ymb+D1QdX\njo2kXg0YEpULWQb+1exfQc2nYlW4rQYIfkL7plVjctHmOQu1FQCSUQKZHTGU\nbqOyOg3TxVGSXGJ5Eg3Z851uxiyU7s9rDUHr0c5oRzmWCQf4f57POKCQM5PX\npczyyeRMIKAo7O28vomScKTNsrHo4IJXggZHzNMQEDluwAxUmuZl0LeFozBA\nHB9p3Q0EVWS4xMqvW6pOA+EYnL081rO3s3WfkZ8b3ouBBfqadbUqPzQ8mFYh\nqG70ceAwS0C/vtfvABiyN0sHwCngYt4OKH4HIklsndrR8pZVbV8G/rhkqIfZ\ng9JpHk8SvdNdl0KtAKkBYNJnlwgLhwPdcm7Tki6BLzYzMoXznpfz5XJLaXQy\nnHgjyT6aXG6+jw6XupdOdarvkIYLSyPnAJ2bvSNYNONIsCLq7vSFEWlYrJnk\nhAdRKAiWZMwGo25YiL4atzlrK4y4CB6HT1qnKSRWS+uUkfIf4kxF97HyuzaP\nYgjX\r\n=/b5A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfCmfZZfKpcyk2b4AEOh4q9wNqxIv95POELFWgTnx65wIhAPKJyt3EHqhtN1XE90SNcPxkCHXrrQ5T3D9pdJ/syZBH"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2141-beta_1524687589807_0.844600712885845"},"_hasShrinkwrap":false},"4.8.2142":{"name":"meetup-web-components","version":"4.8.2142","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3c4e0c5f2a8243b37ebba06626261f66b71b2acb","_id":"meetup-web-components@4.8.2142","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/cAhy2WA3/8qp69euHkFph6bmlFJcnRFEjZHIKHOXpK9HGp2JZw3tdqRUoa9QyEGyNiYB6gHIG5zaGyEBtp2CA==","shasum":"a1138a89b5c75bb577e162264f98899b1a6c531e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2142.tgz","fileCount":507,"unpackedSize":6339411,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4eMMCRA9TVsSAnZWagAAWSoP/0h6z8uXiGf/IPdunW1O\nsw5C5vLC4uKezHiI3zMLu+z7ALPt4ftQlUUKbPAqmo0kBfdK2xki5vJCj3lA\nciWwoays3KZPV6nHB9t/7s+tTZRtGZNoO1YgJYmqlCE9XjprFwm4DmMrEGaK\nNHHSoBt2LB0PWqp/KD0Yt6YFMo0PzHfHkrl/yzPKrTN0CHFVwIfmZvTlnEqC\nt4shb5r6rXF3dahViMiGk4hzVlf9YNt73NL+uBmutYxtNlua02RAwKt8xvDe\nhIceD57CWxlbIc6kr7ayx2/sVS+2ybtjRC4lTyT6gVpN5Hov2rfZixxVCnpq\nw+o5qzyv5+7Tcs8uIHE2MhTK41fruZVEyOCcaMRJdJTQPXDERRsTYO23QkeD\nmh6KJY9I1SCZDNI24GWY93WC/ZGjXVLk42U6IvbSHmYoirDN3Pgq+YX6tW79\nop8iKaQU0tHZiev5+rmlD6K4eb+F//omgrwmy8A00KuLjNxxJMdhFLFQlWrW\n8ttrvB+ctDtY/KEEArwt7SMtp8t00yA39s3cmXXhB1Qh4ecEonzqqPLzqWlM\nFPjzJEc7kilVAP/sRxrrrNdYrJhMBcDONQMAH4TtNzR/NhKbGrsAGS0dNRNI\no9m/pY3Su2Qn3AtUZ8maKAqS0mtsWRpZTd+FXMm1njuElVoTEuuU8iVrgzZu\nCQOd\r\n=5/uc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxE8tJW67pytg8VC07gWw5QtqtLpp7iY5S1yKqlpT1xQIhAKrn1R+xo1ftpqELsSniT6mK1hZiIu8wuN3cUK8U4bW8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2142_1524753163767_0.41118210788002885"},"_hasShrinkwrap":false},"4.8.2143-beta":{"name":"meetup-web-components","version":"4.8.2143-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a0606fad7390afa75285023a1239bebcb204c693","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2143-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6FoOWaQY+6Cuqeo3PL4F1DMaVyoTwhoSLYxm6GVYjyf8zK6tJPHRA2Qm/o/h4HJjEoJNBitO1FvVSHPslHMZZQ==","shasum":"dd3dfa57fc4810c66578ed7138a1df558c089a63","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2143-beta.tgz","fileCount":508,"unpackedSize":6351680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4hU7CRA9TVsSAnZWagAAft8P/0diSEWJOQipQCPlLzf1\nokzejmqH74EaVmrmyT2IlZAtR1REjZTgTvzzV67IFMj/up6xW5O1kYhxtTqN\nAS+cRCMXlhbt3iRvkJ5WCj8XLZQOlu9mzfIUrK3qP9SyAOQM1R+YYJQCRDKx\ntWdMZT6TSTZqiFMryBAV5AzIHajuw4QDbV5TrXfn6N7xjVF8LbBgxtWdUMME\n/JUONm6SfaOPmFs6Dz+rzqEHAqnqiPY1nKu5VZE/MYu9RLrWRG8IHG/O15/5\nJlb8ZyzHmpU97Dgc0TYdl1UnlXYVgtnHcwYBNoA3pcZbnhAcf0W/6I28oaiJ\ne8YdnGJX6Aqnc95469TS2CU2AanyRt7HUBuZ9m/BqkanOHz5vAUZ71Tss/fQ\nbQoYeRLzN25XXWETp4yOdUd6ha5+AP0J3787JrZRUnfcx4IRFARfSWBAVYBC\nRFKs1eBPC1zFOxOApk65S5JX/m47SakCPqBanXMKucwbamr6bYYLYfwOAk4a\nsO/Q7EZOaog3rcXZl4CdzJDPPNbWGH0vZudJojLJYA6oX8RD78OMfFIfw1dp\nFMxB3n9d50co+sAwLwfwdrjjGGicY4nvLX7QTHFKdWc8zPt+MvuAIaNX2JYf\nkeKsk5uGpkMaSmZSkcluTtUkpkXLlPkMcJY0ePMKntBIKPmZdOBflUG+vDi1\n/2YE\r\n=IYu8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDplOCtSXjT8aMyEOBRwEZBT3oHPhCJPgCxjJ1njAFDUAiA2k0ip0V5pmojges/1q7IdfaK4WbK9dIDIQ+qaXIb4OA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2143-beta_1524766011348_0.8082900567849012"},"_hasShrinkwrap":false},"4.8.2144-beta":{"name":"meetup-web-components","version":"4.8.2144-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7cc01068c446ef52356da63c7962e8ebdbad179b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2144-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9HfFgNHraurRv54OChnU+Z6ptDptNuzrOy3HJhNXItmhC1DHQVqMYJU5U2T1OI3hZEcs7iwBjcndv345eFrFZQ==","shasum":"36c14271d4e407128e55f1af6aab7fd6402833af","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2144-beta.tgz","fileCount":507,"unpackedSize":6340406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4hfkCRA9TVsSAnZWagAAts4QAI3nDgADoX5oeGoVRiI0\npFuyjrvOZMb72IssCDYKhgTUoz9DrG+63cWPNElJWGpRML+JhQXst6lEkzPi\nTlWJf57awXSJGiQI3TFYeeqhd4B6ESRgCc4vMg9zHWmCa2G32intW8uaNzTd\nD5WeLB6lMGF9t7UeBKSHiHCmIVmrNwoBjtZIrZ6YB1uOQGAbmVWdIIVOj+uV\nNCm2fmD5Y4UZqReB9QYqzOvAq8W30JdQe48iWdq9g9qjDnhDbtZy4H9uFYp/\nTwr4JpKfAl4JPvxzFaPNVGLb7t9qqM97vFbEx3nI0mpeJVDqZtylscV2+D5I\nI/oZdsjcPDxdKMq9plLNW+IGwVeQbZCuT2+vpmSwLjeaOqdusRzVEUvpy9Ik\ncQQCa7pDlftFJwEq4XaoAd0bvVrjyDKHRnzqwy3YJPK7ndTFepCjiJNAkoL7\nD0N5D/10lbB9IYUKmTm32fBwVjKo3hqyyfOv+rtBGpQr1tu+b+4o2b23v7v1\nyMKDpzEKG5Etf/o+fWW1phU8B+vdK8ZT2vperjE5YxE4uNs8HVQMY5RSsDWt\ntSMW1o3CmrYA+pOQn6xX6cwKw8w5P/PEmOCwnnCAXMtd4Eyd4CXP/5iv6FtY\n+HYt18wBuf8yA4oBNP2+y/SWGZzIzHcZJ4cPV/AEmRawe0ORNQW2IFK3pEcY\nfjpn\r\n=Iehe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgqvtLxKyJRVHCD7Kga6dVhUj3lxl7X5DvOGNNKtwpDAIgAZKyXwDcQZwEPYf90ODvJRRU480C9lDkLYpTVzoLM5U="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2144-beta_1524766691785_0.5655016104429988"},"_hasShrinkwrap":false},"4.8.2145-beta":{"name":"meetup-web-components","version":"4.8.2145-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"5982f49ddb435e01cf6e230ae927d131905c0aab","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2145-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EpI5EL5hmEeUjTX+cbUW5AXbOMKOWVPXdECWattbF8HpUUJLX1HlsOKVzISSw4wxbhgPyMqN4Lhg7PIGSGTBlA==","shasum":"a2b167846dfed01fed79049a8c20d72435c268fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2145-beta.tgz","fileCount":507,"unpackedSize":6340434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4hhlCRA9TVsSAnZWagAAYsAP/2Uq5GkrSqahsHm6CR/Y\nLR9bJHQtD3320TsYgmsjO8iDgIjIQTZmjICvVZPh7XW7QoWpR8UN10YxsSho\ntPF6QY6WgGtxIb3mjoNcXYUDV3n0FSyT0PeiTC3HhmvRzZtkBlULcYEjyt/3\nluR2zOJumR69dc3S/4FZ8z2l8VKsXuaDO2uiY2CvYWs3CF/vL2eAlqiOeJTF\nSC5+Pr2bq7hkctWN0AtRO6m9ZHY94P3upyYneW2eTff3j4fwYeH96ENn3FCn\nAnTQ4Eh+GHQVf1dC2OvAM66tCa7mIiITOKNo6br/VB4eSxfMwNNIaAs6SmTs\n1MqT8IxcvznBeElUfxwbd9AQ1EdFw3cLYJZ4cfiMt7iSdTsQQNMhS+lgLb21\nzsnePLCz+yBAcjny8oX/bKzwcD/9FxXbVNf5Ru1rNbmeS/fvZFYTJnWV1ejo\nbF3N/eRVkaDUKv50QwYIpd33iwfZTsY/frR5BMLn0OmMBD3pwb5gybfV09a6\nDFtJ65w3MkKmo84dIX3MEa3v0+USdjatsPnF7vXhAgU29JXxZCOJfVz6qRff\naAJDcyId90RI70/6o8J9H37le8vKh00LnqZONhzfF75yYacfPUm2ydv5FRAn\nLEweC558vJ6z/0sGgl8F1QduMY8oZ1b3FhvZKvHljdVmKZvOShMreudE1G0F\nKsO0\r\n=aoHM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtdfBHtG6CsAw4VEOYcWsAPmuyqPeUjC12h/t5oBFDEgIhAIzivPwiXrbvEec7emMLRV45//TfRiLeMe1xVJyedm+Z"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2145-beta_1524766821170_0.866159499569396"},"_hasShrinkwrap":false},"4.8.2146":{"name":"meetup-web-components","version":"4.8.2146","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ca452935b335f6efd2ca15933715c49d1c4a2d3b","_id":"meetup-web-components@4.8.2146","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-uoD0gN++XfuJF/fRr+heoa5IH/YGUrf4lxKbqggAuQRRb6xij5z2TDz8+6JFmOLocRakiqEorqTyK4zjomkINA==","shasum":"29ecbd71db6795e1f1f0b07002c50d5c5241e981","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2146.tgz","fileCount":508,"unpackedSize":6351675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4hozCRA9TVsSAnZWagAAAQEP/Rc3MairHxJPQVqlR5F4\nZtxtd8vRIA/7/oLgk0JV1CsM24QXRGLneac540ClwIcdgORwi1TrM0evP+dg\nrvBXz3/3GWdERpH5NpRIyUC/Xlk9B5zDY3QBNidxg7vXP2kc3DHjtl51WbJQ\n24XUgLaEqAoQ7pGqtENGoHftzR0Tjwz0iJX1DlZGTeWwju+c0heHc2ZbP9US\n/V9j2Jo2mPMmBNs+QOJSkII7Ries1/+VnYzJNcxrNcex66CRcB/PQgyO7zkr\nMknRt012MOd9LGCMjxKERb9Lj7u0HCPv4UNXHN1+btbNz+op3WZV13FejTyK\nDtMA0AeajrF1YhITnJEhLRieV9F89ddUzp9u9fUqf6X0Q5vh4QPu/xfTH/qL\nzmGfmyslsxz3QX2swamRJUfZaFb3anrRT8lgNmFsGGjuVv/C5zFiURKZNfMx\ninGwDpdjQNjRsi+hDc19T2dMpAy0zABHcxeHLSjiZzXx2goBQFQdPhFYTeGo\n223XV9LaJKofLVM3rr1dfSepQhPKc3ib8Qj8/Esyrh/YD4ienLA2kj1F3nA2\nR9E5iRHkqsVvnsKw5Yao7r32LLCVAphmH+YpBRia1kiBuKvh8FF02U1TGvnw\nMRtroA3tRZQoZckvJMfi/xexsVMELLwhzeWSxhOX4/44UJu/7ofibOcczGwM\nBz8B\r\n=JgU9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCF5rQ3To/9iiLGJVbRxV6tCQwvGCxhAACLwkxsDXO0tAIgcnKLViScrw/KHYL/bJ8G8mqG9FQyhjLjPxDF38Hq+xA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2146_1524767282660_0.7281833530225046"},"_hasShrinkwrap":false},"4.8.2147":{"name":"meetup-web-components","version":"4.8.2147","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f40e115fbfa8848c486ef7c30fe3f5ef02b8b114","_id":"meetup-web-components@4.8.2147","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-TR0q0Uml/sB6hGaBCFD3+1lQn3eeGbX+Zmft8pSbcTppyOE2hty7ZBahzC21a2k6gtwoZejnrixa6bIvu0D5kQ==","shasum":"03e32e69743a97ab518ccc0bd6034e4d03629f02","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2147.tgz","fileCount":508,"unpackedSize":6352693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4iD6CRA9TVsSAnZWagAAiH8P/0uxn8yQPR0DwWudNMlk\nUnTum+JmlwkAdzpTVggiVproz0TiZn4b/PMMCNc3lwyj3WsWhnMC3lnyNHvn\nRsliE5awdxmKXEpOfziH4MyZE9WXLgNypYLMQyeMF2zs5kqOJfmWrsIa03Nq\nu5pVmoQhHp4kerX8N17TWa/b4w+/KQLiBqecsHhBpwPHTc+uBRSWs6Ht3q24\nGyQxa5Aza5mMqqhWTSf2m2eaXaWful9tr/lJunpDM+aZPrvcO6XnfVzoU7yI\nld9iM7J6NQpjL2Zh1uLFQEP1/6oqgOp4FcwYHMAzNaFqDRuy2oY8DUax12+8\nBuS1Tx1qXtWLEJCjaWBdqWMv9q39D+TOSca1oYczZYan/7sDqsE8/vlRISHo\nzBt9p/GGhoapRXMbZkFY6AEWLTnMjlaqGPEctP0HdhuIaz/KTBojWycJF5l5\nAUX04waFRq/dpJY2oOpBre9qtk0j2jlO9Pif3KSkByOJ0C+wV6umeZRK46lq\npExmEHu1elNSkzuiR8/S0SiTTO/GqdyjGetU/4O5Z0nrmMPJl7B0sfZia9AD\nikULFIhm9Ek0Fhz/SB9J0tAKrdaq+Ne6eXaBFf7XffRa1qBHxBgmTrOCFiqw\naeJZL6vAnER0RjvYXKvL8z5sf4JhmvseTXHtza33uaU1LTY4oXTRlpJlK1gx\ntM+O\r\n=6Uko\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6IFphleri68vpHkSssYdoTkTTbNX8piX+GRXLhhbbFQIhAKdkAcy4w40ZsURzjM3MpkzFnPzXTYZ+pHYVhgw/WHaJ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2147_1524769018144_0.00892450748121143"},"_hasShrinkwrap":false},"4.8.2148-beta":{"name":"meetup-web-components","version":"4.8.2148-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bc750cfacec5577577dadee774604128b3b3228a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2148-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-A+3l5Wtepm5cEZHk71maQyylXHM7v0vZw3W1Omxp/2BDJ7ol89ckM8PhRauw0ZWNzBRguLlwluDx1TV9KR5xCw==","shasum":"70a7c1de4ae1f45aad20d594447e7cc217f5ae4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2148-beta.tgz","fileCount":509,"unpackedSize":6352210,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4ik0CRA9TVsSAnZWagAAwfgP/iwl/uOncz5svs3Gxusf\nW8DLkUH4MmdXwcr9knOyHLggHdOVeM75e8AifAlTGCYtjKGy4I2XM+4vmHhx\nefblMuZnBVWnBup8gDAID0n9uoCyt/ATqVIeRbV5wk8HyZTg6Wr4IBCqU8z9\n8l0nF1/SCYxPFZKGAY5uchz7nWXxgMzhBuI7kStqyx2Wj3D7VsTBXywawhch\nJMdkce6QVbVZohI9qvKBzdV/hpHAwb7YULrsHO6ynXCmONGZ/fQ2RoklB6kv\nT25KZHMTJun2uIxHSmL8kyXZLZOfWGCwLDUAta9aGDqdQPUwQVbiz3hdjcrZ\nREsAte+8k1vse1JQXJcPLo++G1FJPevIfPyLqWwVSzSXp17QSHBUkfSNG7Ia\nxxmXVPaoG+aEfLxsih7lBRWzy/OX1Ulqqo9rO1v2ZK1FLj5Zsu2uMO1bVwOB\nMGEkGTMrfw0+VErpahsB23SAREcZzTamjQUsSpHQTrVwC3XTN7RIH/c3UaNf\nXoxMZ4QDET6NvgvMgOTibnNu/0uTpt6rUBylLBDyKHjwTjoEBaFMaIs11UbV\nM7xXDt5yW1qF6PWfE0SU6faRsVr633MGcplQQ2rclhuZ/Yb52GPQsrhp5gvj\nsJQmZ633NltQt/npQO4Db3VkUUyhD6rgJ3b6FczfJ5+s4k6oLbkLLRhrkaJW\n76nt\r\n=Mn1p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFbaQXBDVcVB0TVNveubDGctRtJOq07sAG0pbnqwNFKQIgPy3+gDDU96UJ+yWBW0Hx0BvpawPMHNaiTf2Cak11Zfw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2148-beta_1524771123709_0.15676745426192062"},"_hasShrinkwrap":false},"4.8.2149-beta":{"name":"meetup-web-components","version":"4.8.2149-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fc1e64503735d863975b5a83121aa182cf86a947","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2149-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CT21qO1uboPCAOd5w+c15wBmO+JTTIC2pHi2RTLAJeczLOuz/ZlkUOjGDZaMlzS286rlKmgzD81US1iymF7MfQ==","shasum":"2aa97043acd56eacd7f9180d0b7ad99e17598ef6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2149-beta.tgz","fileCount":509,"unpackedSize":6352152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4isdCRA9TVsSAnZWagAAn28P/izmH82lDbmlPvZ8K9k+\n80FfhXYxWKEerHv9oDVfWb0n8D75pg5Jhue5BeGz3MO5vgOFFLYLeRy65qZH\nyqXwOHHFefhur7eEjKwvZpMtyemv+so0LliHkyk9d8vmjdvKvujhnt4HCWic\nQU184mcpOj13cjokFWCOvi/YElZthxgct0rCUVfA8qcvhwmcEQN6itiE4woT\nSyeAAJCdh62kfPpDhxqGNa/OM1h89BZx1ktWsksqmG5mCv9oacZxx4jvIAbh\n5WsfB8/cwlnxna+vi0gjwiKat/TUrDiCo+KD7a0nyJTwiVJ0bivbQL5bzR9w\nA1m8fsyyDQuN0RQppFheHboV68ilLS2bk4anHlfHj2tyq4MXZezZRouo4Jyh\nn3rJ1tNCEmSqu3Sg8ZhBxB57DRirpUnug/sdT+DP6dwdqKMu2yBLySf29/wm\n8WfDWq1Ti1f5mHLbTkDH4jSlav45hRjOpji/wWCoZz0+p00KL8iGqcSeDiH2\nH7qEH798Rv3nlwX8s51R/zSjEyYP5h0lVgZeTXd9Tb/B03age2dDqqvvfFf7\nW3HH8xEr/GsTUHWNr+6Q/+RfEYEKkgaiiKZ6v09B0UV3yjqYlw7ThgG8POx/\n1wcT0zNpBfMbGzqxMNrSHxA6QpvX684Jkx0Oz+HH10V7FKXNwxNEjCV7DrtT\n5J92\r\n=Jqfd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcWA0/FhIExgvIAMn9G8zusC6o/oEkWGEC2kQKgHg9qAiEA5AFcxyCmgBXkeKo+h/7uXenCltTSDNsZHF7/FAfH2QE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2149-beta_1524771613566_0.527966130531365"},"_hasShrinkwrap":false},"4.8.2150-beta":{"name":"meetup-web-components","version":"4.8.2150-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"209c8a00b3596a49639ed96c5e37e69509cec9b4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2150-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-G31nKRhilC+W9El0RjMyOWXJdbj+aU8yxphC3+GnZzOwtGPrKL6469aTbMrFyMwYgCY6ak4QRo6tExARfb6RHQ==","shasum":"c2af0e65a7ca9335ce3ee5fbb3e8d0e6b59e77ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2150-beta.tgz","fileCount":508,"unpackedSize":6352455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4ivkCRA9TVsSAnZWagAANpsP/RaZUiGtJ5PSf8LYy3Ig\nnAeuUK/LMvQkbcZqJhQ8j1VNjzJZJDzBQtLCX4+0M5W6rSTDg6Asjv/V7TKi\n/U0Rabi+BYsweO4VsDvFzWitXxFVRrz+KxJx0zj2e1i156xMIdEz2g1Crs7T\nlIpHIdO535btLr9KWlCTRPes90Jfg3ULWshxE31/ZE6FraFL0trUtQXjNjJW\nhzGfPV3fIZt+n99viPoiFvMqtPElsN/VjQAcWddqrcFG+DviN/jDwxhJh+kA\n53eaxRGiR3Ry4bikWAkNF2JLCoXeTyeKAvwvOY4K6Uhov/0NSaC/BI0IN2wY\nPVx/Pw9JQQRDIkrjO1z6wu/GlN1xHgtUlBgrWZHmmAtePddYTSawVBftYPMO\nQrahxQZURNMxN68j2iM5/3N10sLAFh7VUhZVVd6sBr0AbS8p/3ze/DVLluUO\nZ6U9Oq8u/mBaRPyXOusbuSb4CM9lpO1tgk3iS+MCyA/R4U3yMeV1qcwT1RZL\no50+2A0ZRolh3cqBXCyunnGfMXHIft17QncA+3FFxrWpM4CYMdNYk5919EPv\n05PW7/9SgcgfBW2fWm2/pv+DzIMw8ByN+XzI/GCY/FxvIJzSiAuQAtttB3d4\nVmwF3ZZ6GYQdN+RuSqhh75dVsRZ0FVicewJy1KTiDNKA7pdrRSj5uIpWlDUj\nKKLy\r\n=uroh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBdGDLIrcLwMF+2ZkOB3n3lkKteTZRpvcqUaC3hEc7MuAiAOdf8oSrFtgYA5oIX4Ag2d9AmqfCel7E8uKzrBttiDpw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2150-beta_1524771812117_0.398928432023514"},"_hasShrinkwrap":false},"4.8.2151":{"name":"meetup-web-components","version":"4.8.2151","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"adf987ffac99f80120e7804883111066a6a73254","_id":"meetup-web-components@4.8.2151","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YV9bUU9C2GLk7WwBvpijPaJhi+CA+CacCKcfGsrFwjvNHbnz8FsvX6vm8gbBdIbWP3X71Lntuqta1Qlh16Fdgg==","shasum":"1558c9feecd2ff349b6165634590022cf88e20be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2151.tgz","fileCount":509,"unpackedSize":6352147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4izUCRA9TVsSAnZWagAAr8kP/3vP4ph26vJDTbM3AMxu\n1Osf3zZaldTM9kVwnoIoY2RWg7v1AcYFdkF9BaQIgaRdPpgnrcu+50hpB5qg\nriDhcnNWHMthQHE3Tk4UO+YIaFztUA/PHC3c/2Zwz33Oa7f/eV78cihuaLqU\nuBvwYy7P54qxQsvcT/b6BFkUlsFqUOXlxZy4VW+fXJTzU/uAqei/1RlX8ek6\nB2bRNsmUcGtYLOdAkeuY4e9K4yjUKoSqNTlwd0+C1kgcVz2g1OawYJagDZwo\n3QU1qMAiW3PYI0mW4oo85xv0YBLbIdpXirJTOj8TYg4DwPwP6AWoFuX27kFy\n+SnlohdQAUPJM8ga2PmB5n/0npN4HbCV+0+OqXwWXyfIKu0rlG0j/BQ7GCUo\nkQ98w1p1xkULVClpUGpCtYdtEj24FDtoDcuPyS8+VqnjMYTKEWAp9pKbBcQL\neQSd3g1DyfzJySHOO/vZ0hc8dd+xo/Iitta2heLW0C2TTuQokJSCQtAf+G4R\nLG1XVy+rdeTASavGMFfP1ofJXhndB/fYX6Fh6Vb6fDI7UM2gOnkMynNiLbaR\nDGMq5RGlfd6M0WZEdwmko0b/Qm0xygcizao5KGvWpZuhPj2Qj44W3/T/11R2\nRcLpGtIWwQYJbq66SjWEZCdpqqWQ+VVYRmReCSpsY/8Ty1K61zFjJ/kapWR2\nPnYE\r\n=oGBD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ0kM7xF6GR+tcji1amiZ1DWfG38K2p5ZD89FfPgVvFAIgLn8iZR1miPeL4UtHGynJJyRQGtHsTq/5f4sXIm67szE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2151_1524772051211_0.48394578327388516"},"_hasShrinkwrap":false},"4.8.2152-beta":{"name":"meetup-web-components","version":"4.8.2152-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"54f533af628acc208b81eba863257919bdc983cb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2152-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-43eIdf8OXu+u6KKAlrk+XQTYmYA0CP2N+PM8rF8NsbZZHOP1nd3xptmfESFhnStihhQ3usxO/cg5dlt7CW4h3g==","shasum":"5891d7c339a01cc3935110e3e066878cbc3d0d15","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2152-beta.tgz","fileCount":509,"unpackedSize":6351802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4xE0CRA9TVsSAnZWagAAjDkP/RSVr2Ar8/CLUHSPGORJ\nH3wAuvK+nFPPDnmyRAQ90lu5Zetr9kVGDPRKbVSUn1KakecitG4cpIXm8The\n5jc3+M48en5qhe/pOXKjQy4OXH4YSX4axpyjGJH+ihjqSMFZzR6A4w7tv+Vp\ng1kWBzrP9dvYrlVrEA0nqKZHy1CYbPzlT6nHkFlBzXV5G8mXZqv7L83aALy5\n4PygxcKrBdnuNVoFaYmj6HZleVe2VvAHPIxbZCqN8gLvHg6y2aazwatZ6ezF\n7O7xDv1D3Oicju1EZF3wjD8IAFjv629A/YBB8XCnq3Dvo4DVZpKdMtfXRGG2\nrP2ZB7WNoDaaFgn40Ia4XmpBxdu/eYsYJS9F71dFX1SKquuC+h8XkZR+iy7W\n/kV8Xmt+clsUmYJRCvTlYDe5aiOkIbotAaYXWFXTDt+xM9is4sCeIufHaYC1\nIF1pSTs4+KQPLwW3IqkPUIp8cmnCMCgHnyyZmQMA+bJfb9aixFLN7oiFH81F\nNVDF70VjHE+bY4brWkGXxTaMFeDKjRs/oQF5FXbkAAoKRFqV2wx8eUCH+kjB\n73EtXMqiHZYjG9L2h84yjbLfYhTKNkeXBcDH288UAOykVYR/5g/AHaZoDnW/\niLJE1Eqr/wwyvn+s9I1njdH5hCUdEoywBYZHjAPnYp8UTTUvgTAQgcwoazSb\nq4C6\r\n=FwpE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9QQH8EY2namS8yZeI6YCvJZBIbR46Qb384pucWGNhJwIhAKbm0+T2NnXoo4eQYu8wVRDBgrazZwljkG8B/AIV1IJs"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2152-beta_1524830515896_0.1988099406010908"},"_hasShrinkwrap":false},"4.8.2153":{"name":"meetup-web-components","version":"4.8.2153","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0d4531f8b694990512a56368a4387325386706dc","_id":"meetup-web-components@4.8.2153","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-26fG93f6JWwoXpyzqXGQut/6lXInGlttrZDwb6BgEWUXH69dHFr4Yuwu6oaPfWvPTvAwvun02fZROJGLZeEtrQ==","shasum":"79b593eebd1368361c0aa58366cbffbc11383165","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2153.tgz","fileCount":509,"unpackedSize":6351797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4xQ0CRA9TVsSAnZWagAA9+YP+gPOACgHf4qnpj1fFKxg\nn43ewTopg3HCwnWSMbj2x4l3n5ApsZwdGU+0kNTkns+NEYfbI1YfMyqOObRh\njepKvMMwnwMiia3A7F37veAXay571+dVZmY5H+TdOOXlLJAFW4HebVKtX3e2\n1Cx/DrGTlFIS1CT9LQyltUnUVfEtD580glUkyUtZ1RafsGq3vRi89nZcDg2w\nSyDAUoOpRA36T/0qsFuvSyPj+d/Aw+eSjhMnx71IGSw5MgVDot2QUzOF297r\nOln4lIIRjkUvMlCb/bG5Ed2mEUJLq3M6WoyGyTyZYe429Bp+JFGTqI2uyXiw\n7xSWo/XXU7eVnxm84GyOhxgGnSrQc5/pK4r2k7NWBZvbn3lVb6MzGPVRBDlC\ndOnKEs/jr/b7IQ3Zo0CF9zlwcrxFiT/o/cFQHkigUTwzI0IfUhroz9ymYWqr\nOTO5OM8LgZgqsg8AW+ADj6UI+gJguSAZoE0s4NLpwEPfZvirRRataMi4v1LK\nxG7gKUgf0rSo974rGiJUQljKafAWI5o7qCMPeqjGlOyhPzuEh/R9xYkdHa25\nL5HjwiKgS8xOqhqSEIup2Lawq8vS68Rd3+uaVaind2oL3/Sw3h9ktIx13Z7n\no9aBLRYkNcGs1YOik7ykuUGSvaz0IfEpHpeZerd12O8t8HM7Auew4cMnI2bD\noDPj\r\n=jZJr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUDf38b7snI5rjYH3v4zOVU7foHbQsam0jhr4w/8SluQIhAOucuXLOQtuGsuxwYTvL6fDOsNmkuUaVQtrSp3XBR9rV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2153_1524831283913_0.7145749911720722"},"_hasShrinkwrap":false},"4.8.2154":{"name":"meetup-web-components","version":"4.8.2154","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.2","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"5daf0c545ff4fce1017bfe4bb076911a4dc3ed29","_id":"meetup-web-components@4.8.2154","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Lm81WmDtWDxH6I8Rw7jlXMDBGJj7WgXvuUXrKVNlQsY4svINBqcFc3erWZAYuyAqF1MzVCPYze0lRMjzHiU1zg==","shasum":"e9f18bcea8b1da053e64f2471192e673467ec418","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2154.tgz","fileCount":504,"unpackedSize":6332765,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa41RzCRA9TVsSAnZWagAA4X0QAJ3GdWj+5waGDbYI+hKp\nH/KtY4DzfbvKoS9AJIc/jwI4Bws1XfaapcX/s2EF0j4lG+BH7tnEQ+zVu5RU\nPvyELwzJiWJCvA4NS8ycUHD2R9Sk7BQ4RR8rWMoNI+PNBayNPAz2udDTpRtn\nIsPZYMoefM3QjTD3yurptaumMOQODJbGuvOIHyg9iZbn2ikPYSGEMiN5JrHi\n14XimS6HSkTTeMQwYd4B279SEHzrfGQyhy5042qLCNFUhBzULbktEM6VVq+z\nQIbqu6o3jv4CTtKf4nkW2K/HYJubQxb8+3CWe4q7q7toFO5RB6hwzL5SDUuu\n1ekKLLo7UQqVXGXfqFcRqMOCHNtMVTcxIEx1fXwDEq3HqnSKdXxD1OU5vkj/\nhtcvafJStUZbzGBmo0jRcMQya4UHkyMnBKKwYAuTD04VZZUc9I0FJY3i1Zdg\n1LGHbTlRDuFSvoUUv99to162tQbJZj+puYjVvDEJuhoNUFlfbtQQXoQZyGSH\nbsMd+A/RNeXYysU/ogd+oIU8q33lIzOV7g8ocj6XBWpbY1Hf1EXW0Yj7GplN\nxS28HTrzq35e9HYa5iX5d5Z6te/MWdcbSUwKRv24/O6uz/gSH5yjfLyPmQGO\ncopWrJfqBMXzJImDv71pOb9BIvX49zcba0IhKKi8nrNg3cYjKF/egIqC8q4y\nKRDD\r\n=yQhu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDUUH/PAoQxTsldVCRB4mV7wwl1YLcyT/gI9VeYiy4SKAiAS56wzr0qgDdVR/6OGsYm2bV8f93WYZjbj0koM3mXHAQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2154_1524847731385_0.41942092058537983"},"_hasShrinkwrap":false},"4.8.2156-beta":{"name":"meetup-web-components","version":"4.8.2156-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0b84a977c73b6e76931aadea7357789092a7d6d5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2156-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2+9jqbolY/OArcxm2GVvaErJaWyjPa0lHdhG59kmqkKFNFk7J4vXBCgFfx0sp+RqgJoZM4+i/fnvPePYAViMjw==","shasum":"4596b96ca12d033d22e874bb840f4ceb06dbe486","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2156-beta.tgz","fileCount":504,"unpackedSize":6325534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa45gCCRA9TVsSAnZWagAAJ1UP/1OOWUg7IkcrMLJebEYO\nDETt/Z9a6Vbm3204xpIj2c+ZRvfZ5imHGsSBE3NJ8fmK//qK2zZq89JIPU95\nbb7m6JdV3zPyqobnpdg2n6rmxuNWNbBJSQJLejQ3sFCFHfqSk+cHCTrOIQ6N\n25V7b/r59Nk+BXdTW2xyXw338zWX7rTww+MbEQYjAtdIP6D2DkQSwmys7eaC\nEnIhacnfN1Ss6RFWyL7Udiv58nBKsGZuzEc6EDK+Td9711LSglpLDJOfWw2J\ngEBDOGKiNlLPW8rcsZ0UukQkdGFXzCPaDZLOOC1w8WsGbj/rTu6ASFiuYgrv\nKp5lUTPYyx21pTb8qtEuPN9FOTNEgOV3YaYr2Qgi6HhnhhanggCwP74hT+y3\nQpADdn9JU7lCJYiQetbkolmvDiF1LrNofeJd7+AWxkhxMJPtiDxu4S7Ifylz\nYMaa6jfjPqfsZ0+qmFCJZoHej+z6LCB3Fnl5ZPB/RGuf2f68c6qCF8B0sbC9\n3Vj/H7YEUzvogdmhvuacsPhOtUEg47xTPV7L2c4rgF8++L93UCSR9MK1uGRa\nW85tFUp7M+2eEvuAkZskNyghmfHofmoXYUCkHX4CZj9I7WWm4XV3SyRtbdky\nYejAnbU5uctYqZ6BPG2HmhaD21irsAJ53ChaQOOvDRzXH2oF21Zc6QDXDB4C\nnALQ\r\n=0pWQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDh0Re47s0/zJ283f9/aAGZTBrZZtnn4AzHgHFiRFCoAiEAnhpqs6BIBqMYfqVTfMH0DqZp61PYxR2gSOfvE5YkPTo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2156-beta_1524865026043_0.6856024221388783"},"_hasShrinkwrap":false},"4.8.2157":{"name":"meetup-web-components","version":"4.8.2157","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f5f790ae70b0cb4c089074cbb8e7503abb274922","_id":"meetup-web-components@4.8.2157","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hIh4uSTFi6ix01CqyMOK/xraPaYB4akBzEqPuidxuUmj6I8vjvjzG5G5cucp0hTePRSOluVo+kzDX2wpPlKnZQ==","shasum":"05bf959d775a58c282c8371a24d73e7966023d28","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2157.tgz","fileCount":504,"unpackedSize":6325529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa45rpCRA9TVsSAnZWagAADHwP/iq2yriLTt8h5HPjtkfj\nKumV7nmXOaexqn/Vsx3ucGjxiSQt27sdn7QL0hzPWaYMoshX8zCB1SdSzNA6\n54UbeM0hOVoJxds/7I00i/95YJ2MFHir/kbhOHHHOA7hq3WjNue798MF4z5y\nartoZRdtfmgz0EokqFzKbPEF/yo9R/Aqyx9KPh1kvfbgoVKXxoBQfp9GGiGz\n7fl594mxss44iiUlWrbIjD+eIu7MTGwFWrxQfuwun1ymD5AQ9DeziXjMColJ\nC6DvZW+INAWVHq7+hUZ24JLGtCMCGzjwXg1aQpktBPI+pnWk1OHRj/y8cZzk\nUaMJwhciEkQs/wANNtDnfm1gR3KFBUwWHBGCTV5mok59Jl18t3/au/4hDc2T\nKs4jHpvfkuF8E/SdsRlLgp3xrRfnIFEU4+wYh9gjEhO8FasRPOk0pPe5/qan\nOHP8ptga1JAzNuZragb8URyV9BZ6keo3CJiAFNL6rkwf4GvZfdNgzwk13KZR\nZnbq0oxYQphAGVWN30Rp8FU6mFRzPeuoo0Q6+u87ZmBl+Xws7sKv5t8LLW9k\ngNvpDb4Yd9t1g804ielANS3JCHuh/mF73FJBvlFDRPn7VoCSkpzkHq6bxR4h\n/DwZzzvhQWazAk/8HH2yJ03RF5qU+6ese8GpbzxcmPx1vkfu3hHszuC7KZwu\nDnMz\r\n=9wVL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG10jdW0D5DxUTFjDoWIlMEj1Y2wYLm6dA0liLQ9e+CPAiEAm6XrYV94kzrgBAbKqsVWaHwZbFli26bi1vuqTOjp3vU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2157_1524865768962_0.8078389772423182"},"_hasShrinkwrap":false},"4.8.2158":{"name":"meetup-web-components","version":"4.8.2158","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"130f0468d9c86c45ce5ccf5efe558ee138afafae","_id":"meetup-web-components@4.8.2158","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Cd1yV3hAf4t7CqsTcWSur2SJDuR4B9YlUALI5zAdjCTnTl0piCAhpQ4Gwwe/3tprRc2NHXS0vxM/ob7SbwAuSw==","shasum":"c22d8c25ac0ffe0f094fd96e5c5b36a122149b61","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2158.tgz","fileCount":504,"unpackedSize":6325286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa46dbCRA9TVsSAnZWagAApHkQAIPD6vc36yC8LRBhOFa4\njEGn6rAtR3BvIrOCzxzR90CfkRu8LkvhxKxJuZk/SEzEA3TmViVRbEP7pTu9\n1URosWsI2EAjbjjWkJjR0hMJCotiykHTLze+EHFNKBqPzLXtuu5o3sUPSAvk\nVVeFBkQBweDG1j0NpGALj1KJ/NFJXn44d/a/TmNkyLT1dGIDF60yCeR6hGBN\nFmjWt94uogttyryCs8oRT3tMes4GJtV2Cyj2DUE5GwgyIz9NH8nP3gzsygXx\nvJuuoqgUpm2gA0a8sJ6oPFgeAedEk+YvB2Bgq+AqmUeLtzfHEAFCAfWt1XMS\n8HVWPyGMxb81ZqBg4UGSwOJbVnF6WmzqTC32fZW+cgDfz1kH5Em3f0L6Go93\nfiDkF+XmLp4cSSf84eU/rmNlXrdAkDZ5jdcbrNpFwh/3gAqYb4iPgAs07IJX\nVvgCsYYcf69S3LEuTD/vn5VExc93jxIsUPad0zicYprunVVFITIGTZwyqAhH\nN+ZF34x2PLcvP8QbfeNW/OldHLQJk/Dii3oUDf+QbdXY7tX8joK5ccAboBDc\n9SVEn31kl5JCncdBXVubKD5whdP95oVRt6dkWepqbjZPtOijWdOLdGLG4lqL\n5/XDBB5YjOWxb33k6LIab8OQHNkbJOHzmwfZJlw9nvLGj/H6fUml4WwMbWxq\ncoH/\r\n=XsLX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEASbIGojPRBwXugzPJtzR/pJ0Fzrnrynn0+Q1OzeB9LAiBmVVGGCsY9zORFlFkjbYBKQOFHQI0sywMPQPZVY7Ps/A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2158_1524868955377_0.2715955589524084"},"_hasShrinkwrap":false},"4.8.2161-beta":{"name":"meetup-web-components","version":"4.8.2161-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0a4db76ebc3bdf88b3777eba64212cea1a3ecdd9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2161-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Ead9D1y2NjnNtpRz9gQJvhU1Y/s0kHLKe48nvOFrvbaridxLL0iGi/5EJcGMBOSq3f8qBdT8iWMvpQr2jjC8bw==","shasum":"304beefb619b60cf3e07fea0ec49879d93be5053","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2161-beta.tgz","fileCount":504,"unpackedSize":6325708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5Eb2CRA9TVsSAnZWagAAk1AP/0jpIBD5POyK+gV4e5tS\ntMqhmsLDITqpTX9+WxzmCRrFXCZGlAyTkmkxx5B6ddwIY+gvDZHDn7Tjvm2A\n36h8MSpe8Q0EAhFxUsO0Z/rDSzZKbGOErYvyuqUcI0+lNzfPmuHq7f4ZLrQM\n1JU10U++oTfRFE0Qf4k7rfotdc/eVEVoblj+RWkB6JpHR8o+6J+UWEzFqxvq\n2sl5x3H1/chdMGAS+JFZAiMZZ9Mko3vkRl563Sr61GL8x7R47cQ09NPjS8C0\nFKAin/C0+VU/azAhRKUKb1YHG6RZJ/sVY+g9LlV8MPooW/dCkyofv3+s33Zc\nWnTK7MvbP675mxwa8T+99mnZuWpfATiBJL+k5eDC7mnOTRKWr1/iNoc5IrQ2\nF5w7R3v9xbPQCp9zeWu1OTZHwanzhulJQohXlBWr4/htY0atA3TIrGGOZerp\nvDewx9VQHouIsufJFQMAivMGcidKaaWLjdsrHFErVmgSYCOWCsG2prDJ8FSm\n8czIWczw6+r02L3TFOiG1V9BwYPj1Mr4p5qH239FmuUTF3RpVPNX6hS4enLD\n8rpMzTWNIJuNsOpQEf6A5Ikzd2ly+ov2ar7sh4ZS1yw6m913rfYFjW+sPT9m\nNygrkAtI9fOesai/QO4K7DSJRjBqELUPmwPnIXgrwUt8MUj+uejho5FUKLbN\nywx4\r\n=BzS8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcynu5ckLeobXA3e/WF+3ixbS6DDzILMrtuV31fz/6hAiBcSqVd4KdmsE3N7DiZBU4adtbyttJb/4GSz6OlrEr26Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2161-beta_1524909814123_0.3150968121008908"},"_hasShrinkwrap":false},"4.8.2162":{"name":"meetup-web-components","version":"4.8.2162","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6bcbb2f2168e84c6dd835afc304393b7a83486d6","_id":"meetup-web-components@4.8.2162","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-BdxbR6S+fNVnR+zAjfmaNrUcwe0Aruz2AFqJIINNm9/dutgTHz78VvLzf5vH7x6QHQntRz7/sxUWOF6VyRqSNA==","shasum":"5c0fb815a8c3e3f27d146d0af55eb3a1138a1e5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2162.tgz","fileCount":504,"unpackedSize":6325703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5Ef0CRA9TVsSAnZWagAAIKMP/RAWd+Pz6ePD+uSJfLom\naMmBKem2OZZ6fXjB/lbhf7ec6rGzOaC5yHt/IuYprXmr7/D/EBi+SCDD2wOp\nU8ggCmUEnr6iSITljS/TQprA099RoR/dyVaRB8wkblFESbGJuExHKBFyi7Ba\n4dXS9n+RXbLE5kTs8SlO3grh5wWm57mnR4O0rodB39LtQeEujKVSx2fQBgBu\neWopm5coVP8AvHFag52KQXBOoLLzu+6gC8pasxXobzR4MS3aT/cI0fuDtBVp\nuPhI0obAIMEZCcuJP3Kd9XVAshZJB6bJgaABYGM19Zkd6GG3qAdirW7wTnIO\n07fj36OvQKeKAYQ1eMYakVxav3Dzzey9fWyrMZm1cu8qfW/hKpav4eKfGQVV\nbTjyM1QozlpOULdTsXEiFLx2f0VCziQQ3ObIUPubY4H462u0tCqlR6METfVb\n3nCAew+qNyVlYgBscBmaDGiGEIBhqqmEp9rVSJAZhCBqH0IPxfUIW/0Z+SNB\n2OKwdb7Go0pd3C7jRlDUsdGXMXCNPzOBo5D2qbAUWSRelgTFOf3EBrugfZrl\nw/9XCbDb53BelW2zdZtWVmuMq/E28ZL2JcvR7/1ul7V6xw1vtxR0FkC4c9Zx\neCVTHRo7YloucL/xv5jV9xoCDyE+o8CyWWT5WYMRluocGY05i2ceOF0+CzLx\nmeKv\r\n=PEfY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAajtpp7TZJPUobD4JJXMcakFqxAZQ5md6irfF+NwvcAAiBebijaMrDZAO5kR+KtkB4xd0MgYXvHjBOBt6Uyrt7mRw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2162_1524910068533_0.9888664115351304"},"_hasShrinkwrap":false},"4.8.2163-beta":{"name":"meetup-web-components","version":"4.8.2163-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"de921d531a3fb7fdbd6883ebbcf82a80b56caf1e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2163-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-g9KKeEenat9/6TsDPcOeKhKVgmH74U2NLPPFnSeSkpyBAoTi0WE5ZoeDWzI++Htu2ccy/jCA7OLy5ke3Z5lBew==","shasum":"abf2b09fe4aaead6df7087f2e0c3acd776128b1d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2163-beta.tgz","fileCount":504,"unpackedSize":6326093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5yxsCRA9TVsSAnZWagAAWroP+wZjipyjsBQjn2uYwipF\nc+i3JiAB+zikDdjwF2HbThmEBRTZfEbpYS8T2FPsdZjk3539Y7h3lgUc7KAK\nPB9gFRHlQnkdMRclS1bm+k67t7obfpyzM6sncrZ9EsTgdpLv3iZddvR40Pih\nun3DoZq2u9SxnQDeCCfYo65ZS1ZYO13IPhl04KCDO48j9Z1EUkt0MV67TiNA\n2bqahAOkBpC9pYzHqUqqqMLvCbkaRWSDnn632rSZ/0ptyJkZ1H1WxfUEExfu\nI/rZAQnj9KKLv8QdadNQ/Tt2b7tt9cWqaKlhR2bDYfPOXqqUv9OcJ9gDJ6mL\nPmbnrYXeFihrSBdrqZJ4uRW8MStOpnL3N1boqP4eHhU4eUeGao1KKzqpqW6t\n+vSkNqvlHkiM86+QF9WF2j5zsUYiG9ksYpUZ09PE/bmjZzO0ypAZGFTZLS4X\nuIQfDSrPW1IdtBwthm5WEyxTd0IHgHytiKht4aDw+hGuNtSMI+6/K2HGb+XA\n+86s27vp9rcCmqUp9oUiybjmRzZlritD+2qaB2CB+Zlk8q6Ipbo8M/g3C0N4\nf9HJ2sDZsDH2vzvo2aIU14l3g2vjhF7TkjheYRc/7kLWnrI+zZYPusQRHqiR\nmtp+AxG5U9yF+aFr1Ndd3yt4+yYQr9pbIKNSOsWcLadC/61Q5mGKXa6RJQGa\nt26U\r\n=30uT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGp6W2RpO3oDFJ/qsqm0kjMVZT6Bn6yPXWJ1D+KdH8RMAiEAuPBWD/y8YQYWFXaT2i5CkVMACA6W3KCRahNFZgLDnKY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2163-beta_1525099627693_0.47223740870972675"},"_hasShrinkwrap":false},"4.8.2164-beta":{"name":"meetup-web-components","version":"4.8.2164-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"488632aebf4177e196e99641b50a4c81fb78e634","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2164-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FY0j9ZAWcPP/cx3rMWSdN4gA8JtUCg2h+eb4dwx2kuWLvL92zTPsz8Ob/qF7LJILwQuDn8dW3T0XC3rFu0RoDA==","shasum":"c0d0ff4a3a8d52c43fd6cb5bf468f9f1801138bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2164-beta.tgz","fileCount":504,"unpackedSize":6325607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5yz1CRA9TVsSAnZWagAAfioQAJCGBBk7nl3vxFJjdgUO\nfO//Nrd7Mhy+vxaZFESibBGRuCwTnjfyPEObM0Yvo9fKu6Do9Q3Brui1y9Lf\npK8fDgI9W3J50XjnUQB+NkAMLFZjIgodNIx2fRM6nyBmSwi7d+wftY+q55uz\nICMWBfF272gbhzYvzkgzyvdJaw103o5F2HmmsT/tZKn/gyBqAXnphzOvRdFw\nEXv3PQJPxWlrQn2UtPNNXuMITFbCOrtYnsPehuLDYksUK1VCwT6VSMAjoXb/\n7nZJDa0ajP62Sn/htepeICY+1roPM5lYKkXbY/M+PC1LhogY3MIHb87V09H9\nHqPdir4S4ZmmSHvY4L+pJTvj2516cjJeHfAhFKjJKDAeCfsAkalr+KoxkYcc\nnlZeeg31uKmCZaodmfYsctQRGKPMrMTLR0689pDinJLTLMl6+KWNkXQFMy+u\nZG23AbvKBGUaP68RLCTStLgIEAiAXuscVqPdSPXn+bId46G6ypf2tqSxbnYs\nJT8tQeBsbgpO/uaFmtF94590tGrFiznaWmxw+VVpHYX3OExtdODPkeZFqpdI\nrn4pEJwoWvi4fJZzIDDKO3BN8tc7/N0aX36t/x/zSaDNCIhW9cIxB6+zX83o\nFgSXuCyombn6uhq/+qtrRzW3AZkLpVKLwlCS84VzJ+nGRIUh5losoSj5Bxwj\nNxYQ\r\n=u2UY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1/iMTcH1EVTZGVIzn84i1VwWZvN7142C4tJG+C/anRQIgUdpjN3Zrqi5882l7q5KFzKsk1WKR1+Wa1nfG4Nf5+bE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2164-beta_1525099765432_0.6601422615320847"},"_hasShrinkwrap":false},"4.8.2165":{"name":"meetup-web-components","version":"4.8.2165","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a70442dd5bd742a234bbe0817956cd8e7af2bc35","_id":"meetup-web-components@4.8.2165","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Dl+mhKO4cwzW9NkmJMGktpDbeQn81EPayo7wnF/u2KZFgoZO2h2SXeZAFoVAS3bDxEASMC6xGGr55lHHtq7fSw==","shasum":"88277f62068b2a635d1ba08ca22723ca541c2b27","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2165.tgz","fileCount":504,"unpackedSize":6326088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5y3kCRA9TVsSAnZWagAAgcIP/0FzJo1Brmr03rY9Ja8F\nF782RLZM1IgmYbaOmVwOICwWfH8ID9AvS4ThhHpkxIjBzgj0LapUlfbAjMgz\njfz2SW/WF6/TimHasUetMwERD7jqnvgrEt1A800w1HOlSXSZNXrTwt2H3fQN\nk7hPIhqU4bKg2fPkzMeYyACl1jUK1aP9LmWacGNk5G3K55UcMRagH9OF/hm7\n4FekHdbtBqVqXEigMEJ8LgwaGp11ycMo3YY8pMJQr7CWm3Pdct5K9PcvEGr/\nOxB/d9ylTYdEpGS6Mb7s2E/y93GOcD8X+uXGxDw2lNT3qKRLERJA+FsgSvN1\nKmoUuSpPrS1Nf2dImkuhBRdjV+EdYE8+jTD3LcxsEJv8W8a3PPMXPtinQJZ9\n+I2C1XUYUF40fTjnKsJEyVuhzlchFM+152b39R8Gnz+ie8d8gvy6NS+eBsWV\nmhT9lTk/AIOSSyL7nAcv7Ed6fspo2etGDbK2TuR8iF2i/LOzllDThJbKgtWg\n2+pb6GWFPsDa7pmd7KedURk+skbx3IyuHIduCMcRGVl5JOjR7yqmp+XksVFf\nFuRhbQ/ZEJNGReVI3/UqOjMCGC1XUXrct3qIJTnhZXDWruuccRhlA9z67e/P\nkHFgoVz8MGL4OuEeH6pii+hcQiEdrQy6qfVDlJnrJRdUkYSSj5rf5TpVWhRm\nBTYt\r\n=li+F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6aCxMRoQGBv7RFq1JMbBUU5UVBmnGzS1QI3WC5K9WZgIgY4v93O6zFw/PjUP1GG0T0uTUr7zoQGZVyEIbxL/sgZk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2165_1525100004454_0.2674410219653065"},"_hasShrinkwrap":false},"4.8.2166-beta":{"name":"meetup-web-components","version":"4.8.2166-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"86c4420184a6ca8bdcdd05e55540f4c4b19873b7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2166-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Rt6OMBN/U0t1WFA3x/MyKdbVYcNnOoHeThZI1eZuXOp3dNFI6a6GunY070Pacnbt8tLI6gvEIANwg8oIia5NAQ==","shasum":"63c7b5d8d7c1fb0db82aeb1a91194005293c7e69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2166-beta.tgz","fileCount":504,"unpackedSize":6326573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5zdsCRA9TVsSAnZWagAA6n0QAIJHkCMGSsXmVXe1tmF+\n/17jnci3Bn/rCnV78mwspq6ZFrWQWPh71yRiziadPTqPvq1mIK0s+gD10wo4\n+jfxBm+VxPuVN2eCFtWoMDdsBPqFKO42Vcp33Zxt6+M/BjyKeJAswUzDbut7\nAx6gRHUMlWTnQsg0YBB+aLgUPRuX8MQecNwcVx6NxPthWf1DgepFsi17jHDO\n9oKAKPGv/zMfbqL1DeZzSogjcNM6EbA70vVGaMr2nyl9tzuVQFzb4PRGDQMt\nO3cDDd511bwryx8xFIqceqtZrQ8/1izBpn6gCUQejsCaP7gaJbFnv7V+Nc0H\nqCvra4qY4Ym8jK75G75m8yS3ZsFR8BltWQuYwAArvQTBIsjv7I6wENBcAjsA\nYho6HdrNNnt7GQEcmXOrko7HnQz9Z2NzrPfeCa4EUGWTAxfyvouSsnielBPq\nygKywfz6sikk71alvIcQtnExaY+i4p+5ajASvF4RT3HjMxNFgSz00FSjvIlE\n6r9R1i28zoUW+q10YyoNvfz7pV8LjYHsXkDGOjfxrowMd9HEmHy3turPRWIt\nTEFh1GnG+4tK0VJ9q3nDK621q4hrpp1SMG0RmthXvqBneQHyatEvdpbDOfQR\nAPbNhqHkRyDV06ZWOzBgOHXGHT3m391JOsfYZtBwmcUD2lhWVk9C8hb/MDbf\nrNmf\r\n=STp3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdPWtDu1T/fR2Q4CxJi49bLuli2R22tjz3QDDnmLk+lQIgHLzZrWEr5W0OUIlU8VlXM/DTrpqBTY0T51AGnQ2eKI4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2166-beta_1525102444100_0.2977972846136936"},"_hasShrinkwrap":false},"4.8.2167":{"name":"meetup-web-components","version":"4.8.2167","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"5defacf13afbc62cb03d2a50cd7e69d149376740","_id":"meetup-web-components@4.8.2167","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-V6XHDtnu6//suWpCLgqBxFAp/PAZZlzTghT8fUEvIemACF4qN6pNqojEgGigYIZ39i3i6yUZWR83iJCWkCrZHg==","shasum":"722908a2408a2aa6cbe0dc570b502936cab1cbc1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2167.tgz","fileCount":504,"unpackedSize":6326568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5zqtCRA9TVsSAnZWagAAyTwP/1+XiCLepq3SKVNS25t4\n+DJNLV/0NGSMj8dRSX/gIGIJBabeMtR0hWm3SrNf3TpJgrSkxVfI8Kf9DNki\nlMcdAOtb6TR0ehE4DdeBp4bjk83aQ8wmn+FFenuHkpiNzI4X16XqB0cWjcux\nxhs1pBfe5/CqTv/ke5SDpfpKkzaxdS0aD9wXTmewSfFgmDNhFbBFWoOmk7bo\njzJed/TmxDdK/MqcX4dv1po2mJi66zbVf8atr2tkRfDDzW0vMwDXil5Eibhs\nEFdx3PLtIGPUiZP1l8gRjj7Gsz0WRskyAVUxQxD1KxVlhXWIndPTqdwfyhSh\n+rTK/HLyVxv0cp1ninDup95bpNI8Dpw5nwfp+a3ZEf6+KSMGXVDq1CPRoTP3\nB5ZsHWft1iW+ybXrj9O1xBD3NAo/e89WH9oNTLpnkaZ9gsYzFkanRwjRHLlB\nX6pZKkHUwRGJGrQAK+TRyFdwS5kAeAnErVtGbCLhX/fwEX+F4Uvki605t3n/\nuQpdaiuL5u7oVCj/dGmiFf2ADk+eK9GQM9CqbbukC90Zul3w/3BFSw2xVz/8\nSzVyQcN9K/VXzd96vNDoChy063sXvkbymjzwqtS6U/DVMeG5HP0UZfAofqYJ\nQi1Ika8fq9KqxLQ9bUn15hJ/08tJsyo+qZN4mU58BzPlupIGyVvqU3g5cwM5\nwHEv\r\n=VMV7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFz3CisbjnQKzx2dspwc18qdGh2GPYuc+zbZ8/T+lj0AiBtKFSTGxN//QLX5gxNNVNuzDDb5xUaQFvbG23871LGKQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2167_1525103276821_0.33873527447694274"},"_hasShrinkwrap":false},"4.8.2168-beta":{"name":"meetup-web-components","version":"4.8.2168-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b264ae2578dee87733f2e87c2fd0d7737e6fe171","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2168-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-byx5VWb2CG207KJguoDZ8D3Ufcw+jUM+OKJhxmAA89x2IWn8fwy/i5y+TGLZdCL/cXeEEHkaQtif3NQLCE/1gg==","shasum":"e9e9ccbeb6c4c8db81cc59044d4ec268de916fad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2168-beta.tgz","fileCount":504,"unpackedSize":6326555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6kcCCRA9TVsSAnZWagAAuekP/R4rQ7thTyNU9HE7CK1A\n5eyl0FhALXDGko6FcpPnpGM5NEl3/G8hgtwGvFNHuCRjYGpZ2Jwx54r0G0k3\n5yjLgegJV0XLWyNnFcXKmtQjZ+I9TpeuwqB3tIIQrhtUEUecmGnYmi+LlVkt\nc0TSr+WIua25EcVmwQ0L4tB9jMO3qEGzXUf3DgMKGtqqLetYimgKFJ6noBvQ\n6XDmGa3gkGfe9OAE3soxkH0lPFzgShCi3OSic8aZyGk+EgVXi86oJ4ViQvDh\nh8fMGTfS1QIPfOQGurL+8IrUfNu1VPSILjzgvs8/6FkR7u4Xd3e5icmlbUYv\nLAihh+QTo2imrmvqZ97szI0/9dLsdlQ1vkG0w19uKk8bzV4kvasesVzxeTJv\nHS84gbJrli8GGfdmg4G9M9uKD1h5jGwvExPeCwaWmLlt1N5VquWv6PGZ3iHX\n5Nat8ViGPIFXh+JrIiG/oI9LxQG0RLJT37dJFD8XDYLD9oFNeWItagnmXhuX\nXYA4pLL+kZ+Rrtjj5PsTSb3AFhej2Jlz5oSWNq2PlZdyyNXA2BgPZSjo2bUU\nwW8Bbe4D4EMRcmO4i94eQ1W0C3jowKH7HXsNpMCo1eGqtjLQERoy05Ks4WVc\nm+AWueyl5qfCrRqS4YgkDbWGLw/85QAm+nZZk10OnJ5Km4GxyABNVcPSQrCa\nnC4D\r\n=WNZx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCg1z+hTVf28zdC4OpLZHd74PEfv9uV3bHP+0MRTccPFwIhALtQdL2e9pxKcylR6oACad7/hF6aGTqum7yuuBHE+09A"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2168-beta_1525303041727_0.542446074046188"},"_hasShrinkwrap":false},"4.8.2169":{"name":"meetup-web-components","version":"4.8.2169","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base -- --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.8","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-router":"0.3.2"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.2","@storybook/addon-info":"3.4.2","@storybook/addon-knobs":"3.4.2","@storybook/addon-notes":"3.4.2","@storybook/addons":"3.4.2","@storybook/react":"3.4.2","babel-cli":"6.24.1","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7baa07b4bbbba23d2cf91626f1556cbf9805b7de","_id":"meetup-web-components@4.8.2169","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Kjqw9FXji88xzLslJZODGXLY8l83DBjAUJxhSC8L+o9E2IMdyAhu8PP8WZC8h6GP8CFdA8D4/FYY/lfKT7GgpA==","shasum":"ae2482898ec1ee1346b50f4036365871529d9188","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2169.tgz","fileCount":504,"unpackedSize":6326550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6kfmCRA9TVsSAnZWagAAm9UP/0LYhatbBU/y0WB9dfjJ\nTKCwdzNDjL+UNycHiNuNGgZpWn7ps8WRo5pefFw1Anf2i5M/OKxr9G+nIZLR\nT5ey+R88Xy0R1NBphhJ3wHJ7pVIexqD2nwqPagFkMs8c2UWxiAqKRwvIL0hW\nGQIy0fHOi+4iwVQu9BSzM7tBOfwTXwQvp8mLxkZkY/q7EPxkOmRgOchBx48f\n9yl4WhXqWnsj6Mx10j4F5ngfX2rIw4aVXzn8UpmSYkw3Ty0fg5NWQuV3CFxa\npH92CXMOCwQIa6PgWayNNkvS/FWkaswVD1erUrM6pOmx2C7k+FsK/l63ivAy\nCrxuDJtxhtdtRUoe2ZDXL1IIv0X1wj0DJjhLbX0Qp4hKRmKawRiJ3dFOLFYf\n1zP7xq1qucz4048iqmLv3vnbxYYeMhvWZSCzKPohIfkm9jTt4JjNGDL6YT+5\n6EZyfXREFqFvyx1fIjdC+pI8lU54FQQxQY62cXpIY7/HSMsRp+kTUSgCZcBo\nGFf/QtJd+Z56b84MFKsc1gMU/LginPbdxlr5BDwMggV2myHgyQfCmCALaC/h\nJ6YPaMKAtO1wRlfkm36owIqB5CBYDtBQMEVigzhPwtQu+lwzehSVASRg+xRA\nhCmt4KxCd3U7d1YQ1pbawxM0SkouijM5E2vYcaW6MeyTUHo+hfeHxGiznGlw\nAHwf\r\n=X9CA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiZ7G/6pBIa2eTESz9MzzSqcXLCk4xDo9eOf8rASAsHQIhAPofTaq2F9iZR35Xri3ypMhXasX8QTB0jW7AjoAej9TQ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2169_1525303270388_0.6847672048552764"},"_hasShrinkwrap":false},"4.8.2170-beta":{"name":"meetup-web-components","version":"4.8.2170-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"21b43de5be803006446cf4ec4a221345672bf5a4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2170-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kINmFt1mfMfgGNqE9BDRH9SuRwep464MO01+DS4zlDUeN6qn4zlaZffjfI7iELZcNKM9a16x3TbC8oDW7BumOQ==","shasum":"727f65b0176645f9b46cb42931a4d9fe3cc5ae2e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2170-beta.tgz","fileCount":504,"unpackedSize":6099203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6ybRCRA9TVsSAnZWagAAOqAQAI0Ptrb9swAZWokSskxU\neA6OXrgvWAuOSGGv/2nqcd0kU69ovFvByl3/tPFgCUvzqviq5RGse24KmFpH\noqhn0p/zuQCRzD5r8vId1aormZahmKaIKytaluf0m0eC0jxJxE6lmyIEV4ZQ\ntCErs8C1FlqT+496TBdmikFl3KVi4rsNCQV88aWWOQZT6jqiGd3anX3vbqYW\nrCZH273HLcKSwi15gZfLyt1+jcGbuGaqmqiDx+9Ik5IZeMFQ16z+77P2E1gj\nX6MXtf4DEMhtsOszamdhxHQ8jodDPTSd79Gtdj3zeVjSPjmzAKX2BbTr6CMK\n77UZZirCcHehhfD/6fAcMRkHkkEW738ZIl+4xi93zt6JTxpmw1P7DeQqv5we\nvXjqrOigeTc4TwgSP2zK0rlNVsvvoKi9e5qN/NPDn2tG/RIBkt/UENEtKJOC\nq58Ejoj6W+SrCBXf3y41tVuO0+LwdamFMGOeXMyaMOF/abuDflS8bQ9NlCAK\nj/XCyezjeoQI3J7HQcxPKdfQgZ/1QKQAvJm/A5DVeFFIeoDRXyToYcOsb3Un\n665QIdWV6WPqlQXovCOQ+EGGn06EAUk0xYWsZeM1io7D8xgrkZFnV6I9VuR9\nP1HA+xkmqMGqHQz5s+DUZtDE/o4h54HscwG+F7MjQtqTCtC2pki9M2zPjOoJ\nbky4\r\n=B8fa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3DurYv4l3Xm/HETZF2MxUsbFtnPWDonGmjOiS/daFgwIgBmIV1btXmWPNKxPp8Uu1Cz5SxYNJ5U5IBEnkPfi5So4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2170-beta_1525360337187_0.37042789649188923"},"_hasShrinkwrap":false},"4.8.2171":{"name":"meetup-web-components","version":"4.8.2171","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c6d8dbb8f828201df0214f4db99b2515a2fd6cf5","_id":"meetup-web-components@4.8.2171","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-q9+aLd7rD+8kZe+yID7dxL+k5j44WJSLElcLxvwnWGuHTbj2odnyftfik51Egj7KoOIf2/v9srFa+jiOxognHQ==","shasum":"74266cd72455bc9283af9c8c8114a2debf1f10b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2171.tgz","fileCount":504,"unpackedSize":6099198,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6y7KCRA9TVsSAnZWagAA1ecQAJE8eiejQCq8mDbUc5lZ\n0gI0IaxHyEUUyZ/6kt7SW/X15KrNgq8jaWnhMMWvYrxQF35049i2wqfmES2E\nAs1LKklMsyDdwGEo3e5jIdDTNkv5Zf//8MmvyQgSuJtwDUREMl5jwXYnmSPt\nCYBIhV54fckpQLcC2WxPdnXtTcETF0H/3KEdzxGFX8ms7t4E1ORSWMizoMNB\nV+BY6UPUGTLxHLPDcILhJSHoCJtrEMpLIasmz9JfUIW7aV9zFq8hMDvUXZLl\nXKsogPShNlFv0dsvGfiEMhoLiSukORkE/ZeNeuY4rkFshVCmxLBXemiOW0oM\nFwu/ad+GlJCRRr43Cmr4V5w+M2jqg8pfOtl1VpDwEhluFJ4+Ocxir33VcYFq\nEfokrFT+iaGtGTbINwfyZmmfUIvGmGnEkA1HDvmmCvxy4TWDs9bHxVdPLS9h\nYLmbU8HVSFYiYz8DqzDXchhbAQzfl1Uj6pWw+HvswH5BAVVjM3w8DekzljSD\nQ6/9/lY4Mqx/XjiBRkzMZ/Hx4MGfxvBqs3KUfeh57n0lHAG1mV2ICcgZfCC1\nLtEPkxujspauKRFJ1kucVm2U0xsWLkd47EYCcu2jCUcm860WSdHmnjK9q5uI\nOLfnrC6Dvg+Mv4sw5RVKGfJNTmsnzaLyqDNjARmk1RAA51yriAqwGsaBPAxZ\n7jo5\r\n=RLsM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBXJVSy1891Zpz4py3/BUWrZTijkk7KJ82XU4VXkLSAIAiAXYEu9w1j1Cn16CtOrRDIhM7JKWuqMKTLD3NK7q6cfbQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2171_1525362377854_0.9204332115141869"},"_hasShrinkwrap":false},"4.8.2172-beta":{"name":"meetup-web-components","version":"4.8.2172-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"12dc8736ed9dd5d7a42b19ab8b5087f227998e33","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2172-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6ZdigZ15vBECsczS9szVjgew1YmW4GRFZPK8XJxu2tZ1qirTDbSBOpdJB6WUt7qnWq06EDuJbOLSWWaqwijqhA==","shasum":"a649f167a5c28ba44d92c3c89b06cbee45e3d91f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2172-beta.tgz","fileCount":504,"unpackedSize":6099630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6zggCRA9TVsSAnZWagAAiJQP/178Jsd6WEfg+CE53j3O\nRAf/1ZQezK2DtkIFqnERfJeDw+/A2zDxlC5lnMw0rQ/ByNugSK9h48t1xn2y\nn69yyXf42oaCvutgsni4NMRdnBIyKWwDL3Lq3+bEXy5dBgq6Ws6xlT5XEvJ0\nNJFG/kJo7abs7JV937fqCha1egZ81X2I/8NeWOdr4G71XYmdZELRXCXwCzH1\nSd6s0XL7Vm3d3S5Otc5m/+bFIBPBghd7cmohPuIwx8Mp97Fu0sIl168SEPIZ\n9vVYR7A3xpcJuA62CjRsZYIGtpxtC2vn8IoIbOJfgtxHvWUkDiE4WGT6yVov\nVauEI7/HtSaJsNJ7/O/drkg1XuL9Z3+u+pPfDZb4c2DiddxxXG6VO7OfiPSs\nmXq638OZmMKwWLEd7Dui9nilCZrKK/IfpEqdjnIDc/dz0wUziHFjE9Mv9EuS\ntv5+j3cTk6YT2AJt+ZKbU/kr/ZZJA+B37MUUKXhEZTKS3Wd6Sa1SyIZsNyXM\nvgyKehQR9a5LsKfNbM9GG6q2RDzqYKTbN6zUG6FivegCPSpZGj7xhLPNzOVL\nLbiafkSFtv2CzMEqGDj5jLPy9tF/D0V/xAkfBro1HzrmvqLtR+fdjcftMeOs\nBBfGUj0u/468GvDCFph3bXU5vunG5GqzUptUkF1mVMsiBBe8+idwV73ENAHm\nXxi5\r\n=9VmL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxl/JLMdijA5v6vGx9Yh9oGRYq6iypcWzh+4Lk7tbP6gIgNYqz9u4DWXZN3F8O981uvc6jr/eufyTYGWaBoworXnA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2172-beta_1525364768059_0.2279090106374031"},"_hasShrinkwrap":false},"4.8.2173-beta":{"name":"meetup-web-components","version":"4.8.2173-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"799c8238868d0ec448b57655d0bb1979999ea9d6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2173-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hORz+v8eb5vLadGlkSxDx59LWom0WvV3W8zXrM+IorhoxoGIbYwxPUoOkiaLdQWJ4FyEnUQknzUEDpMz8PkiMA==","shasum":"c5c9f53a5e4d73861f51b02b49fd1f82bee980ef","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2173-beta.tgz","fileCount":504,"unpackedSize":6099642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6zsvCRA9TVsSAnZWagAAbScQAKNxsf52A4ORJabWBoOs\nPj5/AWtUNITbk08ftzzsCsduQRB1ocelRgmq8sEgQ5vZakdrL2mioCf42wI+\ni1s4VbCy6zsdfTAo3WdaI4cAp/BVSWuEpdzTJVoGWAExWh34eZMiy6PWRsFH\nty4ntPygE17/Td8w7Ywq9/BByE2mgitDhdMMeZThxnaNzoAXH1w7NwbfOEuk\nsRyLNMdya4gXH1jD0YRMN9kSDn59yeW0mTI5ivK02Hh91sbYQs2O5BpRVbW1\nplgWGBhBQNsKJn/MduyLIksvDPn1xNQqysIx+ps58nW9zWGCKOdbBXBnOiDX\ni9fafT8ZExjIWvalSkfAMSf6zy9s/bWnTo30x75ieLx2pMFPyel0WIyNUwtu\np2LgD3jS+3e9Agk16A44wDGj45rzhR1/tm+sDp6pIFFXwClKP9NJo48/fz/L\nQujPBG8HjRvk2daItWonSflW2tk5HPP0gl6rv3rN6K1VyLlaFFmVLX0oySP4\n6RFy2jJfl1kwAkn6QirpVu54w7TJ+O32VgR4bJfB0mVZXuZDXrcTpq9SgweS\n7YGxycA2iQjXw/rCkSUH4B6K1rB9/+CBiZCTeeyysd2FVXb/36o7JIL8z4Vj\nPb3xVGFM8+dU7TwBIyN00Zp/x/QCGcRiYYlqxFOhEtD/6uJ1JWwnx3lMDjZp\nGSkm\r\n=zg/I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4KvHeJ/giqNhhzvgCTCQLroQsdOgJ1WTztUYUlzxjEQIgH7pZ87u1xAlcdFOcGzO4wOJmxR6NRQYQdKABuDv/G+I="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2173-beta_1525365550732_0.5495844980450819"},"_hasShrinkwrap":false},"4.8.2174":{"name":"meetup-web-components","version":"4.8.2174","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"405eb2b23f8a348e3db1797f938b851d5b2b2ad2","_id":"meetup-web-components@4.8.2174","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-o4em0N92Eaqlzytjk3KPK8xtkAgajdo8DG7k3YFQgk+af1C7UzUYlRC0x6XxHyATv9aKkPkpCheqxtIeyd5aGA==","shasum":"0d631cf74d6cc18a05673098a7558d1fe7e93ee4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2174.tgz","fileCount":504,"unpackedSize":6099637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6z8CCRA9TVsSAnZWagAAJSIP/ilwUhwNYE1cb3ozQIWQ\nJPsQly298/nAnv1IORaj5GxG8WnWd9d3/wsNgeC51rJl+z3JP8AtB3G0ZEDu\nKNSZkuDwCZgDnQ1clYJ2e0utYcY1q9AiGzwv/kpO92cnk3tFKQd3MUcVnboE\nEqCCh6K4C5xbdlg0/oCnA7h7eT5zvWkTGHHkFo17f3mHfxxgXWFLXGAOIA72\n/3/SvMZcwr1zX0lx0ll4HwTFIsCY+YDU3AA0vFFyGHIO39PF3zpOql7jCbfy\nhhIGUkqmXQyuD4JIkWHoDq6ttt4HHBo0A+Vp+r88a6vBvu1tTiaRKeTYupwc\nHxzMboEWHC/oiEwqoJ452+BoNbLble4UWAQ6SEfTBE/qMhSIMyWLOSM+DfqK\nLTc6BCEccsRIfvPbcrOLy5WafHZ+IbEDrnV9aw/FrD7fZXMJNGDLxaIwWp5+\nCJHvkwYiplyvQy6WfABWqRNKis/tc3mFiRi51ks00OVtd7eSfBFyWpTK7bOc\n0gdbrhn55bJng++W0Vj4cDdCkq8sXx5+j5O+nVqI93hm7vR0hRX4FicjNudO\nYUznxsD+0ObjfRE/rG4HlHA0LtndVVeem0DKlhz7231FQK2fTBDkBbjKqHia\nufHmcldxqlpk9gsnO0wqXCuo7nawY7DTOG4xhT9wOowHVP6HwFkxA/kzHljY\n5c3M\r\n=mqzU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDX4TGyXjJSMjiU6MAjlIbdqqHlCizioO3GXqOjEi4SNQIgRq4mx546V2Kt5/Ujs8/ODtwLK6/nElt1/aMgCCqzPE4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2174_1525366529200_0.4490025384333616"},"_hasShrinkwrap":false},"4.8.2175":{"name":"meetup-web-components","version":"4.8.2175","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a2beae77ea247f601740a10a6d00e184e07525b7","_id":"meetup-web-components@4.8.2175","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-u5R/JB+IpJTY9jLsMtxJ/B6sstvgPePJBguaJ+I9GmS1Sn7NChtl32fHFEr7dBiXN42dtsVFwRuZ9+9XJEf3NA==","shasum":"f56800cf50765baa34b485464e3406e9e8271f69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2175.tgz","fileCount":504,"unpackedSize":6099746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa64t3CRA9TVsSAnZWagAASEoP/0iUrJrtSvlyG70+kR8e\nyZ2rVR1xMysCImAGwBoKEDE+PvAS+dZ4kSQ2k+d2gg/VlhQ9t7WS8XazBAiV\nKexMtyvLEHzd7Fp57zibNoxqcmR+t7UrADfTyPNVW0UQXbYcrcfjQ9+1T4Pe\nZrJ/KvHxWCoTY3UUex6n5n9WVGec5PPJ+uUWRx9Kw/U8AmeTiAmIITjkYWyr\nsKpY21zBgfCWojOmTltbWX9WbVTMHQ83NGZQajRVewXFj2EjvXf7WGJAW9s7\nLAAuA4TDXX7xUjofUWBHIVVsvA82G0jBY08wqrM8ULLnmumkGWCvB/GZEKCH\nMAnUed0N9u3AGiu4iNGAOK3bVBsWMYq08jYSh646u6RymZGVBsTOGdkrUc4m\nyppdH6YuFxQmyvQJ1paun+4yyu2UKjM+EmxzfqUL6eRMXCJjFzfw54vRWbsk\ngrk9zBpDSVG/Bk/xDUpLTP6VpHfSEX6VfHyA56ONq/sTlXcMe3HIpgkeRwNX\nLDPDzRTjVsjjoacRqF5ebsM/IPEZvjXYjvB94Oe8ToUcS8XZOjj0GFe3JD/t\nHRZ8MjX9CaLXHP0PqlnD4xcVAjKw6C16QiSc5V6IG9IiKMYTmGOPL2vm8h2h\nlpgCGhwW+jf5wiOUzfXoxdkFHCBB61KFFEozd1uTaqD6hHIjAJykLbmie5A2\nOC/T\r\n=Qvl9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtGdYnIfEBGmNYIH8GhF+vbMMJan/IFi5clrWJge94OAiEAq7i25UrjC971cdE5Kxkq6I0ByO+ogpYdv5iyuCJzpEc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2175_1525386102819_0.7780526839093407"},"_hasShrinkwrap":false},"4.8.2176-beta":{"name":"meetup-web-components","version":"4.8.2176-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c0951102cf97a43c23e952a665616942c135b6a9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2176-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UBc+zpMRRpmLjNrQQ2wRipgKdAg+1U0EhwRVe8Ki8fzoIGd3YUu9gC+OKuGvPM+MkWqgjIxDx6ZwCFrRkYm0nA==","shasum":"5b8b85ac2fd7128c318e014ea126247cf76d0d64","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2176-beta.tgz","fileCount":504,"unpackedSize":6101337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8HYRCRA9TVsSAnZWagAAAygP/0kg1/MrlAXoQs53K0Rf\ndfIzMjtxbxySPc/XVdbi/NZGVUAx44lP6tx+5cm1hdv6td0jCbIno8MGGbAL\nugrSk8A1ORXxLCugAzr1Kc6Kwv3sZdZj3R+AoYgYrkq1fcZ1uz2XZvNwpHSc\nZ+M3K2eOVMkU2WuQmjAlNZN3WxzRyU+5g1+evueDACI5PJMHmE+oVtH/WHlL\n1Cfodqk4MHe4f0j9lBXnnml5VAMbc+LZy4Id9W+kla54yQHGiqb4/pMU192p\nhR1moGlISyGiFdSORlVgHfA9fo2lsu0xV7RWt5qbakpMwpsk0GNETqYDqeAj\nisLd6DADH+QcuJN0oQF+wFK4hqoHMWbwhVRvaVkPy9c1HJxRFHABuyBWCL6O\nx0M1c82mNlMqM11UGpMbC8cCGX1YQrBWo1SzcxhvNfzYOanx5p06SiEzZLOq\nYkOHKwvTMW6JNhfHjjJ2pm71mjN6xubsboeocWW3JxwqHxo4ThUrLBmpRdOc\nY5e17zjCMfXcztdC8/4VVBEy0tbDT6G0C8iT0tVuOHwX/rULVNJj25vptNYT\nzagdHehClGZDYzProTZUx5lVFrF3eKOE0RE6e03G+zFToU7C8Fm6/3xDvtUL\nVpRzvCWHcRieoBrVuaKeOayXSKW7qSWRuyzZXxTU16K+6m4NRlwc3qMB7vRI\nM+5/\r\n=7NhC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC4W7VaK6JgceSrWom5/VZyQ8uMt/RbSkt4bZPLp2FQlAiEAu19uNYY1VuFTLyPNPHMkAhbTW2uWrxCL7yz3wn7JtYk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2176-beta_1525708304817_0.7241584999821142"},"_hasShrinkwrap":false},"4.8.2177-beta":{"name":"meetup-web-components","version":"4.8.2177-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8c8e41887ea89086d636844ad623f3108dfeadb7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2177-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0OTz5pzu4M8kn8bOw1olS10PcYT33N2yeGRVMgalPFmgIvuFAaYDDPP4D3wJ7yfeVb6OdVfBI3p7l9hXIGnLHw==","shasum":"d1b222bf46405a8fbbeac6bce0f7f28892776383","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2177-beta.tgz","fileCount":504,"unpackedSize":6106597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8JDxCRA9TVsSAnZWagAAO34P/i3i6CTrJd9Neq9OGFDq\nIWDbKbiGss25+Enjm8BXBDE08dwvSGdt3p/g+dxCiJhzICoY4W+8R779LiZp\nVeAmAEXnqJn0puarsIEMQpAwF9OGMlzMOsPXF3wrKVbdBHrEHxGF20a3xvMB\nWHyC24Bil9xs2uOHSVLI6lh8MoDdN0I1cmthhuCVEbi27thTex9nZXdZueX8\nOwG4VIIjyUR/5lh9fMNPUK1h7BbNCoEhaBBH1dkYmyHOWlrZmQiAQMLsEq5q\nqzMFV9qChHfprgBTqgl1/qT/PPszNLacGiLHYnSFkA+CwjrZrEoHAOBuJkRu\nG26QIleyLRS1Drv9gAQCTKVKRRctVqY+CeX9co8vSTeiNT9XNis/6EEOq9tt\nYXmY9e3O1TCKzM91utFSXBlTyIGO/7kwrY5CTvVZd6bs8p7rQPRWs3baj9uG\nxhabw0R72nW9UfIdsaFj60dPFCYxWZj3geCoQNMBya9LXFrvcwU5bTAd8tpo\nJ92q/NIvMJaWgWObyaOsINI4uFEN+7szn+RGnoS2j4h4y2iZMdCAkQe5UKR/\nUYnrlb+z1wGnXZ5D0o9nMF/WXaX8dnjX/FZo76Q36/Ret7L7jmNGaP7gGo2z\ne03nL4v+xIZxmrJML4se+y2A52eI84WhGVLMmJp/K99sRmeM862P/Y6lz7bJ\nh2pP\r\n=ZGEN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu3ZTUhNSQv7WqMLAB/0EJgKOjyz9bxKKc1tiGOeJpxQIgVGXcYHkN6ethWMsixz9tlgiyy2tkxrwQhjwbtcqH4JQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2177-beta_1525715184889_0.015752990025849734"},"_hasShrinkwrap":false},"4.8.2178":{"name":"meetup-web-components","version":"4.8.2178","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9464c49112862c7cfd0675e517ab777874cc6e91","_id":"meetup-web-components@4.8.2178","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-yW0lCTTPVrNQj1w5PbXte9DU9KtUB2c3dRE6mAwkHEWlzkHuck8Cv+EC4E+6hcEt3+gC/MTgsW6PC12nuCXaqw==","shasum":"f3976433d389c70a15e6ba3a48dcf4186d169ade","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2178.tgz","fileCount":504,"unpackedSize":6105253,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8J/sCRA9TVsSAnZWagAA0t4QAJXHAg0Bi8cqx8o1eXMG\nJl0J1NHQVOdDxDXubTcRmBoyrru/tzNGVY/QbQ0ax6W7W9R7MnOurAeIQMW6\n5HIlrvXU/7AxME0cuYFIKFzMu7pyavQDTgXb/54MBO1LRfIRAW1onDnNT9bi\nHYbB7onpTodPgpirDV04Ykm2D7CyiB6Aif9B66MkawL1kl0EC0o9ys3WjF/x\nymnoMljxyKdAndSD+Qslvzt4e1XnRZxtkzsMEUsrQHEorKW/XJ3sdsIoAMNS\naE9OyQmPnCWxbHCsCVbti7e+E27OcDm1BlVvb2dPWtikgMSC7cNWg3q5zu70\nQOVko2saQtEL6VYMos18ODQs6orRpi7F0YH18m5rWc55wOVorPxQuBrPPCyd\nLlsnGuHbebum1jaSH94mMTf/J27LMxnK6n1vak9pS8ss/tkw55R2SyRDNVOi\nT4LITUa58enJtA5mreADNUh2cMe6Ys3Gx7oYjPgHLTOSC8HEZ846HvI58A35\nAQR7yTDDZwvbkrmij1XCbYyyO6u0z4Al0nuYafUa2idDyCJ+MAt6+m7CXQrT\n0ef47VSWyD2IK3XkeQ2bDK+nyTogYKsJYI7jY3ui/BV42I9XLZtaPIIz3hYW\nTGZCzfOMMAuFTH+PRpkI2ZOCKJSRbqJ69BgEPmwlEaxx5lKcqhXb0SUzfZ/c\nedBa\r\n=G5vV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAd0GZeINPW/69LhPtqCXBcubIyg+S8ZuJSxEbyaBO7IAiEAr6lhI908oqxXNiAYiPmk6wesv+wQfqPivR6CLAISaEo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2178_1525719019501_0.7565475532723747"},"_hasShrinkwrap":false},"4.8.2179-beta":{"name":"meetup-web-components","version":"4.8.2179-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a754236f5c4d0c28974ef868b5675e29f91fc145","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2179-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-E3gj2hB024vRGUF4fKWapI6v1GnU41oLDkVEm88Hhg6Kw5fdR7NjPlHgjlRJI7WPRmzVGjtfGWEYTP8sywej0w==","shasum":"1697198bbacbf55e2a84a3d87718ccc1c33de918","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2179-beta.tgz","fileCount":504,"unpackedSize":6113588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8KcfCRA9TVsSAnZWagAARqgQAKD3htac/yraEd2daquT\nWktNpJRvOcK7aPBCt8VeGjCd5VmffZ/zwx1rQa7k0Wqo9/OFBvrSngtH6tId\nKr2O4ik0+NoE+VBsEzBeORgY1ZZy6b3E0XmRRhqaG/Rz7QtBYuyss36Td4aD\nBeBPtDgLHj7s9MfgmJrKrYoHKFWUoPNVU5jzkb+vjvFHWFT0QiuFN8jHSTqc\nuCesPU1y73iLxf5qrhReJqj+6NPEZYZDltw5XUQ4RybELJoMipbT+Z/suekM\nGPGPpWnV+PngJkpfDePZ+0UKgnGSwzjIiKpap+NRgaeACfTjZiQr7+npokPs\nTwa/BG5w+5fSozzpySrudU4+4/5qAPKQTnR01WxGJZe10yEhULGLfCvchgd6\nIWlxKBNnzjmvm3g7JBrnnAdjqp74DsJ28/X4Zj+fV8MhnpKaum4Z1tHdJ5Pa\nhRxhUbf3yNUNINTx7Vakf9p6PJAjYFowzcs8Brafb+JVHkuG0OX6n5d9eaNt\n2TvpfgNqkV1hYmqPleJiQ+Kmbb+TaE9fnz+t6lxKjHmmrJAFj1gwfCMPafg/\nGYBtRmwfu7eVzNm6uyTn09TmLEwH7KyY+dRpZIpMOE7mcK2ye1DRqhPDK7jX\nLwuzdQzd4wNczuqCCBW37Bufv5KK2g0pSIjkMTtqjb2MeftfoImszhA2Eahq\nX1A/\r\n=4/PO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBerrM4piTEQAY5mfic/48wRyLsi9PY5fzK8pO8LIJRhAiAn4ZOjtp8c3xORfF9KkLs76sf7pyh4YNfDYnSKqv98Eg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2179-beta_1525720862608_0.4561712126430051"},"_hasShrinkwrap":false},"4.8.2180":{"name":"meetup-web-components","version":"4.8.2180","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"49fb945a0bb80dd8c5b272ce219bf50a77345481","_id":"meetup-web-components@4.8.2180","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CUITFTQg0h7sC9Fo8c+0x2ydH1YmI6p7jTCigVdlX1PkW4eucIK54FtChnMS+AXJAAsS6UoaLLHS4aPKZJgKMg==","shasum":"e624f82779ba7064fb59a747826a8b3a8b235754","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2180.tgz","fileCount":504,"unpackedSize":6106839,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8MarCRA9TVsSAnZWagAAay4P/2rUWyMXPOAXU9R3r/Fa\ntFMidffOHtXMP0Fey4TyPY7MvH3YvGUgptBPYjf3tS0EnXm5Lf4pc9wyoL/K\nSQRGkgqy6f4cDC0MyBl+h1RnTyDHR5efkcerxIyfiK30AHWbMG118irUfIGp\n8r/JD3KQu3DrJfi0RaCswLstNcqfuzTRJ4h7MbZD90gzAgPwuH0I29KG+2Ec\nJMrNd8ZesAmCQ5LDLaYpO0u+NjawvMpVW9q2EoIw5EgEqu8BuwZHGx/DsKLQ\nUWRux2f3eCAXHDo3qi8Vl0zxVL7g+Dote6H2IpuPKjlqFzmbGPE9qZxEJzA2\nxWdwfsjw1sNOUZ0GzKDx4rX6GNEJ6R8WdW8hRMtO2+ErnhqXOlvU+k7RE6XY\npkFT0QtDKFfNTmYNon7dxIdZ8RkZyiTdQlTtTU6K66Fn5x2WrvxqAUWe6nsp\nnNCQwUCLrA/MtcsEH2ny6tQgDnMkBaAUWnQHyh0LhKfsYb3GFh/Z/W8ELR7S\nmVLi+92s+nJHGG5hsfs2ga6caRbORgvB649OA48iZhzD8ooE7TqbZ6PP28C6\nWOdShdYcC/yAJbOvyxrWSgeXpgWu2ITRuQt0J+8zRaDHkEuxNZDmCU/XTq83\nt+3DMycWmPbKJnOvI5QnfK2Q5ND7gIH2f5oCYUkDvPMvSSlcqOro0344hyhJ\nMFP8\r\n=R0xs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRMhvcMOeqL1FWOz/srj/WLBBQgCHTGT+ZEBHoZiUnWAiAMvu+V1mXFQ+SnN1iwIxPMT/oAlnPPIWEXGDytSiGbHQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2180_1525728939140_0.3517066893408678"},"_hasShrinkwrap":false},"4.8.2181-beta":{"name":"meetup-web-components","version":"4.8.2181-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e64a37035bb99cd76b4f7780460ae540c6d66607","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2181-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-h3XzDdF6vQ8FbbfFKydhF/bzrdKW9d73XoaEhpmlzGiuYCOhLVbFCmXlrRyJqhXijJtTGOaMfp4bVBMpdioJgQ==","shasum":"bf00bf472afb516df9cd90562c4b27ebf29d3d3a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2181-beta.tgz","fileCount":504,"unpackedSize":6115455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8fOOCRA9TVsSAnZWagAADvQP/1tnkaHicxHBSV1vAA7F\nCidAwvC7lHZcrHZ+kKy5gCI4o9U3/19VJnY5YKTOrTHmBkC2ECgxr1+Dsnmv\nlrcAtZLjjlFLOblmjPt6+o9hSwzbMsQCcKx4PTsjxF4eF3G4j017frBlFwVF\n2hOGdQHsx8Fqya7zjaZ19RLrEwmsMg7b4IChA6H/9XD0airhd8ETkRiGgvcM\nWCabXAcH/Rznjg8IBr5pfe0H72KRLvTE0Jh7+gIUpzcPu8o2QZkTF/ZYlUFn\nwMYI5qr3pfKyazHsWm7KeuxH8JbIK2fhZ9vkgqDYUgFaP3zXxEbQD9XCURZv\niJh+VntEKvNJNmLXwN+Cv91iW7tAAXRkt5C/5i/KvUcw93zDnIQ8ncu/oLaL\nB4vN/DTnUEsuxl7G9iWbMxjjT3LjQLTn814hKDZCk6/rQm24sBqFLHh2BIvt\nlCyPUbKboAj4rSRCeiNJf9ITMdKL9Ih6WMyx7nsSvN+BjEmtxN0Lgty1OtcN\nrd2qiYCBsd1JxaSjR9NfSAt+aBzm7FlvBpwEYbXp+SxbZqwCsyepOs43K/xr\nrl64k2hPcMHZkbQ6TQ4RsWX5HlxPdsmT3W/y58HHN+scfY9KmVu5eDBH1nHD\n329XrPu5cc4BPrRj+sFEsEnO6q39s5aCCwyb1cnMtxhRO0u6h2SRyjFFwRBS\nHAg/\r\n=OCeJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN5I5F+zu+6PR5nMgvXwQj6ULMQ4fzCqCTRl46A/ahhAIhAJPm3fQFUhBCCPyeMay1+e0lasuBGb/2B3oP4c8ZnZq9"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2181-beta_1525805966011_0.8477992817980449"},"_hasShrinkwrap":false},"4.8.2182-beta":{"name":"meetup-web-components","version":"4.8.2182-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"634eddf8b04e036b8fc7b68006fe5e1c6b230972","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2182-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LM5AaFszlIGtQUej0fOC4Ghwx7SN4+DXsJ1lLs48IlcsnAeh5NMrMunFIIuNwjaiqAaaeQ8PY2lVMFkXF0jsXQ==","shasum":"5876432c1f06c1c7f742bd08490f3bed0223d918","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2182-beta.tgz","fileCount":504,"unpackedSize":6115356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8fS1CRA9TVsSAnZWagAA6xIP/3cZH6SOc75c5NHhuGko\n8vPJsWZWeWd/nPMEG3iIDbCZenvvGulRV8Gw112oddWJoVY5QgCjQk9iK1gK\nZOtWHjVvp7zwghNv0bPrUJucVYDQPVTEqEX7oGrbBWSJYRkrn8K9lIPlgcJu\nOMgTuN2abaVJyxDS5WQdpuxOsHTCORmFobdhFS+qzknjtYdLNPHS/omsW7Od\n+tYljHcLtOrAGsHHjDyqm0RlDMfcyGHgS5B9CLc+8Iko4XbcnCMx5Bo2jiFf\npNJPsWmjFKME8BCKO1WWy61ZfvU9UiwHFs2QI5sh9WbFSj+cDunVhjt1KfzQ\nbdP1iN2sKzQd1r+2qv9RUe6d9gI7tQ+AtSZQqGsyhPdj6Fuz9LkfVpEK5JVK\npUvVIinSpjmWMPSBwY3ezaBxuWPzB5EIorT8MUweK4U0fCR7+MT0iq/CTI4r\nKKZOx5Z02Owd+ZYwJB6nvzTiDTjOJoZoJOnTM520B5PaLEcb41KfWl6YfK6A\nBnTiWdiZ1y8LPlVGXcgPZ7AOzyr5iWuFYtvwxg2M9rkscrjcRWij5lJhWmEc\npMQ63aMk1VvJuMTrnGXgasuCgY/uzbU3UDdGRAbYWQ3HfYSLKLvQdoKYKAtT\njuAV+mkQj9Z5ChXyhW8cMuckVgeMvYJ47xDSY87tJ+UPSBBEk8c9aKJXZYQa\nq8an\r\n=E1WL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh2zDgs2ADFRPk3cHmHZDa0opyAjMjfnNCIIwcIWf2jgIgG2+6hnR9jkiDWoTOqbxBR8D+lSLopKrLX3rQr4WNjJ0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2182-beta_1525806261090_0.007881879868521846"},"_hasShrinkwrap":false},"4.8.2184-beta":{"name":"meetup-web-components","version":"4.8.2184-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"aae437a62560685998fa49a7818b03fb946b5c1e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2184-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4TbUCyeawsoFZsGA0xBgQCXEMu7dSL6VFacjcAn1mU5COijk74YZKrFEPNPZEJtXrfQx7Vv17nUTXB2y16nDDw==","shasum":"650c195ec431afd9687e4de0dfdc1d728f078a3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2184-beta.tgz","fileCount":504,"unpackedSize":6107039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8wH4CRA9TVsSAnZWagAACa8P/R5MM1DqXH2Fkwsz90n3\nO3nvM6Z5Iwds1r2oXwDt6orQHbCZ+rhhK1QzR7WgzZU/N2Q4UmV6/tVDt3Lh\nxnIbY/bf1ys/TWP/EGxmLISPs+6aNeTgvOyKWaxiBYrds8d4aHT396ehXwdx\nUaxNvDiM9ztJhCaf1WuGxG9YuOitCKa08e8MeCiyzsb9Dq66RP4gBOR+briN\nH+i/bvopI23OXkMSrEjKefEco1Y3gnKF0mwcKMSvEwI35zwILa3UuoHwUFPu\nIMu6Fr1MheF6m3UIJhK+wRNbcZYy7W5gEaVxk2a1EnCOect8bmVXOZ5CF7f9\nNOPOvRzCpBJxdPdza4VXx66PaddMVca3t65ynfuSek8NXasbnHh1SEKfrbYD\nFPRfq3+WJbjDwAH6s0RDKPjy8tm05IyPo9zAB2lSSN1Yu51poaXAzZ7h2YBk\nv1QxanJBOb1vCTmlX8kxL7CsiS37k1VlFIVPV2olefyc1MgmJaQ+qYYTrR72\nJQgRiNKKNWJFl00H65/wwsMlgFfoItrppfCww93GrRdvldll1R1q77DmGckW\nXy6OE/PjAf2cbLs0NC/01eXmEAFoXMEmOA+VDd/saM9IXHDpTsExuoXtNJZM\n39cPJ7v15VLI0nssdt+MySd/gTJu7GPSGP5E9iInuYISd/SLM/b33tH3/Jun\nv3O9\r\n=wE8k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYiolLeJ57hPorNip3BzQnkje01nFR1c3SCI+DAmes1QIhALZi0jRk+hWQoc4wPWEye34JHs7cS8LXGwX+r/T1HKvJ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2184-beta_1525875191884_0.7690547307890807"},"_hasShrinkwrap":false},"4.8.2185":{"name":"meetup-web-components","version":"4.8.2185","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e183f5144ba897bbe5e533e0dd3544d89c6cb87f","_id":"meetup-web-components@4.8.2185","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rbeLr4nSSsfWapyiRNk+HQs3a5+i6K7biVD/iW+rEKlue6OXNzYp+1/6V6y/s/Bpxg3TkE+MG9SsPz1PFFfsAA==","shasum":"7e29a95e2ca63bc31391b87eee3a82b53c43ac38","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2185.tgz","fileCount":504,"unpackedSize":6115351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8wMHCRA9TVsSAnZWagAAnMoP/0K2NyJffG+xFJxEBTAb\nl4pEI+uekoh+d95BfZS3PfAluGZGqWfYt5Cw/xjwc6r7EfU1Qts2ZORVh2Mv\nC+ruuxLrmTmn7GeKtbg1U1rmGFFz/7vJ8wsgCqt3I2VF3VQKjbRuZyX7jsRQ\nzY/2fi4264T0CHOMsVuW03Qm+a8XGAXROJo82L4viOrjgB9jai814CypNeUx\nBiYn28NZXTDKQGK57sOY/oC2iW2Ud6rWFhebF0uEDtICxIwOl3UAlImcR5Sp\njBmSM97fg2CWAvo9TSuUqBAgZpojO2ljVrzdUb8XvqgSvbjwaLzk7dsqchJ5\nvDj9Sq7Ns5tuvlTIvxKwkQ0dpA92g1foLrWHBZsCQdJYX6RwkBbAkfxd764F\nAcXjWsXpZOvWAHT9mrl8+iWbEPfalimOTH4FxcRHSjBLBLWbIigdZqomvYfw\njkVX9lJ+tkVU4YTYX7BxXhJpOgXjxJMrxoaXy5g9ESvxcnO8dDpY5ai7kDLA\nsZitinJUtAGDtfoL2fbcI26gooQ9+CAdHNAFz8Rtpe/G2K5sqIFCmyk0mlxT\nkM8YsWqSQGZ+ohyVi2JLaHMcEgZYmaDjBF4Tj/4CuLVHqVDuSmsDj/dwP9U9\nvHQRkqx8O56mhYp6iBOAn799IYgqm+vZgfo+0xP90/J+AWqMRzrYYkJZ4Pvs\na5Iy\r\n=7KZZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7ZJ4XVqXlDhVvLDY7tOX3N73gLvOXHH/K6//zj1+74QIhAPrtRPdJqBPizOhoOH5gzy7OS0v1zIeQuM2EHWcDkYfS"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2185_1525875462791_0.9965718048842542"},"_hasShrinkwrap":false},"4.8.2186":{"name":"meetup-web-components","version":"4.8.2186","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1691759b07f0582ee4478df609d2576aa3218d21","_id":"meetup-web-components@4.8.2186","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-WEPdzKXYdPLyc1q0EPU40SSduouTP/eiUVgX1TNmfhrlGYpqSHPavKSS1QheUChtz4nKNY9zVFq69rXfY/7dkA==","shasum":"8e92780eae28621f10738e6335d09e227fe9b91f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2186.tgz","fileCount":504,"unpackedSize":6115546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8wVWCRA9TVsSAnZWagAA6boP/02FPY9LGuAe8SlaRW4O\nGmLaB8vTIPVAQyot4xNFkgOK0StuK+GNU3IpdZXoOyQ1DUOHFhZcGXrgUZ1T\nPUc7Z0BLZmULe1KWcTwhx/2CQ2KyB0yBGfc+r8o6mWBw1PeL/iKuMHCLCM7Q\nCtD8x6xW8ecklbeEf+Jn2Z4rVWaXEmb78kjC27uyO5HxLgciEhPsICcNQjSg\nzpBob+v3ObwwlZQN1QzDUNgQuOILhkceBQr3V3p395yyz/6ah8Xu6SgZm1IC\n2FGibHc9UirpGJvCdrKHRZRISkIieTzgcvvFMVyt+ISOGBQrXADAx4z4qvh1\n8fzi7215F+k/89I0kwRBiE2cChJRj04c089MX7+scCNQdZFzgNutCxefZjcf\nvugVqk9ZZHhOeDHbPMFdCq1IFb1u6W/1At5A5OrT3XySv/hsM1BrzsFOHA8I\nfWEg8rDHgMTMbV0lregFJkdoAi0KWJwZQ3dJWnQDYrKqoBWCd+ZhT8fNmEAO\nSxU5xWxMGZSGK3xqA2AhprRYReoZFLM7DG4e+wmC3M9COnkt3+TJWWL79dDT\noIYky7LmlQd8Gan4hVMg24vmuMXVY7GEpxqfJTrNP5AqrSZQFbUA/+XW1QSD\nzbavQxa3INgXpGnsLs+nPn2OmIxlYRlTfyAbRzusnJqf1ZOK47QgNcSK4wNe\nApYp\r\n=zxtk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNtJwXOBCGdN1l4HnKGvyMQqLW4pTgxQ/s1snaUfrMWgIhAL+e2pRA52ZdtPat9tLXaeMaaxXuFyCQRG3WAjFrBU1i"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2186_1525876053980_0.7056200693859818"},"_hasShrinkwrap":false},"4.8.2187-beta":{"name":"meetup-web-components","version":"4.8.2187-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ae2897725aea0989b6896177948db710efcf39d9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2187-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mqVvmoFS93CVLE56wEyys2dEWChJcqZ6McvgCQTlGc/2s1E1paFAvZPx0nrxk4AIwLD5fXGbBrZqlyaJAvsV/A==","shasum":"8b2322632fcf3b905c49e918430c7eaebefc9202","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2187-beta.tgz","fileCount":504,"unpackedSize":6112403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa83MrCRA9TVsSAnZWagAAT4EP/2iGQfLNOmfqSyU9gBNJ\nc6ZUV2TO7GfMbDhG2oprwIsv66Vq4r6InxJ1kfP04dy+hqJmPH7TMFwahalx\n2fzgByVylSaSfXujCYWq8j1q1RZj8I3GKLphtLLcE3rfXC8n/NZRYyWzx4pl\nhZ6etT0Px+K9DD3TuX+BTKSMkAvi4OQhG4f7eYHwZOni/oooR911x+GS8nm9\nvegAMMSE6HdFZnaHCK0L+YSUgMZlEsYVzxIA7dcqkFBcApbcPhHE1xvLfnQH\nXEqcyrO0UXDNATRjT8PepHCrccXuZrKQ6l9b1L7Ax1LQYmNXIyVnbAjiNNUD\nQjwPZ1xrLRY6gm6s/9FPK1y5ibLhPj3+G+jC18pnITQOeKcqV+/Sz3jzZNR0\n5fDlRdex1ViCGw+rFBdx1fWM2pGE4i6LVC2XhVaBlXTlhgk+ubGjnyj2M8OQ\n2+lU6q/Rjo6+ECxE3PGW+APSj7QXQJDbch/RglHDpNLdueItbYATl5k1ehbB\nq/S4yT6Kmt+Cr7jB92OUmTHAfagYEC6OncIVBW08ZxF1thAbKoypKyOGUTks\nT8eiV/DXM+M8LTy/E7XWWh6/p650Wlzldo/9MfYjH3DpRS27l0ZdSdRnxinR\nDf1yNgQhvlManNO8LGyuoZQexTWxqA1SO0ZXslLqduKNfZd5YNm/9ML2j0yF\n8J+Y\r\n=q8py\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhcVjyXanD+7xCrTZ/R8g79tmmnOGLLxWccPDuYsxA5gIhANLnViKNObUKkCr9e3nbX0+DrVkk0kA3jeoHmH6IuJFs"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2187-beta_1525904171679_0.8368329342806662"},"_hasShrinkwrap":false},"4.8.2188-beta":{"name":"meetup-web-components","version":"4.8.2188-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fa291ba6404565370decbfda768004ae32a9125c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2188-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-L2KYI+yRjrpU5EndrkIt7j21pm7pdQVeiTgmETOIV1uvBeAqsvHvDAEcc6fEQhrpGRLKiegxR7JweNj9Xt/6kA==","shasum":"b9a0d491b27cac8fb31dae5a32adfb1069d471f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2188-beta.tgz","fileCount":504,"unpackedSize":6112696,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9F1bCRA9TVsSAnZWagAAc40P/id16+fYVkNyMY82Fczy\nFt2tTl8n8+ypv0wA+QNYb9s6XmrvgaJDYfRLXkh5VoJCdmteEaQpoBcs9KDZ\nwazbg+fjK6600f5UXVkHUqSsiFGMfp5caq+pYofl1uzRDU4WbxgmlitYplzo\ny4iqNtk5dHv9R6Pn2GbMUpfPjdH5Bo8ho5Rbls6vjsOFk/oFe16AWK/IhC/e\nwK4jynvV0KHRDSQ0xRsA+afD72z+FqRYabe3VawesjXVqtHUwWoJzpQ328/J\nsBSh+dHFh6gDVYMkw+pUTwhBBJdMd0asHN0bvNFIM6/stWgBcWol7GA/1X72\nvcCXjPQEZBe82NqWvbR4ywrxCUGIqALDvpz4CRYYAtE9AAhFd8J/K44KoTcm\n9OXFwEQC+i+4IoQQEZm58nSrqguNfQrrwUMA6oxZ1xVd1B/MziF8DIl/4U9o\n6jdXgE/HyyAJCY9b+Vcvqs341j6R2TnPkMpJULEfOR5CXKpC5Umpduk3e8A8\nwFeySdN+tkVA5SH0TstbBeiiCCyD41BIPE5pRW5TBpbCOlMa2BXb7T1b4f2S\n9o5DdL8BQuB5bgt8/+/CqSyA7RQIToLNn5PHJo7sQV8GkAzIDlgvqg2pmTJz\nBhh8EqPTmicpynDsB6QglQGH41uiOhCSp66KWmCpQp+11tELEVP68k80Tc77\nILyf\r\n=HEiE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5kBBnfG8FfmPrUCBjG7AgT/H8UVFdtDKuoCdZnVz2PAiBRTlNkUvLJUEDBQUQ1c8aIMmjxpZ+aLDAKUlAMxtEMng=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2188-beta_1525964123210_0.3237282862013928"},"_hasShrinkwrap":false},"4.8.2189":{"name":"meetup-web-components","version":"4.8.2189","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0578b7f48660a28c6c98bec7fb65d69034e24bae","_id":"meetup-web-components@4.8.2189","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4ol7PiIaNvgJQPOcHwYGf8rbj7hd3yY247TyInTKvkuv7iFC8smFHMjH800j0XJs+OpYcdBPftHAgqTU0GZL+w==","shasum":"1181e4fe0f4cb070c951c888fe6126192def086d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2189.tgz","fileCount":504,"unpackedSize":6112691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9GhmCRA9TVsSAnZWagAAaREP+gNLiEaAXcDw1n9Zvt16\n5kNh8NBdP0zP2F5lDJiQKi9DVntjLMVttUQc9jznaokMhyCOEj6KCIwdyo+/\nu0qXwUmXdtxHTb5o0Ou4mgWbKFDE8wuE6btFdy1UyzLv6K6j3cRzo9mVBQBE\nSswYyJHMNiuoy6KcngJm7LsyckyhzuEmJV4CJ3NHyNd3nhM91J7IMb372nZY\nh0Sxd9QKxceufllGknEwJm3V1pdfFcZpjtmba0tt8K/kVZF4qf8qfP5mbrFN\ntpxjUPr0ocLLFyUelgY7J5XvswbMFdpbHEBbEZPqagySnUUUk4RYOfG+Ec+L\n5WQf/GHTA+1YDTANCTMb/WVwjfRqKpr88Pe54EFYYSRNOJ/WaIpfwHtQhmkL\n7rYaHixkKJh4Wp9cToL0aOr4lydavkvwzzG9STF5cDvmSvq8t6HOTz1cWRk8\nnlKrtrFx3vnoa3QKBHdpOmmpxwfqkvnXcAbpQMuc0SOVqhJ8Tl4kf0+eV/Oj\n9Y69ZpzQTgGm0sxryaAsCO/GtyzWQ6Kn0OPhtEit0QX2iqWOA9Wu9MvFO7Id\nG3lVA2bKd9NgflRknJJvjqy+CABSkNFozWAx+iaQ3+Yh6Y+WZcYp4wVgU479\nC73w4a3xI6o/gB74V8I13gnHUQweJh0/TbOMduhuMtU20U3IVWaCjwnChnyB\nScJC\r\n=pgGs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDV6mel9l/X71w5mjG1NYUeaEv9E0WCAH6aoxsT8Cw/GAIhAL5QNlZDwL0zVKL0gaZXZMnTF4tSYE23y40m4LPjglK8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2189_1525966949968_0.9650598577677092"},"_hasShrinkwrap":false},"4.8.2193-beta":{"name":"meetup-web-components","version":"4.8.2193-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"30fd7df27c1a703f84620de958a0102ea2a93e61","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2193-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Y+f9OwhgSfBrIBa67f4Z/abGhM0NlGCUS9aTfPNU4ABMXRy9HH0kuxsPZMvuz3tkTV9bilp6RWvDpEShOISojA==","shasum":"4b372448d141fb11ad6875a1c9d1410d810dd91d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2193-beta.tgz","fileCount":504,"unpackedSize":6135957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9LhNCRA9TVsSAnZWagAATcYP/RRsIewsrKT7FD3/hNYE\nUZQpwn3XLg/fG3kaVwOHFVq5+PalJgux6zusERQ2EkNzW91xdupSoOfzgEmp\nqMeqWHDYoqLzw5WFlZ8Nxpy02T8DqE5R2B3HcWR7I3Y4ZtxhWPVL0v6M7/lP\ncn2D0100Sn/I9RL+BJcJkiOzbhLxeHNOLEIhWmgvwrDmtmQx1CwAO4yXPKr9\n2X0/x6UJdcdi8O77lVXCCKzrPjoOF123d1TmK1OeqykeUN604bOqaOdF3Orx\nrhw6SFFRNvNYCtc9M3wO6LPoQb2qcQS0zMNm8fK75DfDn5MOitP9aZpuoMz0\nXVldsIQA8q6gwnNw/izGQhs5W0cBY5th5OcF3J6apGZKHwWY2A2PXO9zCWXN\nPkaYmwSNYASaAxf/kxspulSR1CnVweEtD5Dyw8XuAqL0toZ29EsEvERL7q9f\nOypY/xEq4d4cYRyd0uERB5TehP3Go7wcJdgYwyaeTbrjQ9xhw/Ps3bAtJeE0\nW5kr3EGZdujz+RUfEzZzpmsboBYa9t7ZvsQUH8cgHDoU1jctIrpzObr8Ol0I\nPqXPEFtdDIKZmEO1vu6oYwxuonZwI2baIGAFFsfScGEh3Oh3uL9H+3XcU3Un\n6CqE+4DG53eCCgbvTL9f2/5jNpEVay2ZB12YIeO9xxZC6J54HyYeiF5tAC++\nReIV\r\n=siuG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID4La3LBwxsZp6ir5xXa2LZzY/P8ujx51A1Zn1X5ZOdCAiEAsyZKlvxQrDGlVxt5wzXj3/R1/5dcwPrwn8Bqq0Oq3sE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2193-beta_1525987404895_0.5835178487331627"},"_hasShrinkwrap":false},"4.8.2194-beta":{"name":"meetup-web-components","version":"4.8.2194-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"23619d167e6d5499fd81084c38772e856f2031c3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2194-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bJZZflu+TOnsHhYxaet0KDVfyEg9Bi6B+uwpjnlMsuKMS9eSzPUgtGWlKv1kwXSzjpep7AdO8O9kfEqo17L4GQ==","shasum":"a3a23be8a4d1707a27f4957664e4e1be8bb7045f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2194-beta.tgz","fileCount":504,"unpackedSize":6135815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9LiSCRA9TVsSAnZWagAAUnEP/11P2fIDGUOPDCvhnsg3\n60dVEX5J5o+rMYb04i4gShx2+AHch/f+Ral8XP4ZKcEKnEuMlgvnLdewbrrd\nqa49jampxw/LBIZW0CnBNSooZQcPAh1DmNpSEHWBshKaPa/XGq4Mqv048tAO\ncUWEJxT3b23dl6AI+hkDHrEooVKYNR4NpAVAUV7mOmryk4lX2NJTbIvTwd25\nejUi7Nw0m2PrJCb8VI45Y5iQgBAgkt467yAJYk3vncwfqmOajZoHwCmsy0Jd\nSu76vAp6Q1jU4uZ752WQahG24BDD7SgCZzoaxMcdUVqLa2CxW1BEIa4Up9Od\nyW2UqT52XrPKwDnV1+g4tNJ1jn7JLfTMF79h8n2IPWNWoEO/8klD+x5Ob/ZW\nlsQfzdRzAfC694J5j2uKGOkP5HcOCm1TlLR4pXpu3ZVY2SpunICEH03pwHT/\nq0IU5y+ZlAGpVafP6RaQuVpCS4oKGRfbDp1VUJBcvImv3RqGd/ay/onvg766\nt/v1iVnpjYNaVc93bFT7iZg5ucpMr1mU5yXUnQbJZWN6FmFlBAdGrkAZBg1i\nichwlBrSRR0WQHF0DF0/v0PDG2+X2OP1VZK0GogLh6Nb9I9DTHTNYDlUVF4+\nWtx/yQF4B13zOSVhgHfThjm45L8WDnVyYaV2G/Ot31AwsBzTzguKs+dzfoul\nD/2d\r\n=U6RM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMK1Wf8uof1+t0TOuzc6WjQKVz7rOtjd8402pKCy8V0AiBBS07zeuyRY14S/uywwjq/MGcV8QA4HcC+lwd581ih5Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2194-beta_1525987474172_0.8721052972726728"},"_hasShrinkwrap":false},"4.8.2195-beta":{"name":"meetup-web-components","version":"4.8.2195-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"12a2214b7733a4a5865f5d46134409309e3418a0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2195-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-McJ4jn5LxsWppEP5S3H/evohung6IrvgVImbRvryRiIAy2JwYF3+no+JFLfxd15XIVfKFAUEa1Eq5peQ52WVOw==","shasum":"9768b221ddbc839e8d36eacc41b0c0b948c4bad1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2195-beta.tgz","fileCount":504,"unpackedSize":6134674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9bBsCRA9TVsSAnZWagAAknwP+wcQr+ZoHulxVW6U9zOm\nZY9/A4EIOX+YKs4eW6kglGJccNa4Dy+i2dl9izojn9WXrofUPej1dIkYWnNq\n5PUCVr0wWE6ktvYCDe6QgviKj2IRtB2qvSE+Q5Cri7Utx9uuTB+2yKtaXA86\nQLhUE8z4v/g1h+6bxJnf6Rv7vnhgebydWKWg7siNfxWlVEwUSsZiDLV/qmHD\nYyuNJ5zy2JwtWuMKPtwHTQkzxpEfJlpKI6KNZWW8Rjc614P8POUUwXdIxIPZ\nW8IxKNMhjI/bsDyO2t4Lk0U8iRMgVkd+4GwuITEUQgKG7kevJ2ZVc6PuHGi6\near5dJR1hJ8y8u4C8zbJRNdaDDv9n7G6HFu+TQwUIC+p3VwC6X7g/DEOiNsO\nW1P4Iv0Z5Q+csFwv/F1Q/vc3GoRabHLlEV94iAnAUd52J0ZbT4/3QMrRwzG4\nNq+2yX8i+q7HpShuBJcB2qaDjEVuLDGNqz20WCZE8yTgn6T3uvJhQdEHnOZF\nJlxgKnfFcBkL/WnXVPLHD79Ba66+E3fORNsT0S2FZqQBlcDDy7a1/xsloMgG\nW3DPMvVSKL0P5V+00a+xZxa1ROf3djsvm9liFXD8p0QsUh56Yv4KKWfpBQYa\nrumO3nk6gpAwAQiUqKlytGaw1v50tI7D6y4HaYJsZwHH1aIqVq/Ayk/m0nbi\nQmCI\r\n=FlsB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFvv6LfcLnu/YMnGYQ9349iAw62Bt8f0OdKDriim2sHAiEAuVfn/Se/1fg088tDQ7hLrppW+nofgBxwrMUHI4ZnTWo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2195-beta_1526050924221_0.7525052695724299"},"_hasShrinkwrap":false},"4.8.2196-beta":{"name":"meetup-web-components","version":"4.8.2196-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"82565149c053171f859756bf7a28b3e8be9d03d8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2196-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vnEDIRf4XBgNyyllQBt3B8R03CuIrO6WP1S0ach1p0BoB9JgbrP6y+a3nMtbMXO3/yyUc+6dGF9bH43kBTtERQ==","shasum":"f14894a7a3f08463bc326c199723ea799960df09","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2196-beta.tgz","fileCount":504,"unpackedSize":6113701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9dn3CRA9TVsSAnZWagAAH1MP/2tLzixn3CM8KTEyPIQt\nczVLDL6NMmGdI/4fiwtS5ErXdqW2dNXc7qp1VSuYXIQTj2mAOIbRNG4kLW6R\nTZJJzFh1XzH/m9Fgx3ETt9DEb162e+uf6EvrC6bXNHBJQyEDAXys5b78xVtB\ncvphOQmcWFe6L6mzytCGPcQIZhEO7H94Bmp4g6z6cPlYqox5qALis6/yoxgw\n/52mDUkf9wtZ5Gm+EsZUG2/3pCuVJSSeCW/9pycSaywpbHmFxUl5MhNiCEVv\nLVlo9L6H4yyR9wvNpmNPglBRAaPEPLJvEg1FPMMIzgoTG/ZTj5hEnAKPZcxC\nDTMdmJAhCv8+osWCpDJaWInpttbfrdDgZWghbweudP9cPDGpZmYLNls+NnzC\n1V9E19bnFuRz9GvQEKZwZZQ91J+mfUN3z3KeGV7sJD/BeypZQg1d2vMyLX6L\neqjHcp2CaiVujLl3eEYf4DLh6Z/DxYi2ozQ264YZ9QSXvRFHYx/7w9a8GUks\n8YBZPwNxTIbG+/RUgN9lgR4a+OIKNTWfuwY/86pruRlQkS8e0EfyOAIcsMgX\nlPr2WVtA8bW8x1d5gdTVw0XJmOCJAHwaJCoAGJbxaYOKANpWWB88EePWT3yx\nq+z39yuF/ZNuSwsvxBWUSyfajuVMycUxUcAHUnly64LwOmXzyMr9EqQcLvXB\nS/Do\r\n=7dkF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6ksttHyX3ZWVCwCgTB3VZkXolNzHaRzwyBqYfv6bt/AIhANnYpm1G8mI/oJp4ntYj/u4p+7hkh+W9erELNgO2Bi6Y"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2196-beta_1526061558877_0.7113833641608713"},"_hasShrinkwrap":false},"4.8.2197-beta":{"name":"meetup-web-components","version":"4.8.2197-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2601ad23cbe36de3c0ea3576d9fcea1c2888890f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2197-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CULwQwrvlJFhFrDZaqUsLBhRKWTNPvdsvVV6/pSunAXkG3kBZcTtot68RKJi9/y1lXzarhtywi90+5lvN64QXA==","shasum":"0017b48e42d9a10a2cd7f569f5d7d56ce87182ff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2197-beta.tgz","fileCount":504,"unpackedSize":6115172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9d+1CRA9TVsSAnZWagAAbGkP/jgs9NLhUk9GTKLN2Ldk\nuh2YK/fKGO8QbcUB3JbOObrrCHvyyAcdJRe+Fx3MjErrEN2t25lmeCsdU9L6\nGswkBAlqQinzKmnSAUzpxdcdWwuI2Q6Cm+9IDMmJSUZ+3rGf62G3e5yNmvUb\n+jTEsWSHcSK0nALfJADWqg9c5Wn5DJxnbSFpVtiLWRNWHHN1e9ToLws8YOZm\nqyIsI9SVwmCIH9YZm4R1zZMVgvfTiaFS/PXDb9CPpt6eblOVOntHnziBRSx3\nqxSLwAQDFtUPb8uh9uvkPWvxktAAalMCIachRu4evaFkfltzh5hhmcUlwI2g\nyhW+VYWCYwH+T4NbtHCWVIRQyUF0QiJQHNJ96iTgE/cYBuE0cq1RaigAZqeN\nm2/C1UBkrEf//5xRZ6z22XkEG90feBmZt7T0j8lBTmBh6BlgIq3E7dZPPN6B\nKjiM0OwbpnNgwJrNd3bo6t3r2YBK/i6djmrkx7eID0E7fxpweJE8hT8Bq7fX\nVoeRBTPCou0IUHLhLCeWnbcQs2CCz7Vn0JPxhTcms+GeQVEfOKAjPQXZmbkr\nmEOgjKEGThlnMB500aw07HbsXzKH3CEm4WVsu0gZnSp4weHd6AVl1YDY1+ro\n5tJqHKJ7PN2No6f0BJvGjBHliW8qaGZ7kZn+V5J8AAeiSNz6xSj78BKUo7Du\noHvh\r\n=BB5w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICSG74aW5J2LS+a8/2H6soXf2+MjAB6rM8HUgyYPQTMFAiEA9RDHfNLQ+llL+IcGZcWt0PNiMO3YmnVV+f2q2nQ804o="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2197-beta_1526063029093_0.31112506449095156"},"_hasShrinkwrap":false},"4.8.2198":{"name":"meetup-web-components","version":"4.8.2198","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f4ef1a409fe111a7664ccf40dd378554708c1c4f","_id":"meetup-web-components@4.8.2198","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/KNwe9NTt0g1fPkl+Ct6ZbRnUZ3or39HWJ6pCASWLWeCvRT1Ftbvn6egX9S3wgpwg9HdYL9Imcv3ixGxHE8w2A==","shasum":"d3819065c536d5d29422bd9fec98f865e6660a53","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2198.tgz","fileCount":504,"unpackedSize":6115167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9eGlCRA9TVsSAnZWagAA+xAP+wTsym6FHK8JDlNcprb7\nyujSb2/iruomsmQvSGdEq/NBz0G3/SaZxT6XR0WoQZomPeuw5xF/ib+UE3CD\naq8cCbOvncL3eoJEwg7vC6cwVBC9SQOhQjsZKKigOWmDxJllPydjqyaAjW0Z\nP7EGcRzg5I/9zHA0CnwRnAtYKLCT7WtXTXpcY73lmWUtUCcWaSFGIhk21SWk\nSRrN5yKQrFO10GDcL4F3xkdkZHSEaAiexgsjyEF8dTWE5HZZTNIBIaCLFTtX\nVdLs/s1w1Myi1FBPEQZzmnUMrruMd291CCsyMzY9pDLTuMkcDNQhutBhRUo1\nr5gDM/mYvOcVypuqeLWgkPO1JI740hysb7l3ynmo78/kYVooq6DoqT71/1p4\nQFLKkQrRRJuY0+/K8J3g5FxOIhw7HX5RDHc/kWygLB9oRxhGkAkTfq7GqbG1\n9hADEu7dEyzioIcqLDCXpkwnN5nCJw5N6XKIfXmeCXlm+pTBJZSlIisiOhvW\nl5cSGZSC1wIKrYrkVn067p8U4z7hPwT3mnsEqx7E2wies1/pJeNS9P9j3Eeb\nOQIJtDJ41kvSN5Bjrkli6diY0r4CF1B8UaetvWM18Fci/K00F3wBWqDZ79iy\nZbt/5nSvy1QEigsdIXpEPNzNilpm86HP2jzW2E/G4taw2eeC82hJQIj2WcId\ndbyp\r\n=KiNZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwRcwy5Xah9XvMPWnd2RfqCpVJf6mmCqVxKg3dJjbwAQIhAPKdrc/tlhOKSiNEi0wCpsItBrusY5adazXTKlZrRgiU"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2198_1526063525261_0.32555614262762167"},"_hasShrinkwrap":false},"4.8.2200-beta":{"name":"meetup-web-components","version":"4.8.2200-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"62d0c5821b7e0056b4f9f72551d3f7cddf502d22","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2200-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-uNuGw3IAdHG3MZa7tYIr7tazFSth9jDiPiCqp6fitJKVESQ7CDJjFZtHINN0taPPyI4th5Xpu5DAtqZQHtKrAg==","shasum":"6f743a199744a8aab9979fc630facf2a402f669d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2200-beta.tgz","fileCount":504,"unpackedSize":6115364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+ZNXCRA9TVsSAnZWagAAu5gP+wa8EPDL4pICqdS8jsHo\nYPGBN0H9syWlyvjz5iT5EYiTNz9JE8xHFVgYoCIAzoSsd05cAA62EPOXrogT\nisXh0vokJpJxKN5BoAhbhT0yUVLY93vlr5QMm9MSQvwz8fBucMbebrzX1Fa8\noaj3bsorhn2ALZCklbn8PXNR8BqEZYtdIWkBmL9BWPWy5l+16rMg81dc+LsA\nONvyXqSk9hUP/sKWfCo+yzFWbEYt43oUrjQodCCKsZQr27Gi6eKu5lQgkHUR\nn3Heh3iQkxybhMXL3c9s+YsTUfQIlbWLvW23vjudHjFQryrp/Km2QtbiSG4E\nGDzx39q7pYqtzUD8ppY6z8dZbkqLhHAdiI2j5OpeLTYm8FrCR3pKYo5Cd1v7\nJbjEjftwA72/RrKr4YSmm2cyQ1AGFitIeWuir8Bi3ciSVuQRf2i3sr9z0/7J\nWSaghp/gKzFp2R9orQFAF0ktIeZzawSsgVMUNoQDBW8HMspFDUoaKlt/6n4Q\nYEQzoYDSFm0kBW4ZGjUVa+f7Od4LsR0h3Wb32K152TsoKfslVl7/TR6PMeks\n11wVxGqPdg5oG54ZJ++K89jAq+fw7z4AAPBhbxBJJd9AQISxhsVy/1VbpOkS\nvGS4qOj3r+qr/JyQvgs9v55nrE2PDs0D9LrBH13xQl4lBo1rSjNThLDxFT5K\nBz6W\r\n=E/ao\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAdURU4oo709jdmBkCjDp7t1xgvrcug8ml1LI5tKtRMBAiEA6lVhJXhPPw/dYbCDYVNKr+aIfehfGv4EnyCSeVvUSDs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2200-beta_1526305622987_0.04004662223160116"},"_hasShrinkwrap":false},"4.8.2201-beta":{"name":"meetup-web-components","version":"4.8.2201-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"16d8f5d734075074f811b7c46e04fe69c2782a8f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2201-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-923Vd7o9h2rm1F2bJcd5Sug/PyIqicPfyrcf3cGMNlO04BhUS9AX8nKMM+lrnuhLODFoZ9WuOjoLRBaKYwSuog==","shasum":"867632d6fa945741af60cbda409fd962cefecd89","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2201-beta.tgz","fileCount":504,"unpackedSize":6115508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+ZahCRA9TVsSAnZWagAAJ0YQAJlxWybAnQC7g1/R7I7+\n1q1aDoFj/rpmilav7xjf5/Yc8m7w0F0Rk4wlZPtlVK6lVKMhI4RqnSDvUWhO\ncnz32KQZV9/mo6r73EN66mf7R3LCQuqYux1sXcNIv6i7Sp6P9MfRX+2QiHl+\nU59D9fo5Isp1VlAeW0c2zrfCpHuxllU5wh7ybxj0IJN7lzETTi85kBEJU1Ol\nsQYqsoqPAka8Xgcc6P4QJmR42vepgadFWY/C6D5aUt/M0yTqK1w1uKk9Q/X5\nOUISDTYyrfSPhXj0oPzYmGzGAZmCzmpKR0UvWR238ng57bHzjrTWbDJf1rh8\nTb5sNKREeiwqIj7vTF6NmNa4jauOG/daxahtOfrEl/ORQsY9zlldSvHlzrGR\nPLdGvS2dhgGM0+F21v7cOltl5NNVPSHwmZqPSilyaPsaDNSIgrEXLPMLCClw\nehNYiSB2JWlYoqCYB0d0NwblQcV+yipsV4ytxXSQFHQJobA3S4Iriw5FTT1i\n1Hs05xHiZ/7ih+q9eBztrPj7gzVlSYEPlu3I3a3Albo9ALGSzZDlmVqAI+uF\nVEDfKdggsPVmjSKfEKWAIjWvPzbBxdw240AK8TLJnPSJuAcJJLtV1c6bklt1\nMEGJcMskIEF/g3HRZ96fh2KoEMaPw1/hHILolXo/alT1DQ+5qBTO+adMusmz\nyyxy\r\n=TA3M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHXfo9C6CIjfJQCm6yYmT72n3+uqxVxROf6g4mIlrj9fAiEApwRCi2ehyxZUlQYPW2bt/eU+5EpcqBgvgaqjqTiSTMs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2201-beta_1526306465135_0.14901548178836688"},"_hasShrinkwrap":false},"4.8.2202-beta":{"name":"meetup-web-components","version":"4.8.2202-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"aa25e9d162dd56b2da95c088eedff0846de0dc00","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2202-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hiziSuInYj5pZiC6E4TgKB6j2LzQRV8UZc+jy0ekcEb0SlbX96kx9MxjuFvZaGoXYiVV5Cl5OESmdsSMoCVSog==","shasum":"7b054614d03566188d922e710109ee4afe6bb9d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2202-beta.tgz","fileCount":504,"unpackedSize":6115532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+ZgYCRA9TVsSAnZWagAAIlAQAI1jARt8sr0L/WAkZA/T\nvTIKaDN4lc/1zsQoGfQv3DgcNKw+ugmyN3rxMVJ6dWxY0MBrhK8E0PdCJ9oS\n+F1TC2iC1SzGF9ejL09TDl4NH18xY40zoRgcN3FFmIfg2Itf+4B4zo/eRh5R\n1Fd/CKATrUULi9mTOpIJ9X3ya0VzQw2s+GvURlLmzpGbTflztFeQMHFK3pdw\nq1pJ4FFea3IpBOx92f+akycmJJCRUAPFMCs9WFIIfmJ8bQsHE2ZglZ69t3ee\nhEp3ZtILALpsm6Cloup4rIznS8tU+ESRIDz6JTHHvKWk0BtiGq2QhM3yc8/Y\nApPfSLSvUiE4YQCjHVlWkLnKllNJ2p/zYhpU/D2wKAhtX8UlyyGUjEq6/4H8\ndWjnjBBcWI+iDFOSIb91xoSHYDbq2tg4dQlXyNauauyJR275qCKj0cJPOqAc\ntv5lG+INaz5/PJBtTKm5dD0olJPDzFZq4ktfqkYEFPRVRv+WQ3edXO+T/JVT\nyUNtvkGY+HD7IhDscNkuW/XcZCL9ywXSyrfs+KwNNTgJ+cB9R8reDPSfiCT6\nmGMCYBeecqJgftJGPmPLs1IUihLYY7q4du2GN6a/SVPV36Ojj6gBxLDS2WXV\nCAf2wUA2GzFXHvpAwHXpgfDePBZTeIhqDYf7D3zjxKaIfb3RGU1IaOHmJJZi\nn75a\r\n=he3U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLgseB58uSqqBveGV6pW6bmdiDOceAaNxQG2fQ4IlEiAiB2EQ+ivgsuZx1RfS/GetWRWnymzpO0Uo8OyqA0zV+cQA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2202-beta_1526306840626_0.20338650113433987"},"_hasShrinkwrap":false},"4.8.2203":{"name":"meetup-web-components","version":"4.8.2203","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"df33fd758c6f947e8b32d61ef356f75a4794693d","_id":"meetup-web-components@4.8.2203","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FSORNhrNQlJVxLhF6jLC4yY5FWGIfeQCvexwuqbJJFUUv7pjWXDGl/dmTGxjmGM08kbwI4keoHT94wuZ8wT1RA==","shasum":"731edc4795bb55c11087cd89e1297bc892b1a6ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2203.tgz","fileCount":504,"unpackedSize":6115527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+ZpJCRA9TVsSAnZWagAADCoQAJt1pM79vtUik/YJLlYt\nYSZBlbKcq7qJS+romX+bgxDGJ1OrqmzDT/a4YCFWqGkl/WNh9+Vk+zWR87cT\nnPtkfjdlXvKni0g503ofeZ9Y8ofHnhtjR6Fn+W8tGkTe0K9UPIcnoyHwon63\ne25ZLPDMUu8aMS9CRqG9OBrw2yzFlAoOks7L6bG2r+DDjy+b+56cZN0F6dEE\nVl1bYh8suKMGPQM0LeBNw2IEU2Kxfsmw9C65gp2iO5UR2E+Hyeej9z+LhYb3\ntVKnee+NrnNQ2cvJuLlTd/EUoZG41Jp26ANXuQjeq9bzEAN+JEwCl4p2dwwt\ntfa5Or92njiwH0a/v4pJnTvW89ilhWrAr23cyTeB6UToQfvUx3ZR2j2QBAIu\nQ2ayX8b6agdoHrkkyYE0M82uYhfDhVBihc6fdPY9m3v8kDyybguENPVBeg2r\n/2ZE/xrnNRGDv00dfZ7aOoJeagH6UDvDIOIuagqJWlNBwnyBEuL+HOVcAsi1\nNHcFCKIml4RLursGb1vVo8BGE/Sq3zfwOcvvUgCH8ttsOXOpLRPqbPoB0DtS\npTqS3EaN/vCJHrGTdf0jHIJ8t9oZyxNlwMqFs4Taz0mZtVDcNv+rW+5BGlfq\nQ3zKWJf5QFlFti7lIl0KNODcKvsJQSCb8ybNUOwxTMUuVfGNilUinhbJIO8N\nDRPB\r\n=Gskq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTTrtY1psLaLPXR3nzwG23HkhktFo5tx0jRxL1sTGwbAiAzlewSum/ImZb0f0+qjwqlzqQhYbMjuwdti6XMNIAYIw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2203_1526307400574_0.4516153735479156"},"_hasShrinkwrap":false},"4.8.2204":{"name":"meetup-web-components","version":"4.8.2204","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"62cf4be552e93d3f7d285abd901cf6935e1ee4d3","_id":"meetup-web-components@4.8.2204","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-yfOUyJqYRl77Cw9JnY7vJZlvPYzUVX12OyArOTinGjByflida+1Gw1O1+7mOYOyBFeFhDLgPRKSyrR+SNNfPww==","shasum":"d2ecb6f10a9209d8171bc19476b1a85ea7f86d7d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2204.tgz","fileCount":504,"unpackedSize":6115515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+Z6vCRA9TVsSAnZWagAADXAP/RBL/USFS2PItdDkjpAy\n6YjPZrBKxpxQe5HQaO16AP4mYNRXu3XFCfDSWPB+s9VO/4DnYT+6oH7sJbuJ\nEaeSo6YVNjVHCGMmGj/gLCJujQ4mLlP1KFZcwwSgHuwSUcFmuMO8oUjbo4g+\n0nD5Tcbhff8d/NSGdRM3AY2BKR3n+OThUB18ZlRnNd+1WL5SM1X4BsuQxyX6\ncNkdFmsHXL5pA6V59xMPsKDzbRIPQKZeiHhgNFKJlw+WV9qUAwq0StjlA7rd\nxiZccLLaoqfsaRqS1qvZubpBwzsu3HVKdEW5Ho7ZMitFXN3Fv3JOC4y4/adn\nmfLDENI7Fu9jutUlMlC5DQUG7GPVhoJ+lCze3LXo+33JCOiPAjwX/EOzlnBr\nrH09P2BYrPACBPEANo2sLK1PdhEXSEtaRbvuij/ycrc/Y7f289N8GdlveVIg\nPwE06Ovwg4/JECjCbpwQ0DmZ+75MsdC0qCV0S9Vv2r1CrsIL+H9UnfiPsNpo\nwSf7/Ee4Q3dR8ENqHG0/mDIRshXyJsnbDu4BxoaMlGPM8Gk74PHpME0JRbli\nHFePime8iGhgvqrIcuFTwKf/wKjEoFj1rdDqjW9gPrqX6Oq/jYAn6MzlqVgR\ngiGuHFXOWmruLF+0xJiPfpPGBDozVPhu8z+y1V9WmhUtdaegUC0Kxu00YcXE\n/vKL\r\n=ng6t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4dyi8UVE92iQKNVsamgiyyJzzfYml8TsYtI8xdUBoewIgTCbALg/I0u/3TatwZ7O9deVQYR6xEB62VxiQ6JizxAA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2204_1526308527184_0.000957714839447732"},"_hasShrinkwrap":false},"4.8.2205-beta":{"name":"meetup-web-components","version":"4.8.2205-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4041f1b466415344d086bde02776550f1c62970e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2205-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tntzLP+YjXo5HtqDlEwURfDde1CxyftJLJ7oCZEFqK9znVyaayCiM0CxwU7e6gLvRpbxfmhTCAAWPfMXeuufxw==","shasum":"0afa454450708a260b0a0b0ec414350ecc546251","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2205-beta.tgz","fileCount":504,"unpackedSize":6139140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+acqCRA9TVsSAnZWagAA59UP/1uyRXfl+NJwCi/MO7yt\nQY9xjWRP19fwxP+0OdFoXh35n+M0I77IR8uayqmRSF+ChoQaqmF3S2DqMgAa\naii6wfa1mnYx0HY4adjKUPRHicAkU5NL/NqlGeEQy2kkxHgw5OdYm/RMSi6b\n7NZCyHI8UySCXwTwj66nZWt0aSbnnkeszJ7EWHoXkpVShIP9yYuO+34LncNm\nVeRF+xqHvKJ+aMC6ZPpYK2GD08qKPWuGiZh9Mnwc6DEegP72crr2Chky233L\ne9RizBkswcrn/wcPM9qUbvGkJNwQD1pWzEAcw+lAJyWGBtC+beDVzST2rr0c\n9ARv1k1vcm5GuDVuU068EpwS8ZxPhKv0tLJY45GAPl0XyqVtHrKFfJdypPO7\nWET7ZBOneqL1RH3yw4CA4n7YKrN9Hg5QOG1vJR5/Gqwd3BAqiCd58hAVa0hR\nMnYqaFY62T4GMHv2OTTelUjscc2LOqtVd3JtoIxnLAR4DATJDpRoCIkdmawe\n/mk+sPrIWq38x86q9ULXdW2Vayssfic3pp5DbdcA+P8AmMWDN/Ixo0bzwKPa\n6hg9+2yHp3P04KXsuZsS35E9bOGFc4CVZJ3TplZPqPAof3YNuwVvxdngmvdp\nJrDO6S39TK4jrFZNluQbXfs8qL4v1ika0zOA068Wk5Us28X23tSneuTi1RPY\nw3v0\r\n=VnXe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCup6wCWakQs/gRIVLkE5v8UFSxrokQn7X6UdUzNS47DQIgOS056u5UDZS8bpaOwFVhJ5BFjWDVMPfBIWweKtsMgHg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2205-beta_1526310698271_0.45846414012262127"},"_hasShrinkwrap":false},"4.8.2206":{"name":"meetup-web-components","version":"4.8.2206","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"191fdb9d79eb5ee3a9699c22ac22d46fe099ce2c","_id":"meetup-web-components@4.8.2206","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8S5ieVaKgrTd5MLnGdv7uL0FxAkuU5ugdDsJuqJAikllbr7x0fpX6z9x6NyUmcXzWWWaGIVIkQLAzTYPUTCEmw==","shasum":"9a11e51a555f02c34d7dfa2996bd89722b9a6b78","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2206.tgz","fileCount":504,"unpackedSize":6139135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+a0mCRA9TVsSAnZWagAAy9EP/R1wYsAs5FpP1wBITTwA\n6klog6FVFrD1KsnbFza/2Jr36EvD1I6xbn1+fSt1UNxKFnfXUwMkQjgNWltr\nIE6A2vRl8n7d+VkHjxfaY6kyt6zlvlC2gFTLBTXNrfUrya6teQFgbLO9DYtq\n2gCl2HO0rT9uR+cxroBEGYTuhC2hT2mm7z+SZ+/MRt3R4G6UnYlWsPzmGnTi\nKZD05T1A1xaIMtMRqJVv+iFGHLz4absuk0Tns4iqLkhun46bE1nBegJyr9n9\nnYBVAEwXor1GS2dviUK5BsgnDv/fiVcWHpuYkfrAvy7bcv0IkVyCDWjncGlS\nmb1Rty5bu4lunMRop9U4VdTvB+6ddyKXrz1VBAQQrBsgyilKumanQzTl0qFI\ngpVrv5jTlbnE003l35zOVS2Qq5Psl9l84Zzn51sqjt+VOGo3pM4T+b6Gd6xG\nODcD7cJGg1Kg4nuWQo+aHIIXrBskPr7/UYhgUfcEiJkPjPfoL/2h4dCCkprv\nIrDgWML8lPkQgHYUdwGPfSF1zQK/Sa1/UUdU1kUMGz+oSoxMmN59AzWk6095\nQ3/BewoNMgFqj6+GR67D252KNI4p5IeT9Xlvy9G4gQDGDOHLKEAHdCMJqcxu\nmdprD4hXRCTwLsqRBo2nWZZBBeaTiWFhjQ8hiFu/CVY+gl2BlNyUKk+Gnpqb\nY3gV\r\n=Co0m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNM//pJKFpdd7YsFlpAzUuE/AP3fhkU7rgekBqHbrJyQIgTgBlxeeQRGSY57ZVdGVE9+cDyRa/4S/kAvcWz45/jQ8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2206_1526312230161_0.637380783266458"},"_hasShrinkwrap":false},"4.8.2207-beta":{"name":"meetup-web-components","version":"4.8.2207-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"133df6ff319f2724965336f3031b236ef0092376","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2207-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wZHcjbOwnGYXhyUUqe8wGIvmt/unDMNDeqtzAAZ9HBxOwq8vksrZd+6Yi4RUsUMw6Y/aI4uQoScocT5ulJzojw==","shasum":"604c2223627440062e6f87df9200d26bcac2215f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2207-beta.tgz","fileCount":504,"unpackedSize":6141017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+bQICRA9TVsSAnZWagAASOcP/i/swBHS/qhySKGswbUF\nVGL2+/buDgb6qhXT1fe/GNxLqsBvXOmqjw8A+EmIk/IvHaO7HV1wTYjk+zLC\ngoe2TyJO9GdhQN33//g0/cG/szfT0FAV4QbP/IEGI+1xQFd6JX/U6PC1GYOm\nOP4/exNqh6Ma21OEiEU6a1oqCyMDjh2MgDu40R/ea1A5PvHzzprh0fVg4cq2\nVGgqMmZMLqYmEO2BNlYtB6zeDJ7CJu2giktehriAeemyu9jS+Ck+bBti6IKs\nM1rbzNQaEYI4SfR4atyjRUmZYFHNBzoqCgERcGtUrt7thPAniSrax4z+Gcpz\nHVcZrP1dwUMfzkZjWUEKUQxjvhXTee1vm8q+aP88JEexskW+D2169ZmYhJ+0\n6nPNXm+3xvDuwa1IPy0ItloEy1YrvJDpCtLL8a1staYZ66LApUCUyNjw5iy1\nRmIkwL4chi608rzyC5n1yaBsNPHAowJ2r7botsEVoktSEgpK6ah3fK68K5Gr\nBIe+B7XIIf5GhdsseWB9b3jKicBE8Rito84lEPxvc5VowY90WCc1dEIazFxm\nwI4U2rmox3FzZ6vIhJIfzgb1nBk/IKlwMb/GC5xKBZ4YVC+UrmOZEJ8newSf\n417vNKBxPeV6mk1W+Dn192CIabunlziKh7nH55vXl3V0HNM0x1uyxVDWWmx6\n37oP\r\n=t1RA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBj7WKT2sYFhhQW1EA3WF/VD1TAFle+feZXTv6t8CDXIAiAIvBTi+ML2gRem/m2bIOmrgtE9lA4sXklVTSbYdH78pQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2207-beta_1526313991048_0.09806437653711875"},"_hasShrinkwrap":false},"4.8.2208":{"name":"meetup-web-components","version":"4.8.2208","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7215c38a5fbfb3d2aa80dd1a8547e36c4e1e2c33","_id":"meetup-web-components@4.8.2208","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-G0zXC1vdaYu4W9dijXnPJ3EYL6BvSrdqEtjT/JwK3PZswQAdigekMasd1UUumr6K48uPWHKzaDgaTtJ08HtDag==","shasum":"0a1a5a82190efb76114ac6077c4ccbcbf5755c71","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2208.tgz","fileCount":504,"unpackedSize":6141012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+c7SCRA9TVsSAnZWagAAsRoP/2NC6vJ/bottcXMj2fIZ\nPGyZLwuha5RQp0Bl1+pttc5DI5/6vB4MKSicwFCLZLf7kfBXihc+PqXP9A2I\nUuAuVqlAfOZ5WB8pawjuwswbmz4PxPtwd++PBnFIiCitmB8CJk9bh0TicwNy\nsWue4G229qXvpT68+hlBtzGsYsPfG9bQDaq675pOy1WYAUg0xAtTcNnUIf7K\nTIsxWnrlaPpJp93YP+J3HrksnreCwxOycrcu5/T1qb+WODVwKqSUGGqQlMj8\nyMtcImRssrHQ1+kRmqhDYaeF5zrsUcVQ6qzaxJTtW6GY3Weywva/NIwCoRj1\nddGYkafPM+6WkbGUJif0lQU6ZVZA8hWMXa12+Pbvc3MQfctBt0feEYSuKlAU\nhKd17UDip0xn4RdXOwkHh8BfDoOGIT8sFJ8dqFAyhg0d+tCxWmYb0skDcveG\nhCde+AedBFz1P3zYEagvmMq2URRtK1HWvvJjxEPRm4N7rDefI5VWm+6D7cP4\nZ5TtCvAJvUxzXOtox6NYkeJ+zwfTGA0hWiy17wA2aKQlr+9z5xQmGSTqOr+w\naUCbrBXYrXTfJ6gYDLwFbexVcnKIXZZPijDta2PE1K5LKgkrVidjp99bK3uf\nuLdUzrl1IwenD74B6AZUj5zm2KhK2J3/tIwoGHbeWtm/w8AamWFbXJ5Ykvuh\nEPML\r\n=Xsia\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4YhCMMM8Tqay5iYi06ynopceUAIHKKr34mTsz7v/saAiEA+hERUT8YpXHp2dGKSlMR/0uvfZcHEei/6qeRteW7aC4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2208_1526320850572_0.22009576045827317"},"_hasShrinkwrap":false},"4.8.2209-beta":{"name":"meetup-web-components","version":"4.8.2209-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"4e51458a4c265a8c6741d892e5902041f9ce48ea","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2209-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zGo16gIyvtsfkeWtDCpq6nCjwm7X2crfSzaoJZEaIPKbOAji282iOtSiOSQRVQq+QCDC9CzdekY/DBH8d33FWg==","shasum":"42ea0e6ce8798d139382416b490535216ed90ecf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2209-beta.tgz","fileCount":504,"unpackedSize":6141566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+eJyCRA9TVsSAnZWagAAM2MP/RWf8ghkYVeWlTZA79mg\nh/g5SC/+RSw3gg5wBbfFKIoMIN19oLELs03YjJQ/C5L73dpDLXTb2+5bvGYM\nON0/+oAn4AWl8dYnvwFkicLSy8TgEZkC2v7v3BACgGSdmvf8sE/0JO9y+eAF\nz+44M4k3xEES1HpwtyQ7RyG2UBfviJyTSjzKmcGJJRCC/dggN1bMxjrfAIZc\n9FTc3RbRI59FIytlElEO0i0R3YH1Um8WLb0nIFpbv12E4QdR8jITdwEZFOVf\nvHMLk2RY3oOLPybT2Ds9kRL5BCkZBTk3NB1nFp0ET22h/uHwWOo2rW0DF5ae\n7RUbpdJ9WT9PMh+CSvo8bUMx3+QuU8JYYHvYeWiAIXfYs9fu6ku8CHVjebcO\nAJx/rMsc+xztLbvgLWx3nGfD6c5MKG3E7mc6/uOMPb7WE1NyoPuliRr9O8Pg\nOUdFV8klmnf6MHRCMt/LRlzBeDwlsI3efDMt0fylVsd5QB5TU2jRU1z2o48z\n/Xbefopesddzc/FBvKWuDbwxrvwGfIE4nylQpJ+94ZFrbb0fcXU9wbGeMfTj\nF35KrPD/2rmIY8vAMRdcSWPlc4HuGy1jTsY8gqGqCpv/sGafc++C5gJamlOY\nIhnzYk+tW93sbsOQSBS0Fx0UamNGQH4W8ZZd2sKtU4S0aU4aLTtB0dQzNdh+\nltpm\r\n=Ouul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYptrHqzJzrfIIFBn9Gl9O7fm8sF0/pLu9+Jbp/kW26QIhAMtvcIhEmChY9cronqifBTg64bY0nmd2aGEWV4KBf7aM"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2209-beta_1526325873918_0.527429899718151"},"_hasShrinkwrap":false},"4.8.2210":{"name":"meetup-web-components","version":"4.8.2210","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ec696acbb9c41ebec5596312e4401d6c83cc04a1","_id":"meetup-web-components@4.8.2210","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7LtCCATNN2qm5xSxEsD2LuqIAqvVtf7qdDhtQuIHnHqKeP1mocwmFY4cIjO4kdQAlpwa+/XBp1jHqHLhdFQ6OQ==","shasum":"b40c378c97ef2103a771ffd2d4f9bbf72daaab43","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2210.tgz","fileCount":504,"unpackedSize":6141561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+ePVCRA9TVsSAnZWagAAoJUQAJL11dgCsd+koJTqENtR\n2TVQwWON9UOnZDltBdESb+dhkGGRV+1oC1gB/MUyBr6FfPb7schq4N6r7Cmv\ncxLCwuvEv0SNIELAwg3eKiEDsjymJdUxw9nKbKA/Qik76kDa/2KpQdW7OEeI\neSCLu/7XTzGy3VSLXp1CNGnRv7ovb3CVIZlwoqBelGfgIWVbaltGSgX22mB/\nIbIAWUKFIj7SQ9MGT0Q3FIHR4ETlOrEU2UhEfn6TNjCzfYBFRjeO6TvrN8w/\nKEyAn0ACEUkTfp2IIyDgERL8goWVszBZDR/TYG1089GTUvo7q84qx7H9XlPH\n6kZk1oDQj7hnYe9792X4eW1hiiPJMxEYkgSrw5jdlSExwrgO1wP3LOPybewp\nytih4OeAp8d7kEn9Tbh7hLdA0NUGNyP3qoB60rzm/mtvIvBd67qDX3iyTcwN\nzds1UJL0a0jSJHGDpZ6wLk51stJNDa3/MO4t7qoyBDiktO8mED//MFgUHJms\nRaY0IcFP05Bqvos6rHm13lNeMgMLtXASQmF/qk3GZdyZ/kMJKsjHxhCXVIhE\n5UmZsL6voIj4Tz1cFwsIQJ9PzegxxVCxJBXmzWNEAPLtsOQUiY42C/DVr10a\nyifkWFpWXruxKUwiz4yp7i04XJhDohVnr8KRL4NAO1F0ruwdIioS991gu437\n5+qU\r\n=VuhF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkcn5Ocg3Lt0bI0xY6q3ori+kmRMGlWPQ+awuVKEX7cAIgMfAximSbrJtR8wuxQfpLEUJxfSWyXfQXR6N/2dufnoI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2210_1526326229211_0.2812524564645895"},"_hasShrinkwrap":false},"4.8.2211-beta":{"name":"meetup-web-components","version":"4.8.2211-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bd4d9171965f505ac57d86b36dd1fc5dec32395a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2211-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6lyz9EWFhk387BhkWqHZ7+TizhHxxy81xelk3BdjfUHh2lrY4J/fyTL7ST7lnNEB9xzi2il+1E29tH37KxAjqw==","shasum":"48e24702f3361f367ad667af216dc61907c85353","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2211-beta.tgz","fileCount":504,"unpackedSize":6141864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+eSUCRA9TVsSAnZWagAA9uAQAJzaja9c2vFDFVHVdKeh\nf+OxnD6cXYTD1oLCTQ2uNCTIXjwKJ9ApddikwduZfSJFkJ2Z+PO7eJ5OuaI2\nQYwj83++q+8NNISHZ72HptcW8B4NMk9Y9rnCVgbjLrA5wTH9GuxpLfQYdu0l\nQgm3pW3uRyAJEkih4axmzsVeAnsY/h7gcQ8RmZchQg58fU1Y7excwXXVFLsi\ndRjdd6R1gb/YmfuC5MEgLJjikBN5K99vukbyJAKWY9NBSG8oE1rfZ6eXY5Aj\nyYTFeZpDelHfdIHPquv7XyvNzhJ8OBsYj1gmULRHhkdvnGTjiyFUFRDv1Ajh\nL20g5Rnujgc+J5iJuuE7vb/2VOtyS9mzrQVqnnIFIwbiJdvHqV70IdaTNbeb\njP+ci7zB/k9ylf9mUGYmM0PQpQdubzzFmeR9GVE8ijaU+tVSdISoqV0CwutC\nXEk7p3oFuyICO99GeXl65BPYqePabfPrM3abFD5pVIEGH3Ow41MFchp9R5SR\ngSKDzwaxovBX8pRdLuQOAD5R+ximhyPCH6T84ymNf0NTLliR+aOphsLijbKX\njCbA07SEaJBVjNcVmKpvQ6WZCiE01+P3CAsk3DFCwO83R3sMMmYPHvHP+oC2\noiKJJrfSA6dPhYjYf0fOhpBBeLHK2DmafJmMaLkitaE0lA3Qfk+fw/EFpQBm\nFQ1S\r\n=3QYu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB7BsMl5VGieKrqS5azRY1bzpDYK2mkK15M6AL2XU3tYAiBebh3YrHe25ufkuOU1/7X2OVbeqqV77pwJCSAk1J7n0A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2211-beta_1526326420054_0.7951764650974471"},"_hasShrinkwrap":false},"4.8.2212-beta":{"name":"meetup-web-components","version":"4.8.2212-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a8f761acbe63695c20e9da7cd551cd58a6dd27fd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2212-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+YyxH4aM7rVH3s7l4i6s3B5kwff3UKVTUCmBqlB3AWl29+cNwOcoVWc46SCqAoTABP5u0Iehv6hspZq3ipRdfQ==","shasum":"615e5808557c8c6e60337948b992fbd828dbef95","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2212-beta.tgz","fileCount":504,"unpackedSize":6142625,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+fMlCRA9TVsSAnZWagAAXrwP/A3UDAjMRB9/DrmEbGhd\n8fBH3GJLF7RwRqnGMHke4nZKZb/xfj7D2taLbQ+9R9fHqutwWiC3hTEAix9P\narnuBZqC23CUDbZfKMISgl8UzZoh26SlkQl3FeC5wfdeqBvlDMNyh6edsoGO\n41DTzbo1WG+E2RFIDWCx5ysfCty0I/rxt/HpeRBlMUArYiTR24PHcFTW/8p9\n7ClkTv2Aj2EBKUfXNxVBguLntF2UhrXgaoQKpJvZQ5uuR2nZ7wWucaBOF76T\ni+BaZB2lEsa68BzqPJhq02vpaJLFnPkenJ2HDFygW+xRYMVFJSV4t219TB5z\nswdjmEoB0aDExlbfhVj1HTAVteqMkTG5vdoCaXNo99ai/uhEWnGhsV/fJORO\n5B3D+Dmm6Ni6KWS7TVX49EXD3ynbRJ0qxtT0LcMRNQ5K2Pl26LBjVGi5CTEd\nhMYIyTKyVF9UDJvenVd/yV/+hyY8zP4Hzq9byByeFmhYUmStCnkUAmRwX41f\nQL7lR7lH3VmAdI8zUlSWG02kh8f5rofvoCRl5wg9Bza3LL+qrrgmIz7/g+Dr\ntP8WOQb7sEXiGJwJccHGVQ5QWUTuGEsvHh4vOdmmkvNEdFXSLvcHCNdZVmqV\ngP6RhtelV+fn8FHHaRsO/7kw2auJ5WndvnbFkuBZlGUQbqDVydcGLaOwFGBB\njDEI\r\n=VcOr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDo3p2xb2lf5e1kFam8Y4raoUIOynvbP5F8S17czUkD8wIgNqC7raFkRrHyIlfNt/iUe/ib8BCVBiL0W8WBtw9hEWo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2212-beta_1526330149531_0.9372448225281744"},"_hasShrinkwrap":false},"4.8.2213-beta":{"name":"meetup-web-components","version":"4.8.2213-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"64b91a0725339d483da65e777bef470c23f52ef1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2213-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EEge6oMM/kBzgxZ9VuFKj6LZv97MkXJVAL7Cr0Z5hjoaxb2G9Q/j/5GwEhfFF5g0Ot8ceXa4GvS3z+bQNW1BCw==","shasum":"058f437c26a4aa95303b111b6566ffe6da30ea87","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2213-beta.tgz","fileCount":504,"unpackedSize":6141548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+ffLCRA9TVsSAnZWagAAIAYP/09pWnvSNXCLP6ssxdpW\nRoKssw2wNRf2B1oBKQZUfOTSO87oqUc8GL3Oi7AXEvy9qeNIxUJHNICHXe6A\nPEAUPUc46nG6sbu1eOlAahFDFUn5q5q0LcPvfaD0ykVh2WVg6XvLh2IPzKDB\nYwcAaysSH5/OZTMWbK3Bc2Zmn0X5CNUX0u7GPJhpTap5/4PF/LXCrJLvHta3\nKBTyCB8dGJFyjVDu9pcR1cE9Kxfo6TPkcvLuspo52XTlmC05QrhI+OhCWL9w\n6Lkx6Yt/OSpRhqkVJSwY8OhSFNvxMjyC+qzgeIofPxuchojaBcJ2UuMuPg9K\nsMl8+0AdeDwk7Hdi+QqmmmpwGRV4EJ6VC3Qq9S58lOCHuGbCEZdS/1r5dJqR\naAkB1b1XXlM/RYebTU4YN0AcuZGOxjgK8UaeB4djLuhPdVG+J2r2TL3Bnqzz\nsk0mk+ERLXvifSs+8k16NHmEBrCg3RPJCMhwGotQlNJfY6j8RdrGf3goVB4k\n2r8XXHE78YTe5jkwF/JC3t9mmSVPgAcIrcnsxfK/eqbtLowvEmuLq0oez+YM\nR//qWaWUnNhyLpr9jR6y7kSDdtLPFzXvi8FEQfEPse/xPqffOKxFnvWebyhr\ntHprbs+XpTqxHFTNvEK0qp5lBdMO6Z7m0okdBYk46910OOeusZMyGnsJtJFH\ngoa2\r\n=Sncx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqriFQN3c/y6JsEH7p5sLBTbaHRzl9roBbatNyh8RZAAiAInCRrgIiE/czPDI+Z3vUKkkxii5JcY8RQMS6D5M2A/g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2213-beta_1526331338859_0.0977828228880766"},"_hasShrinkwrap":false},"4.8.2214":{"name":"meetup-web-components","version":"4.8.2214","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c1a48e85f0eea3dc6937adb0f6920e0decc4fc7e","_id":"meetup-web-components@4.8.2214","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-p9BEPHmuO3kL27soLTrYPqyOhKwJjL19KhZuSyTQktcPgLLlpnNZsftIMfVSeDR2u5bACLLDT5Te6dAZXV26HQ==","shasum":"fcc1776f5cad9d2add9659e2cb81631f9f7d00a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2214.tgz","fileCount":504,"unpackedSize":6141543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+fj4CRA9TVsSAnZWagAAVbsQAKPFMtPmM3WcgCJwLKrb\n29vM5HltM2xFJFvInUIT55w3Hy2pZjMsjS9XWkKEnmjRzPnwTpx35kKbpEpB\n8CPL1k22umImN1Bfwdi9lAA/sdP0to7Z/RtiTYEeh1GiWUiVBF7i2T3p21MR\nKCQc8J2i1wlY4vVSdOgn3bnGJRW8GSsU/RQuDASyMC0A2eJC7aR9n7W9Sl7S\nN/VEQiGKSuM9EZtsPqF5/jv1oWToaioT3KPx9hDZhXXGY6KHpjDzrJngekk6\nlIqzyhaeAavzvKmiSLASc8e2PYQmz2FokZKnQHi83wwcabvDoYY+sOOWEFwK\n1BNZ9iazk5R+YOrk+pialU2/GVEClW88Syvwp9DwHpfUmSHYREtF5XDSUR2l\nXhbXVbS562Hgtxjf5DZ2M5dlAiKfgn4tIFR1RunAg+Mem7uFQUeSCa5wDMi3\nbpzRLtsvri+Eo9hoGN9L/sSkAVWhY0SG3bKnyegIc1JVU+qNHUBW+ZMuI4BB\nv6FsYHCSUWWGb4n6Gne/pOauNgreFowzDufu8XEVoOrdNoZYHvQ3j/44SDSb\nsmW1hEGNotIyuZzj+wrTHUkfSHtXqqZArefZpOe7Zrg45+SqwO9cwsxygZat\nRwCY/eqIUbpIqmxvZhM/mtbUfCofqFnrR9gQX26owd/R4YtI5BompXggPVJI\nhRcj\r\n=Wh1X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDNGvoMNIIAgFcA25iJOgklRwzdCDUG/edSs2Cg8UvoAiEA/pNUNGcsKtFSl4o9g6+QJZafncueR9leXrLFM1vodBc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2214_1526331640462_0.6062782875250825"},"_hasShrinkwrap":false},"4.8.2215":{"name":"meetup-web-components","version":"4.8.2215","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"54600e4028bcc3cc2e13b2fef03c94244780deb5","_id":"meetup-web-components@4.8.2215","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6G/ruxKPKbm3uNmPDu4YKcIYumV4gBgEy5p9j9GeK9sqsRRP3h2/yQASz6k35bkwgEwT0E2m+gB1ux+KBaIJFQ==","shasum":"01f47abd5ceded49619ebf550f145da99830d586","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2215.tgz","fileCount":504,"unpackedSize":6142602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+gAeCRA9TVsSAnZWagAA95oP/A+fG7NI1WXclBwzmjx+\nO4UozIdlDqtn1A+gYP1RV4higBeZg10W+BFaed37PY7b5BXzjvi5UMp65+na\nZZnj8SQhwFwlw0+U68NeiyEE3PGvkxYvERG12YIH+d/seP236x2dWjZzq3YK\ng6VGa0BXuulMA3tEXvq63sMejD5RkiumTfyOab09JGiqF/TmjjPYM/IJM2qi\n2oJlYA93tf6q8TBe4fOCbuQAIFYbMYsitZXaOIpOKIx9uYZKp1xGGLujDXmo\n8M7PY+hZFXC5SiIG/s31CDfQcxwFVEAzlCexnsfftgLAIu6qtWhG8wm0q3YU\nm53iBKc3NDXOSnMflqzNImznHH8UXbtr4cyhRQ1BvOs/1RVjAKLoBw4LWwJ4\n43uEjdh2VeHDjhnqDknfJGNBNppfm23jI2mv3WICfZlY1zoqK8knMKeG23LS\niO9Vtu4nEIxskXDfl7j7z8ftm+GMpI0AfWNd/VKqMT9INwkYm81qUV7bCBjD\nWvE2YiH2FjOvHZgsPwb1hcdgmspKDCsxwO9doGVS2CCW6eqzihFQhWatiCo5\nZxq7SMmeKNeVNUE8s2wx8oZEr6tVEr/IhoRlcQL1RrTSD69LJDGKXp6Q3tdc\nn8aTefFBgV3hE2KN0rKuPgxxD07Dpg/nfJb/kN0M9RlFJ2UbLQ9/ZDWb88Y5\nqcmr\r\n=3CBu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1W4DquYLBKjF6ZbMzRg2l4zD9ueCx88rJTe49OnijXgIhAK24s50kfcZSsGp1HQ3JKbpaeFbgBjUC3hUk19dHvSkP"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2215_1526333469699_0.9387283610493151"},"_hasShrinkwrap":false},"4.8.2216-beta":{"name":"meetup-web-components","version":"4.8.2216-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"17d4294a8d2adf84f5f3369497a6ca8bd1287fae","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2216-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UPgicKtUS4p50JWuoqh5/5JVHan0yhIO+9BJvwyP2ZY8fpE3D6we9q6PxYIWWVCkCWiA0YbjT9ffcrj3Oo847Q==","shasum":"7655dbd1610aa06235e2dca7b5539ff9f623ac4d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2216-beta.tgz","fileCount":504,"unpackedSize":6147261,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+0YaCRA9TVsSAnZWagAAqe4QAJYjrcJnB0iNlHsShwxr\ntGdbPacshEKOQKTlmw3nmsPcLOvKbRYdG4FwU7z5V8sanxwQRHKt9KrMylad\nyFcwbwhLaXWJg2YaB62NHREPmBaxuAydHu1fYI0hXwAW1GZkFMCfBywXPhU0\nqGdxr5tnyfb4YdtjMLYLfOHomPaMrj0F/5JcW5XSHArz3k4/d6SPrEcHgA21\nblCJNa4DZg+LNluvywbK1kWYH7xkJ8j6OI4AUecXs9fPOwCV3exAkb8X0Ghk\nhot2WyaNTKgyt0DzpL0xhYdl1NGug8qkZnYdz9AoAj4R0K5zbzNu87Eeew5p\nJPq4qy66BlKmenu3lwuiXJT8o8oVUlXZgoaocfA9PZ00Q15b+mVb1gm5QQEo\nni8yfHyI8hCProKrN9jTFtL25ss8A0W3WY9/LtJPXJ0xEYqf5YpOzVnAPhxG\nbqfqNZaY1j3hIf5l5ng1DSBi/7v8IqQbYzAztI22hKWxcKarBa/GpT5ye741\n2PGJJr7WOOHZeX8MFExiW6zwDrbbNh4+MwxjAuTQsb7tU4GXAUbLfpc8zojK\n35w9JpDfNJHSLIAlEZLLw5Agkxxd9uiUKVXqZcFSWgUV99DUNt0tWWj/xt0u\n27JMcWcTGNY5UKX/8zaXJ4KnAIIs+sLjI8QOW5rVra8OHhcUloC81/EJyIWr\nXj0E\r\n=fjJV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQLvTvwODmUrfYKIVvHX8jqTd6qLlLBBMBkFNwG8/UXAiEA5QaAdjTW2Lr9ox+y7rP9wYbWrDWkPwKz63C+ET5VYYE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2216-beta_1526416922068_0.3681483857183321"},"_hasShrinkwrap":false},"4.8.2217":{"name":"meetup-web-components","version":"4.8.2217","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b141c98f4a96170169a24f3d6d1a9bbabb17659e","_id":"meetup-web-components@4.8.2217","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9w45Jm4Ewts7RI+UwH5H9IlxhApus63ud3aIirRG9lkk3xy3RX4ePDBnViYm1zgWIPk8IMWcYkBt+Pt/SVn0kA==","shasum":"3c38f1aae620157160d57eebea40184b4b263873","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2217.tgz","fileCount":504,"unpackedSize":6147256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/EWUCRA9TVsSAnZWagAAjzMP/2xGVl96vRNZmElvklmb\nkcQbgRSiK9P3hsfjSLKHkoFIxK2+BdIOtX5uYPIUDct7ULSkT3vu4+wHwEnb\nojyNRIeV4WL/2CQPCMi/O+owyZFwTHh54zokcDT+9DHb3KUXmmT68UETprP2\n+3YARCT4Dop5Z0zob4Ya/0aVgc2dEUxHcsOWxRUu4yczKh+TIpV9eMYsvNUY\ndHPruEmaKCeyiRUXkRr9VCn1CgSJnBYr+MJWR6rDVEwffaX0+yPX6eqepptP\nhg50hba+i8RKzm3V2NckfynLME53dYvN8i35OpqIIIt20fmE7+NwQWOEXAft\n3OcCLwN45DRnVT3cstdDKDlBc7AB/FxFv09gx2HqeskuL6sLPPaaywFDAf/j\nMIHDSIlAVY5bl9sfjGWrv0Aci+IzvI95l370iMGgx5czTgY8Ie5HM6SXhnoT\nLSs8BODb8L0x5JBLhafGUXk89pYwKdajZtVVD/L6E9zWMCzoEFDYtf3Wc3cm\n4qrcQ+8uLj3HcPpy7eaCiyNfw8OR06XNAaOwU5tAgx18CR6XmSf7H8RYLpE4\n1GB07VUxhrM2Rew4TDWLg76R3zytNTrxSEtlveRktt7qvXaNHORXUC2Y8nD3\nfa9LNw+DPKzsBkQfogRlXXpBDkYGRRk3+ha++FerO4K8/psmrqGLsHVUSXIe\n8v4y\r\n=PQFa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBukNPuXOljOQ/w7R8cilXo4melqVLRqETS++JaQHt2gIhANHopS560aCacfhMYiSe0zF/GTTXK7U4pwJbebJwlgR4"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2217_1526482323349_0.3089435605442019"},"_hasShrinkwrap":false},"4.8.2218-beta":{"name":"meetup-web-components","version":"4.8.2218-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"3a66a92d481205818dd4051607b9ed2ce0b59627","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2218-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-KDO6CWwkIMEXa2JiX2A6GWFqzLAnME67c/UExEzLV8Q3uzBbHfljAYa5BHu1k9MyOiiGnFRLOW2ugg1j+1t1rw==","shasum":"309a51a15214b87bfcc6b4417dfbc369c680e67e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2218-beta.tgz","fileCount":504,"unpackedSize":6147307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/JY+CRA9TVsSAnZWagAAFvUP/0w3pUmmP0HDuGZKx1U4\nIX6151YsFUEs6VvhRwvFghwDGHC78UY0vzbH6YtHeJNrqM13VgAqDtTkhHJO\nCMKhmeO1uFW9ZGSe3CRKRcId+pubcsztOt4YHL+X/o+PuJRbZS2UeW+xRvWO\nPQ9PoPpEZgSbTZgG2EMNl5L1wqPCafFSLtK2S6agKl4QGyz0lTcnzOLSVzRg\nWcWJr0To4V9PqnzXcjt6h6O1lnZ0LcPqlY085jhzITcx0+gA6FEEgh8eo4vK\nVnR+1cD6li1QKPKZW/uc8AKdGH6NJpO/dBfcS0u/jGZYfT5rfGsi0iF0xYZ/\n04BlsF55EKSvnt4kYBf2zdMXeOy96BQ37MWNJJeL5MCM2ROLsZWOlSivBlpm\nfYW+C6fJDLLph8xUYEF2JhSBL2goW6DJah4UHAMhjuG4YG3d45spSxH4qAXI\nCWQOJfLGxDXIcVvGSqMba8kLZXf5jx5nnf5KfD8SjIEiCtEU2RiaWkfLHniP\nCbXJ+0yfOHVNZNmx/o+ig8XSlGNHcrjH02MngCwZgMCFillqSmuLVdvEsi/W\n+3O3kwagYDZCQ8hnOlCI2ehmlWhQXon98B2esN9Gf5bB0zix1DHJrepCOaNx\nAFpHyEGqHYHa4TayBFBLlaRwTjQw9RpCpduemRURJ1RykWNAWf8NcFIHuvF0\nKr6d\r\n=hj4b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDu1FN2mMtBJVNLtYrxDEQZw5ldlWv4kvkrVnDpoQV69wIgNn5Oh4Au6DjDyucR3gyU5FNNJL1DV1dgxhSCZGId4xE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2218-beta_1526502974171_0.21283896904154975"},"_hasShrinkwrap":false},"4.8.2219-beta":{"name":"meetup-web-components","version":"4.8.2219-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"dd217382828be02a3944eb8fe7f201046556f1be","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2219-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xsRvLmMf8L6/4vfL6adJJ1Nz1LwbKh0dySYwBtbg2SuKEyDOTVdzGHShMbgEpMbL+Xi4aIuks8hBbSWlNdtHYw==","shasum":"e03db8c61881416ea83e70867fb1059aaa146a6f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2219-beta.tgz","fileCount":504,"unpackedSize":6148108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/JjxCRA9TVsSAnZWagAAA74QAKNEAgIwBydfitW4v0Eh\nNALeuwzzTfGRuam/c86Oh2FPWbc6CgugKhPtGjBNMWROgCFpmHR/rQ887Ozy\nEVERCNqleP9ia1bsEuF2fV0X0j/LEfOGcIhqTfvoybnAsUO6ynCKGs8ZT8Zk\n3h4J7Hvjht8Jz7klr+uQHnpNQkmjvV/Ru62ZvCY+htLKKCbvvDRMR7APsYuH\nQ2JOASNkDSf8Ldw+tnQjzqpcqBKQ9CRjrYYyN3TqthKmMloeJOLd3avzwECo\nnyHC71np+/I/ShbnLK9RopzNpbtmd5WN1EZ5EqIf4zMVTPMOAHkaX6HhRfUV\nAkTCTjg365+pn5QY59dvtPAlxIk2v8w5MuQEOOZyTWFS9G55m03a8NZpaSsa\n+A69QPc8f/a7SNWnJcigPnkyrKgIN3f53nNuuH+dZwfvzAouznE0PJr5D4WR\nTaPPiNQj5pdpImzWX0gqupph19DhHzqzFxvN5wJ3dIFx+oIRX3jE7j2bTtY5\nmApJY1Qr7mUVsiUneHsP6zeyv4m5/ufDwcqFlD6f7vm5sIjc5aJL3ptvykhU\nf4jIKKxp8pF6DN8hArqn/hmPnbODU6mEdZbTPvrvYTB+bmV55IEllTzQNdZF\nM5j0Q8gHYhuTGhJBug88A1Y4IfFFKQ87or9frt4F67yPg0MCNujJ0B+3wiFO\nQ7fB\r\n=WPGX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPDjNnBTFqwiXIXCo5sqcLOM1vAFDpuzokSXwO5h56LAIhANZbgHrPVZ1TeOZTA6uPx/YnzJ4t5GsOIQYXLgKQfZwZ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2219-beta_1526503665220_0.9134990806773653"},"_hasShrinkwrap":false},"4.8.2220-beta":{"name":"meetup-web-components","version":"4.8.2220-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c679baaec55cabf44df5e856050e657ef4d23478","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2220-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-X6wbyV3EL3aMyZM1K0OJbgxLShfzyTuIEVbo03NwnABcMNioB6Euq3f7Z2yIOPkepWz8bI1iUPdZmKwvjRj0UQ==","shasum":"c5c32042ed16cbf454972807839d684283349b33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2220-beta.tgz","fileCount":504,"unpackedSize":6147281,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/azpCRA9TVsSAnZWagAAnHgP/R9rbkPeNAG4LvGPLQxd\nhGU2lUBcTAc2Lpo93H2NGpUc6oKWB1OwG0YS4Qko7lxByhcwWwP69FpVOI36\nXDS3Uhbc+T+9MO1VQYu5RmoIW5bPP97tRwZ2IbStq77yVM2LQU8PaxX1bDL+\nDOv2ibHwprYAiaeM0HJzWIoNAO90NaoDVIfyfFadf6pHMwi0b97JT9HoHgla\ntbeX6aLFVylSZQzhNIhd1NSEdsocihMaHqQS/hMc+rzbBr6lK7mUaZ/oxmvu\nwdPxMZwN3KBLgalsHhBlz1wxt3+uXZgiR3G3aD/8x2uRtgdbpd98A0rab5QV\ndWX6Kn8GCxhGuvJ5futieuDwuRfs4VUS2ZsHf/33kU5nmPaRd8GVzos3DO3s\nQaHaWDu16eaOcfO21BeP/4JPFV66lUuGef1AHXhFXnL/CJfO3x5sFoXkeB1j\nghwYZMMmzlYDxFKEek1X2cT7DqB5Xa4pr49pj2z0i411GtDiHwirKRQwdnMJ\n8t8jOh674LKnFtMR0pgoeyXJhvlHReZbQba/Pm+ivRrSHZ8KSMv2hOsdxe/I\n/vO2fe83vTQjnIG5+mDt3YoE7gmgwMTz1wHBVXldzeQ9VmQseSAmFmC/WRl3\nzOVeP17i6idQdLb0FQqVLj6E+W7ewTxSuzEwx2cXrVy2ExHP/jME7KLf+vih\nosJB\r\n=YXQQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbeLtzmhIk0miGBNqkOhzV+inK5MdIijw/03Vqe75qwAiBZhRp4Gz5kAqtERK9Vbpo6PIUAI3g4/QwiVor5yPbJOw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2220-beta_1526574312642_0.3556850818873314"},"_hasShrinkwrap":false},"4.8.2221":{"name":"meetup-web-components","version":"4.8.2221","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b1aaa0c99835204781e7e99c04d899b53909296e","_id":"meetup-web-components@4.8.2221","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZwExCJWDoLVpgJfJ4VbHzG7FVh9BDSwJtheUo8kRZFC7cqfUxoGsSWkeeEaY+N/fo1PNIGwnZqkx4+6J3rldfw==","shasum":"b18a5fd489a63d56b78d69fde4c8cdc399f568f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2221.tgz","fileCount":504,"unpackedSize":6147276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/a4xCRA9TVsSAnZWagAAfkIP/3A72t6WfJ6JFBiNe9kk\naqKZXQXexdty3QzE4rE6TQrDklLPTh765NihlgB+qSq7jze5G6eVdCrJfhZO\nEkHWuaSDKHY66LbL77YMFtEAnwNsNJ6RxS55G8dJF1Vxl5JZMfrbP5yQEacx\nFjMg0GNWlbqm6G0UR7tlRPxvOCgHZ/Z0lYegklkRcVddBIrSWG8g93PdVp24\nYfAvDqtECdJ09dZGtvFtdRU1Qdn+c241vZTKUBHjUHSVOzLBvqjzGkhB8SwH\n5FV+aSzG+dyS5i/TvsD+Y2NNZAr+mdPjKewcrmHXLzsz7WDxXJOkZHaGzyS3\nvMnQyTyqfkYOL10KyRaIzmq9v8peUnjzU1fQmqgKXBWIkN79YY+gRIt1E76P\n+8nx0cGeYi/MvGo6PdWULIVtb8dtILCCBqiqvqsOGK8rs92Mbn3Fg6WVgCr7\nUjgIEtuZX6cMfo6cRkzYveDlLD2EH2tnPQpRfukMCZtYMusvKNGtgT0ZO3cu\nx8sQAuQnh1PuxFzdnWJ8HuuXNByE7hfcIlDXMtDHOiaRWYcCrMU2RX7PdmHj\nkMpHRRWh5/CPY6SjmK2aGBxXH0dLNoHKSg13qCTsjU8DIxQlTDhnYCQRSvim\nk8B/Dii4mIuE7lOPV4XTqLpZarMoH9AyNkgckIkI3mN4WCidE6j1+FacnQsP\nKUsO\r\n=lqff\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmRc/gnEbh+L2uyXWU//zk5+IPau8bEu+P/gTScU+BUAiAV2IePyUGgSRbOiXDNpJOUZDIhqnOr5oUTbieUH58j3w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2221_1526574641315_0.06805512259446034"},"_hasShrinkwrap":false},"4.8.2222":{"name":"meetup-web-components","version":"4.8.2222","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fcdcac08207858fee6a7494b3c019d2ebc055f9b","_id":"meetup-web-components@4.8.2222","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+5vH7x/UX2s/OZDWuBHFHoyMmctUkR2xK7eAhV6wHBLjPTagRzi6ztHWKw+59sHXq+S3y0OWOVm0aiVdwV3gYA==","shasum":"94a8dc715cc68738dbdf22c8249a089172de7fa9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2222.tgz","fileCount":504,"unpackedSize":6147322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/bAUCRA9TVsSAnZWagAAk/UP/3JaTg8dCjv5xZ7d1qfS\nZaijE+ru6HWELKRQZuvpr3j93uAGB6T1e4g/XFX90XOjfEFUCJl/pWOwBRfe\n56kDe+hqC1oYSBl1LcNtMfam2gzCPt4gj7HlQigWIG1Qx4RClQsAQV5fdfb7\n+yoEgh/JfOb9SxA4a1TpM+WL98EH8Wsz01E7Ae2CPva0WzIIH2Y1FXjHaOG+\n0iULajhXKzzkpR2YMOcdlszyWiTUrC3srNa8EkJOX274FKsvW7DSkLBrN4J2\nBOxJ6IykdsuiqUfz8IelsP1mvbBJnZy+Z/Ki30nhzLvEf4tGv2AE1SUzwPxk\nuT/Iw7Twa6fAzlR4KDJmFwlv5Pex5QrhzwgdcQwN4migvDf5r1P8YTW5QOUI\nD50OZbcThBg2/iWj7DZ2KfyHNTWH2XNAOa9ovs/39n0ymvwVsDs8dgOFdeLp\n+vv0mcm8WtqCB1iYLpsyRveUuL22msAkisfDoAsUlPgxrFkvsviVKbxCl6xA\nEENC8PRK+kYbxc3p8XY6wfhyg8vWFcr5y9P0xOV/9GcHlCbRFJnChVbZfGCa\nm63x3wgYABnzj+oNTj886mfM1JlOW0246VyD3iygNRitRs0+gk4BH6Ox43Uj\nP25Rjn8L1sI+8UT9mp0OzzdgZPwPfKV8XvINwIM2i7Ps5hI75wIFVu902e92\nYnD2\r\n=0TiY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBnj91P+mT9JCYMevScm7yGwLlJcDUHhkLEfpVD2QCYuAiBXwRnBWJTRjXRAL6aOwkVgr+ya9BejV3s0DabcPBL26g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2222_1526575123992_0.9599340789142932"},"_hasShrinkwrap":false},"4.8.2223":{"name":"meetup-web-components","version":"4.8.2223","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6388537a3a7c56b751d72dcc982220ee0cb70cc3","_id":"meetup-web-components@4.8.2223","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9s3B9q0ownl0CEumVtxzhbLKcL3RBxe75GXx6hqKx8OwK0fIEGRUXdJxx+lF6bFHfD5TkAsl8bTqWNpK9C430Q==","shasum":"6b8ee32182f0ee30cd8e130c181bef3e10051a1e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2223.tgz","fileCount":504,"unpackedSize":6148169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/uKbCRA9TVsSAnZWagAAAJoP/AgN5LkeflevL3wpDjR9\n8GRIDLf4byF7bJJxOdOyjva8mrvwr9hmJodvECITvGGvTsod7ke01xfoiy6G\nxG8BkDdF+VOdtb0bfyFFNadr8TGyXeCI+w47w+6aSb/qrEhyS/uNEPf91duU\nq4x13wijfWkdG8J658zvT0XWWr7Y7d/tu6xbOtl5solS9cjNl0pHnknJ5Oyb\nM1p2RW1Re1M2l/7ujCDZ0TlMfy7rnu5Auzu1Ya63n61aKc4eMqAHetmg/5X2\nQaUkPWB//jPcFdoox1DmhUiJVttooed4jnMvYd04WNR4R48xBI/zQOpBgF5V\nUneI8f/yCdCwLA/75alRBYlnyzTepNfyPogC1jG5SAEOFjZG9c9uag1cJ7lw\nzfomCPp/h3Mjas2JNkhpd1qE4XrHUZ2sJ3D9T+jqjiFH0BBBMTb6fDBuUjsL\nYPQFgz5lJ8kLrxSwLMk/fHxdUsi0dtC1eMZMIAvjmHEYqjuyZxFEbq3+g7qK\nwEtCd8WujAHevk2CgQAhQR8yr09ooBgRSTTag02kT5W9zhOpUky+5SIa5Y/A\nulhzb0rpb7v9MYqT8Q2TyPhIBcvinSSTxxq/SSENp8ub81APE/QPWSGOba8v\nekUrGJWyy9F6gjwbCiu+sftUfFpWXfXFo+oX4uXzGHHVJvRDaJuUD1ys+uKD\ntCnx\r\n=Rvot\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSvBw+z0zELNfdOl9PpQS4tnSsb5ciP4tI8k8SF3p/8gIhAIgh5c5BLrXZ2KKkjqb1WEoDkrBj3lu+sztRJb3D4XUs"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2223_1526653594858_0.5129723142952634"},"_hasShrinkwrap":false},"4.8.2225-beta":{"name":"meetup-web-components","version":"4.8.2225-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"75e1be8c4aee40603e1cc09e2803829a601c1517","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2225-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-M4TUXNwlGp4PV+sua5DvhcA6hYtLv9ozd0ef8lw9C6To0UB5ujEEVQXPgOBt23KfLwt7Iv9FVisn4XHDWbVZgA==","shasum":"4aff6ce8ffcd33c2d47e9af52de4c94dd4cde620","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2225-beta.tgz","fileCount":504,"unpackedSize":6146727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/4e0CRA9TVsSAnZWagAA82IP/1Tjzv/Pv5tpV7b0lfDK\ntphBpduzaiVZuG8QZRIwR/pgsa/NetEy1vgSUII4ds+gi6Ssby9dYLzr4k/h\nYA8O7Id7mOywL3B5czbAf4pOQdVrVCzRrcr+PbNLe6OIt3exn2a1kKLrKHk3\nvNm5qP6QKGiDRbcIKTuMnAULmHtMC+SXOvHZf13nXsk47UGo/F4aS2WEQkX0\nNz8CzOCgrlx9kKYHZJBXcidqh6ZUSBxIV/mnHDuJJ5vmdT6xY6daR0N6c6F8\n+HBnS1Wx2NVQTdAVVeVwufqBKvucKr91IhIDomUuYHRmmCXd2ea4kN5jfcC1\nNEXqQ4MB+5e6ICY7iEWbVER8jqpK9hXLTB+CEpDEHjQsg7tHcUceOBKRqcNl\nmTj3k5kPlzbteCQKzw+d4dK+6Y6H+fuo0w5qMTM7+Z0VfRWBykDnLcGxy6JW\nq9XkJa9PijqF+xt+Nw4RxlkCHDNnHIdU4WnQrAvIq4/ldQKzFYMvkaYCy6Uu\n3LLKA7fwrafy9F+UyS5qqp8Yv5UpJvbKBnyFNpPLrDFzADvUwOMkLtNMacUG\nze9f2ZMjAGaosnSS4Gnn2Ln0pZchzpHhnlC6Cl96GFGuImXfa1uGQjuh1u5T\nFKDpeRfViNdiSPqIadGubAyENG7OZtUZoYkKih/gQV+Es2HPYYQGSkuuXyy+\n0UUM\r\n=XafJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQNB25EoCf6jf+dyhl9Lg/NKo+s3QUsuvHjOXzdFlYtAiEA5Gv9tE2QZfAYFqyXk26RDcuucIW3lyYVPLvMRvBsu64="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2225-beta_1526695860072_0.32836975830670934"},"_hasShrinkwrap":false},"4.8.2226-beta":{"name":"meetup-web-components","version":"4.8.2226-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"89423e8b8ecd916e3c00ad25e82e9b9027fa849e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2226-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5rgvpaEhvtod6+dwaGgSUecnhw3z6a3QG28nTpE9HADHCSKenb/38PaMpuM2kDFc10SD272xiGGV8ipnLXsiKw==","shasum":"cc922e5952061339b4d3617fd99173ad1dcc7b16","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2226-beta.tgz","fileCount":504,"unpackedSize":6148515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/4hLCRA9TVsSAnZWagAAKGEP/RnPsw9sL9HQc/BWGK4K\ntwKYKj5PLrkhyIWwBDB3nzweIN+gz27RCQyCbvwNevr7yyB+o4L8XMs1VriT\nTlNk2oAFNG3TxbGReItOAwudvM9DJLJ6DGgUw4o9fmybM6X+Ge4SLWCrYJxN\n2y0kEEGgG9PSLvApCImCJsFlRMQH0PO0UMD72eMhjpGeQrbsPFeWvtFBlL4L\nVwlrYdV6Q17tQASKjULa0y3UPgPl1TvQrDCNc1Nx0ckyaoZQIjObo/9hu88+\n5A2P3Zls8OVDvZ2xfwxoIeRctq1Dtx3sCgZiQdDMEB7OUD/dHA+jNvfp+qfK\n3g0Vs3yKhbFWztMJjUWh+1gGLS3SAkXNKSFXMRILuz/R7z8hr2bN4M9u/xoO\nEt65R7u84M1E9EJkSkLjOxef0fDv/wnFlGXcr51qUFZs5k19JljS7N+0afY0\n//wNoaaT33OUsnwcSAKANQ1xo+4v5ZrO9FNE+fhr6mmTzGZaAPDQM1C407J9\n4gvlDJIGfi6TsI39LbFBvz9zhuG64hElsbukEuU45p7RtZRiaWa5Z1xwB6Gt\nbvZ9hTnKd+KU6qYgFcBWlhoxPDQNQIotBaJs1B6JEriO4Zde46YMyWNBhcqm\nXNDr0U/pTm3oFebc4pIaLFnR6dHt9xKwWEgg4ix+ojNg4kjiz4uVNB6Sd1Gd\nV57L\r\n=+8wX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCElWE9nME1hwrK5vwwst3CQJ7vh8EapGgcIg0HsKL0CAIhAMkY8MYfY85RvvYqiXi3cbIxgk+jOB6Jrcm97fuwovnb"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2226-beta_1526696011339_0.6065840086624976"},"_hasShrinkwrap":false},"4.8.2227":{"name":"meetup-web-components","version":"4.8.2227","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"58c05b76fe8d7f06c56a2eb600f0ddf94c7ebf12","_id":"meetup-web-components@4.8.2227","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8uPsJT152qVrlGUmmb6iE8O3vsM6AdrZ47pNODa6bLQskDe1nN0jIYNDgI1QY6z2AMbmnv3HeHBIn0DPjZJ38g==","shasum":"0d57843719ecf733eee7aac9530c3f913612c053","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2227.tgz","fileCount":504,"unpackedSize":6148510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbAiSqCRA9TVsSAnZWagAAL8UP/jJInrnjPLXQnht0iWgK\nCLHcfO3AyE8WL93C5SuXP0VhspYNxqM9KXmIOWwSiu+06WC1K+aLPKfquAxC\nnZ5yGnewZBWiB6jGwMphwBcZaX5yJSdrEo0C5RmFMO8vNkizUXUqv9i/XDHh\nxcMfsCwYODL/p7DlpBu8f5Bx97nrmsiLf5O8QwerVmsnGZTUA9O6NnNk1t96\nOTQzZfkm2Fmn21SJWEo5dRmuKlJ5F2G0IfU/KFaB7dmgg9pzpoCjAsAxNni6\nBvxlMO6xbQ5NaQlxhusOfmJMBFCplPY9Xm02faPJvdhplZAogL9kr92DKsTv\nd5vemmSbpyZ0ZfzE6Pum/foKRh2oUZ7S4b8qeXIf7CrpujbS8EpFFGNQNuMu\nQmSfXf/OwY4gdyUuw6j59jWSy8Rk9/pv8r4e7P8pvWJwcTt55TYyadvaxPnq\npABipaX4kQ/XKQdQBoa62ixrsvWvuZMFQiPCAFXroeArClD9LkfBnmfITOYu\nofI4c5brxVkFVWV8o5n7uI/Ah89GcfDYed2vQDulFD65njqIhdk82cO3lEWq\nMLGl5jQtMCN1GWuQNOELWkXrqE9xOTpzC6oRq2gt+CtAahaKXrRyDUoHraa6\nQyIkZwin7F7S+hfB7vwSgi1OxfiTZmPfdSvI/TrM0imrlkrwvewy3tRftEVB\nO4th\r\n=LtNU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDw5wPmEklDjrRQvhw4Kt3GDauRlqxsk+LajzrIJAH9wAiAIH/y3wrBrZ/8aiXR5Ww0O+K86+hoFbM8UoaDdI/jhVA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2227_1526867113939_0.7147069738639458"},"_hasShrinkwrap":false},"4.8.2228-beta":{"name":"meetup-web-components","version":"4.8.2228-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f55ca686f6a2df21401f8d4ad0f7c7d3bf8d7faf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2228-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-a4OBBAAikKRPTom/FtyOxWxEqki6O4RAg68GTiiADB9JtqH7hhnvD5Y6XsbesJ/XONs1pFNwzaAkJJXnV4cXyw==","shasum":"90b121ef07f5d392e999fd9b114fff650cf9abec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2228-beta.tgz","fileCount":504,"unpackedSize":6158628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBDX4CRA9TVsSAnZWagAAh2sQAJxT/7/u5XIYgwpmAl7l\nNUKUMVZ5JStxJfpmmHv8O/E4TtXc+61ZrC6IwwBiboSzb9AzJ0nx4yTpQJv9\nrDshJU4jb4ClAXCztz7KCuC4gDIowJ6wqmOxKf2oCM8TgYg2/RBs7pw72HUB\nTxPSY/kFnlAYzoeFND5VfkPbjz6eb3xSWeaQKuIirrMOUI8dHh2g5Cr6j21B\n9cIOo406Zbk16kbp4ATL3PlUz6NQ5qMMWPXv1icSEj4Ksq6eQXXBgBcx+ALz\nlfXbJ00KlUMFW5L9LTX0ajucx3fZ9WaDyrPGVWPruB74NznlSBZstHz9Y9p3\nmqW2mG52sij+SIzt6X3UYGMbM6gurcRBpP1wMFMn/J8jHDmIcDhLC8BtEeiN\ndYSUyiF2sB/1gnHwBE7PchNFxYCJlQz9S22xHfJ00CSxvTmferSFrvjoo7o7\nymRalXUOCqfIKisWGSfXYHCWUuvAVXfAPUDxMaywUiHu7j4PfU7eII1RXP/r\nhPo6PnY5Ia1sZRP7g4gqK3vnYU+KspcM80nocnxfX7b0Jr4Ph0710v0JzrDX\naOuxR8dwJB9cmQxAPPi2Ycu87EHTXQpdTE1kV0upzqRpC5lDaOkZlRjbHtBG\nDr/jZLeNBb6JdSi6u4ipGYftRKgloY8FxO7pti/ZDgy3ZZaK19eT4ChgML7u\n3fAV\r\n=Qxpx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIESW8a+OL69x3fJWc6Lq3srj+MT29dzCWl3V+bIcvyMKAiAzDDGfEZSd7nVWlRLgLn1g/e8gU3RCqRw7N8i2SrAb7A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2228-beta_1527002615703_0.9523470354865611"},"_hasShrinkwrap":false},"4.8.2229-beta":{"name":"meetup-web-components","version":"4.8.2229-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"9261063c26c843c14afc6759da4fae0320002047","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2229-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+sw0aSNdOTzrhwMOxnUbAIrYKu4uJUwX6Nj7lJVxtoWnWJeUbgYR6vIU8047u0y73GjAT9yU41HSYPeG7r3GkA==","shasum":"ae9ba2a8d91fa53983bb952b29ae56e12caafa68","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2229-beta.tgz","fileCount":504,"unpackedSize":6148521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBDhZCRA9TVsSAnZWagAAnREQAJ3qMunAmSVlTPSkNZTd\nYmfzaGeEiEYep5OvV0DQGvGG8zVXui4lP8t4pumJY71CG719ftOZ06vUI0Pj\n+HIO7cBFEkRNsEvhAkeIq2z7aDIftobEI1a2MB71agoROAm8BFE+2xnaup9V\nYlba/qhPXsH/rEy+yGPsyxIWe3i4k9WEsDghmc8Dw9UexPSN9qBAq5YtK5x4\n6jSeW3vWD6/OUzweUARYAYFik4drxJkOmIPGmpRS1neZcBjsqT4qyXO5CpNz\ng8PATi2MQ5soKtsyyOHOJ0iGArqyDCO32RmuAHdU5OZSCZNNFR0Pc4D9g65T\nrcIYNsn4vYkHlxcgJ/g54LifU0Uv2ul1J01vOyMt0ZxVHQH2C9tW+wZgdHN1\nSoCAK+bz+FfOkj0X9XrDTBhUa/V3bJ8bp4TvlLOZkKa+9iUbOUBL069bOogP\naSjfp+LJtbyCgFnHD6xnTKeU/gD5nOv1Of+EcwBKxE62SNd98RE04qwO1WPH\nxxnBnFhTJTRnWZSZoLfuXdHyNqNztAJCBMmhXrv4DetOPFU+g8f+xPK4iiug\nnKaWAQKNpo5wZnBpWFSVJGLEESkxSnuZENTBdBio0zh+ivu3tbdbOMpoELYL\n5RmX96iEUDxa8DBTiUW2KNIHeaAdYSwI/AmBrZtO1pfhB8zIfSxRq4N2dXMG\nzerk\r\n=yL2z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkoTXy4+uAoSe7p/EkvDwLfi78L8r6FdcWhrAwLvwbRwIgVbHeLW+n7F1/bPt6EbkiAKgxki2WOjv6t7lnsAbY8P0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2229-beta_1527003224641_0.43348613454253315"},"_hasShrinkwrap":false},"4.8.2230":{"name":"meetup-web-components","version":"4.8.2230","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fd78562ded6db328433f539cc5ae2f2f3ed883c6","_id":"meetup-web-components@4.8.2230","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-S6mxiZdcXfjr06gQnK7qm6vSZrwNksMH1icUcu5UUyM2m7llG0/rFoYpM3oV+Q9G35zpJTlnTCN/slkrzVqlTg==","shasum":"fe608c97b5c8a497f789406c31d2622b7baf946f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2230.tgz","fileCount":504,"unpackedSize":6148516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBDtFCRA9TVsSAnZWagAA28wP/3wK1ESxepwQDo920mAP\nuPOy9E2wC/fK5v1nc9c3yyPxsSXP85vpZxIUM3Ez1YAIBfyxjl2mxrqAwYzX\nenzVEUZus3LMfWzzBXdf3aIDOT9DkbTtKshuzQYMo8qqWB/+iQh1u2yUDYCx\nqZgb4BBE6mxpPjLLc9ZnFubAOTS/2EqJy75lH/4iynXX+6ft7ZnfCGTWdsgY\nkWfnc/aLAgOo1r6f68qTO8sHX+lVueC8xCQOk0yOjULSfsk76C8WCD9xVgPp\naqyqNw5AdWAYxTliDmIFag0fBazJlj3/vxshhz5dsLRscJYnkJkxiRZ0WkCZ\nDymdvAMQIftDcIaMM6rpyomWifxkxHjzDKlou+eHbkpC48EmnkxBbv5fpGYz\njWxh3mihGKB8JmUa4o6xf7c1HzQssUUoPjwGLUhxFQPWC6nnCmN5YsvriT2n\nSiBAjkHxFew67W3ESmOKDZsdDdPbqlN5Cntz+x2e4Z0/sXwpWftlsoAgrhxv\nUZ9gPV6244yHBM8Cf/nZ8WgjcZ1VqL8p5hHhV1ooCfQDxdInldBkpF+nGxeB\nGDe/2CPmVpOJ7LY0NryCjy4xbmpuQ+Z/p42t8pnn1al7W5BOw+E+bjlrTAbE\n5+AiiU+dEsafSf50ccvFy6rNc/gTkRdx8M3YogiC4EdGS1f6uAJNwcuDG7Xr\n4aEN\r\n=5Ej+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL8DLlWnxxJI5rhdLBHfYPzh7NmvvJ0KrDdQtcUMQ3+AIgdO7PhyxcQEryJ0tyHTZZ47LjO+QwmGj+w2lMWiAyhPs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2230_1527003973357_0.9175409419669236"},"_hasShrinkwrap":false},"4.8.2231-beta":{"name":"meetup-web-components","version":"4.8.2231-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"ea45cbba8904c631f2c77a98454b33a28ad40262","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2231-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-i00rhCCrYzUS7akYB3oJdVjuRSLzqvb/bohehmFWnwdz4n+e/IFxMYBDJrZeA/b8krb0wVEQuEY+G4/7bFJH9w==","shasum":"3393d4b0373b149308656eae171048bf7453dca9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2231-beta.tgz","fileCount":504,"unpackedSize":6158289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBDttCRA9TVsSAnZWagAA8MgP/0ULWVbdkZnb+crTWpxn\nj2o8+SrDHvc7W/PMi728m6NR7PAIqssH2zfrqjZi2BrTtpfbwucMUJ8grFD3\nwcKq386FnF2sTaMZIo+tRQJgdBJuqX+gPYYitPKaKg7R7TiDgjhVOMjmKEnd\ncvqy/5lab09XElBpSKGIRVOAnaRJj/uOsGYn6zQbT2o7V82GDde0AMoOrDnh\ne2nEjOV49u16+lsbUq3Hy+wW66nJvJj3wJdEzlwdjaba0DRA4oKwdf5Dagpd\n88WovyHSo+rT5RCGMSKeAHF8zKz3iAqsHOzngGFr4FiEAdoLKx8TLLaYGQcI\nMwb36afRgtqaeu9ChBuMa5MqMbJ37ILh7CLMBaa0Lokhh2ioFgmXo9gIlyKL\n2M5WZ1smKQ+h0UJYD9ZgDd9VeVOtOOIkEkHbslPwaO4fCN6+EV6nteatYVYK\ng0fRgAa3OVV8tRZdtrrqvi+c28sw5xSzf/C0cDGn49k+GWYX10UeP3cJzEd1\nipNiy37E/VOBs2Qrid8qJel1kukIWGYcyenx24jy5kSAWEvs4SW4oVIXu8CC\nGPRUk1R377MenwVFt9k0Q8PkBlY50blmL7sJEz+aloj52/KfTqk71Ncl0pcz\nze7fS2GZAkm09kJ4Oe4TBnSqaCFnT+P5/65hgySSVLj8H4aX+ADUFoCkSt1j\n976D\r\n=jK63\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9UQQG0eaAJPVa7aiop6B71AALvIVvQd/jCaCfkcB4AwIhALkx7qZiOiyU61eVEUJTsHLZkNO1zcReTuAtJp0ZatoT"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2231-beta_1527004013217_0.6797715759600824"},"_hasShrinkwrap":false},"4.8.2232":{"name":"meetup-web-components","version":"4.8.2232","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"aa005eca45a0786f58e8367aa3b1d3bb5296147e","_id":"meetup-web-components@4.8.2232","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DCtjZ80JrbMosW7efLDdcRv7HgryME2NFYfTbspzPX/ImNX48Q6lwndFPCnEsoxxVyBfqBXQ1a+5mdfy8zjHWg==","shasum":"9cd0515e126896ff534aa8782227d2979a49d4bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2232.tgz","fileCount":504,"unpackedSize":6158284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBD53CRA9TVsSAnZWagAA7mkP/Rv+wOZVwxILLHS4Evxm\nwbajpjl5euaDHkTBwUy281LCZMz2ze7vBKAkIEM0tpp1e9MLWupfpyqpy+Nd\nQjbr7JQ724ybFJs9cAvcoaR0SE4eQ3vS0NbGuV51nrqP4SXKdESNTbwXWfno\nayezu3QJctXgxLkvPxUMz+FvGjIjD5gv1fKp85dSws2koq99bkgJw5IeOR75\nlrBnAf8SYe+zPMnLV6Pu4HWkhpaEUgFQFpcGs+5qX6ECj5dI2/JXsG/VhW5v\nh/V2Bes1Jqew/HhdbTpeCW8uawv5RV69B+I11tNXDEB7jOprWTHO831q28B/\nhOueYwB2alOpfSfwsDS0A6Vd/QQui0R+qs0EgrMJnwiy4dULGLdICuCAkw3/\n3RznCtCp5BTzRjBe4R1pExL+oNRpKoDUrgeWZ+aZGUb9rTNNqrfG+G/PVa4O\nHrWjfPreNhS5KFBwluiMEmG++BNfRmX9Dr6a8PXKr6AtklfW/BsMluT+dVod\n4tueHJmRDDIXgMoLFIjtM2yCHWkja6vHlKWsoDDIfxxumfYPx5ZWNEN7GEZz\nX+HWiE61U1HfJKkCrjy1SacEP1lgCyX//Wc7IgxLLeU0LuQaDxbkpDju/ORg\n8fg6Qntu0lAVhZIXZ5HWYOA4EhLDyOTGetQ11pLDUnFdYlm8zT3wM/ywQsUO\naWLd\r\n=5fZI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdEan4mSy+ANyhHd4Alyw8DJxOQKqHzTIqVkz8o5Cx4AiEAomTAurDlHGUGnW5YzKB+0cUQctruht151iD2BWVh2cE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2232_1527004791595_0.6483894810445487"},"_hasShrinkwrap":false},"4.8.2233-beta":{"name":"meetup-web-components","version":"4.8.2233-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1ce3eb143588716672835b0d5d66b7b9a28d73ec","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2233-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OqlQxSYpjW1MLwMhPtmWZ3LhOnGsU6Li103QCc1ZidrqXYASH6EPKn0V92C4qiZwZcPp2hDKkR93fcmhsv7sFw==","shasum":"184e77543bd67a875a4be03d6efb4ef3a844f0f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2233-beta.tgz","fileCount":504,"unpackedSize":6158945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBWXlCRA9TVsSAnZWagAAaNQP/16hMnqA1k0LaGMQ/q7r\nXr4XMOzjX10btGFhxzdaAYlBVJCmo3gXYiXVCF1YFU2KBA4/MF0UUy0nbLQD\nV8P2/dZ/rSpg3CbJyRBdkz4CQ+ZM87pyQt0yHdaZuIVBhx5Pg6b+CRGVy6vk\nb3USHzAPJMAjhE2XV19QIFvNQZ1rStj6V3XjoxR0+prHu+DYHHq04JVA6NkU\nntLwxpNqE57P+q+IVrJMpa9XdGpO6rPBLcuhTGOQw/1p96H9IUbIY2XBVa0N\nBqiTXGbXwnJjCUUez11M1V9pBenLY4NgyRiJRTHYtOzijxQFVma1D37hVbSt\nf8Wy1sVQjYiQNbWT+XDZ2W/U6dZABNx9FTxmShhY/3Qhtde1l7fCBeTTTBqi\nonJePwDp2g222NhM+tvCz9UBj/aG6yTSFO55rKV29yFgdbTq7Pp0+8q9naSZ\nhZqXK0KFWTz0H140wEXAMhStx8nibbBr670zHmyGn5uY7xIlthPjSMxi+QLS\nTHKMeOmJVcZVn2pP62BvI7paMfO/uCySWSZb9ZfA75uQvyIZSkK+16PZZRSD\nDEBTfBxk40Vd6pQ1QhwtoQfTBxSkC27WWbMEfJWKdmUqtWX0hCMinCNqzrBT\nIE0uoJoa4xHSyppp0HCXSaXvA1j6S2+t9x1M+rLKd8gRC0BMz+IxpJzLEw53\nPVmx\r\n=0kIJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8dUH5lMkc3t0AE401z1woMdfqx+64jnWsSZhgSVxqoAiEA75eIJ4ethOkns3u5a4z+4D5RN7HLVvvVkpIS442eMpc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2233-beta_1527080419088_0.058246322260662176"},"_hasShrinkwrap":false},"4.8.2234-beta":{"name":"meetup-web-components","version":"4.8.2234-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"cc4f6933c56596e0028d5b99cd7344b3de15fa78","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2234-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dWWFziILMZar/mjbOO3fbQ7vqje8y12S6rv2FEYs+fdqSpKuJCqHfKDTySG4gU2nU+UuxGEAzVTRm8PohoYsFg==","shasum":"934fc01b603e9f0bfcee61276b26b2698ad9c3ea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2234-beta.tgz","fileCount":504,"unpackedSize":6187980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBYV1CRA9TVsSAnZWagAAF8YP/iMu6NUFbk1Vg/g6OXXE\nRmP0SGRdh+RfqQV58VEtQ6jxfQFQahh/N73GoKplYH3YbOEiap9jMBjo81Ps\n/KNo9G+TmPk9Mwi+PGz9clZPfL5gBgmOOeaDrEA63l0FTgSGyMOv/D/xl3bF\nJt2gVaT/4S7D4gyEy9C0EKcv98DjE13CFR2fxJ0yNmMD0eWsomevlTExVb/l\ns6Bk0IC8ISr5oqYWCxIkEJnek0e3kpZumBSfink/i6wp8gxreMVdaR2Fse6L\nb4aLzWE3/ZdBRdVfJuJMZFC4qbXF59+ZMghsI8quBPLs1keq4x3TpkYwKvE7\nhtk9MSrcJ55OQHQ9LgKQNPDFz2lPtwtez7Qh8mcgPQINc7BqS87EdGirvIcc\nk4IqACwoMAjkonppwOPNhQ35otpjDLH00MiNJjUIbjAy6IDVHyDbV6hsw1pY\nqYU141+cM/7uagq/ePHx/kkAE0nx3Ycr2L/pbKOWlMPJX5pEHCk2JaX2t4OM\nIrUpRkG4xdR0uBBCElFK993RJamlr9v5s6bSM6TS0wZ1admcyqAHJUc6/qqm\nCg24vCKwqTH4mWgqdKqMGJEju88h85t9qW2k38qrkfeDYz3oDeSLnyzYHnrF\n2/r5GbIhiKu870PvoKSdMZ2YyR+Owrp7h98T/BdeMY7cP8oqVYa/n7c/614g\nGo/+\r\n=74RV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCexk/MT16tTyoz9BM7LlTM5co1wBRZQFtNzVfKAkpw7wIhAK1pPn5loUpa3bDk0N2P8cFSeascIC4XpXjsOD6bvDb2"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2234-beta_1527088501044_0.3178136493316681"},"_hasShrinkwrap":false},"4.8.2235":{"name":"meetup-web-components","version":"4.8.2235","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"406f47dd2fb45800452e5a0082dd35fc1f53a36f","_id":"meetup-web-components@4.8.2235","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-SJ0ns/MdjVvkXR36+UruPe2Tc9LPeeI0S8b+O5pKQZC7q+5VPrtjmPe0LeYYUrKooycAnoZIKgt7Em8xgWy2xw==","shasum":"f2fc0cd9dbb51f59265726a2a785ed79d9ccba0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2235.tgz","fileCount":504,"unpackedSize":6187975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBbbmCRA9TVsSAnZWagAA8gIP/2do/Qk0Ii44s7Qug+wy\nnfY1LFOXrzuTTCk1jBxJyqt1ap/UxvqlgVm8pq9FHRqChevA0wdI/nol2sCV\neAgtx1VFGO5lYZHP5cG7nz35SA5f74C3YQBdCuAjB/zXxy3V+L7C3LjrXYym\n9zpUVmUgkfm9/ZCgDErbdMAPEG5mu+tVGfnzUVTvHj9ob2xJxxQ6eHuUBfCH\njeRwLypZiLrQeqk6E/Vz0cs5upB/UD3E2VCwdyAe2AZ5AuJezjTNCP5VCpTb\n8L74GhANK9+Gb5Bhy54bs7LL6bR7X+o0rDUnwBarZt3LQbKu4qTFJpvbVgg5\nRbmxCXRHDEFe/HXYr1eHYRLiK8wJ+uIFvYOKXPzaYS+T8XZjuxQZgd46MW77\nhPyHquuKukNiSV3sV48RSxIizeUEceK4LglxG+0XxpmhOdljFuWhbByIjHhr\nrafQNKqdEI8+RzxcuibskO/ApavAwsjTVLBPhzzsKjioeD/0TxFCxA3J2eN5\nyb+XhKHfSdmuevm3Oh/pdHqIfCGihaD6nA3kbuApauMQ1tQXVpVczbopCx7i\nSreLnePca9gCgC3ZYjBGHO91EeJuLaSUDZHllgZVasasflLR1xPt16/AKtBH\nOXRHAxLzPvC3IlYhZLpJf5CSBwvy8EGSrRxFgUifCieb3xZThQWUo7u8Q45u\npWfl\r\n=KS9c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPHKU2aMXrecjmnTLsKEc4apL6I71F64bRhowoLVZnQAIhAJSfpY53duuDkibpO+naAGQaDhGe2Bj8PTFgxldZNYa2"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2235_1527101157792_0.6385665547139998"},"_hasShrinkwrap":false},"4.8.2236-beta":{"name":"meetup-web-components","version":"4.8.2236-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"90fae31e83dd9431070ae412a83be62427cb4716","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2236-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-d8o+g/ErlrOFMdYDVPqBLSI6TP75viH3x8pRQWqMzH1IzR3dcoxg9bNuAfa2aQoYf8EI992rlg2b32fIy9WG9w==","shasum":"af0f0de381b2b442b4c8c48ec4720626f5c68918","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2236-beta.tgz","fileCount":504,"unpackedSize":6158289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBcT9CRA9TVsSAnZWagAAixUP/046sldH3bK9JJaQG2QH\nRwraHsUbv1UuD6DgBZ2jmK6VEeSHuy2KSeM6WjisIrwxHonry6m8MhEsWdAE\n9WBQo07NHn9cxC2oeOEOHpj6EXJR8OxXA9potBecQJ96HzgEwXhnwJJ76tRo\nDwOkmZEsW6THsbko3IuLAFSMwmXYJeohUcQsRwz39rgDiYDzTRQmwsuyWAcu\nIurvpefjXx2FeMNZl5kwCgfjl3OrmFh/K5n/6ytUblAhN+HiqXtfB/uMbipq\nZht83zjmjRiWnIXTWM8lP58gjNehiJgDaXsoVZfQgIrQPh0jeEYdnsP6jOyN\nhylO4W6BQamiNLf6t2ubswYjuDaTto6gLmZxNY67LsilFvJef+x/Dkv4IivE\nB7g1AmMi+hzbbc1bliLN/5T6JlV6fwuG9XcYEGaQv41KRsUcjcp0U60gGMrT\nZxIw/GBwvGaA5VtU0Vv7Ge50gR1h6qUC1CPKjsELLB59wyrV6/wC6nUdTfM6\nlMlrOSs1cDgHv7ipVsKEaNPDYY6VW20AqgohnNJXZ+9gznH3BMGNr+z9TP2P\nSjxjzBnLB/jeq5ZPxoZvnJXuyH038q3Yk/1PPv0E/gTUPTiXrLtakdleMTY1\nwZ+Z7aFr5UKohdUXZycfWMQwoI9an3I06eY8rRY1NgYGT0YNK71HsntYDEAy\nkD4O\r\n=9CzQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqYztgoYBNxtSy145U/2cL80zfXbvq16wAcln89fMdHAiEAxgjZeN6dL+pkmPmLCKT3Vwij25yQk/T5gvfbjvAsZqI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2236-beta_1527104765232_0.9774562005089287"},"_hasShrinkwrap":false},"4.8.2237":{"name":"meetup-web-components","version":"4.8.2237","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"893a80a38f8ed970cabcb4976b170a4ada2737f8","_id":"meetup-web-components@4.8.2237","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-MGnfDEJHTckMDXFmdo/prV718V2Pjb9jThAI7mf0XS8qMNTm2IQ10oLQUV82h3Lbc2yMcufQrkQDkSD24qhG0g==","shasum":"759ca3e4d645960ccc5c63c4069184791ff8610d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2237.tgz","fileCount":504,"unpackedSize":6158284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBcZiCRA9TVsSAnZWagAAxiUP/RuxEE8Qi6gebfxTrCmt\nimku8RMQ3POmr2d71qjNcdWRPX8+Mk1GV26RAjaBu1ClLZiLUfCg/o2dwvWQ\nWcqUAiAJ51qD6E3jNbR76iSDpCGt09qAvT02+sOzZHAR8jhk+mVaq903cuhK\nAndEQP9NYwGYNQyaDf597FlYSqov0DsNggacf8+pgkF4zRbuzlaBa+RbMavx\nVf+cTbadI30NlHTUQ2hLC0unJnrTearbbvj/Uy6aovJqXObuK+iOCle0k8F+\nGQOy8i9KQChka+WrPBDeERwPA1efD5oOGICyX2pFC3N74ojN0iuU2U6TFKma\nyfLYOO939hYMBbNB492UQTiRu7LChLSwWUyGMlsGAQAjhZeNmUHE30CtCCr0\nYkn5z+qit+Mrqk3u7o8DMdsjFciFoDkj1UKTWUsE7wI0AMJ93u6wLfMWkjot\nRM50zwmvnoZyWtwPbF8yuRjDOnahTtJo5KsxP5RLFqg7ru9tW4s62gPcCE/a\njvoLWhRuxlMm1ME9rQPOk4OAvHIuESTTh4tnM8nU9+uLMaszgOJjBmdifC/z\n00FPXExdpOipxzj9uFzR12pM5SNAd+9dXlV/C5z7kzZCcoU5qaBUQWoi8wc7\nABKpYxRdlzzZ1iB70vPoFyfNecR1ylu/dfo1f4dvQ+BokoRFwgMDPtr17I9c\nE1qX\r\n=PILI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoxTXwsAscn1TBCgyBm1NyB2M9ymveYVwcuD4X8oLggwIgVOJnDRk8JdLOk5v/6/SbZRADw5KXLiIsCTg09qkob7Q="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2237_1527105122121_0.3334509550728155"},"_hasShrinkwrap":false},"4.8.2238-beta":{"name":"meetup-web-components","version":"4.8.2238-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e4ffed872f8c7d236d7eb3a11f627c1e0c5c4a99","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@4.8.2238-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Z6C+ig1mpciEIHt5qsGSX7/c6htkpaKPjcrG1UXAz/bGIW0KhGhfmMbE4AulEMjV2XEOZzvnJkQJ8Kw6vIs/Fw==","shasum":"c3f501e4216d383fbb8a27024881df103768b6e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.8.2238-beta.tgz","fileCount":504,"unpackedSize":6158494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBeSoCRA9TVsSAnZWagAAhv8P/0PFlxXiOMFgQHL79qXf\nauknE5NBZa1FNWQydJGVygGqX2UJeK/wtIlaQuZu/wl97kWkDyLkCDmmMtSL\ns9TRtt8xLs6GYCEfqhlQtdU8A3E+lsEPnerp5aV/RGZHD05VCeHD2CZ+7U0B\nrPN+OyvMPVW1Q/Jt1OKr0uKYq+xesOpjlUIOWUNrjVCVGL8t3xzjWVaX+ad5\ngqY5XJiM6D5jgQL2uwCmiGegilTBwQULzU2XzWs8W1+vXii9sqSeHOwdV9yr\nncYHyB0afdRnAHZuCZwOcSUJyJ9orZLts/iMEbqk0VNbhU+J4nQm+Dvptxr7\n+q8xLOkXFccSZpK8xwcIZU5fLwln0pwrPvVMPvYkHxLLyZs5msTyPtU2KFWf\npo0vTS7v7zjcWkxDoJhhNApbrYSgMnVxZe0wg3REeAAo9/TG8xfn15lpKmSB\nfvt1UDOZG58BijQsDp+32INtO0NhyMVyvbhB+kB4M3jFWXZYU5Xz4D3i0jzq\nCT8ckzUdPrt7l2Agfz+gxKLDiyWghLXf8ntv6TGgVLRJYiefElGc52zsWVR8\n+XILwZeJkDf2broC+1bQODJKEk1eDm6kLMhIsvwmp29LWtZpZAalIosHkJZS\nPOcLIQVfcxcnHHqb3G5LPPMFt4bUG9N9PFnqPZTnCd8cwaDgQ5FIFGDtpQXG\nAx9N\r\n=gXNA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa0mG3WZ7x7EWNHbIy9I5BFoy+mCM3sVqljYS3HVDdjgIhANHmzIsewfPntJdzPcdUtmNBgVUD9dgN/j9ZXAmGXTgx"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.8.2238-beta_1527112872556_0.8990617034643043"},"_hasShrinkwrap":false},"5.0.2239-beta":{"name":"meetup-web-components","version":"5.0.2239-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"44e70c61366dfaf683d82dd2cd3926fcca1fa53d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2239-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EDss6etKBAo3lUSUQysnDLgKCOXMIMR2MLNDe87ATZk5sSenSgJ85dXhsnrWgXs8wruXIAfrYxJZOtP/uDrkeg==","shasum":"78441cd5224da99f8654a05077449254d84c9d4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2239-beta.tgz","fileCount":504,"unpackedSize":6158577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBeoMCRA9TVsSAnZWagAAlX8P/1pMBAeU1P2z0i+PgC1p\n+4+JUGrLkJgnsMPw8A+cHAEn0joO0fMkoHCipjTJ9II3rf4tAyxDu4g88YlX\nXZPDwcp00fPiXSqaGb+raCtpQa6YtQQrJFfOnGPfFFjh+1tFqvys+Wuy0Rdj\nM+WSQW6lUA2/RiP80ILU5f0ZXKsHAtD/NKnwtwQtZFU+PMmdvOl3ktf5hmpN\nFae4TfQvNBtvI40vHC0f6GUh5IRI5kNWRfJwFzw2B0J53HP5Gn5gv4wqRENf\nJBEn0CSRf1mE5ocRNDJQEGQKuO25rJnsZ77fU62MYcqR6B7hxIiUeAhtMpVj\nFGB1Xt2hFpCnlanIYt4kMMxDOjpTg3r63jSmk1yB5izzn2QIp9R2n/1u9/MG\nnbrj4MC0zm3EktSHSBlaG1JUQdP4OpUeceeu0L09p60D3N06kmTZSRf0lV4U\nvyezgcb+gwMYFbpMsRiXhAHhnSSBGvJGknrDkKgyyAYJVLuZPVDlTWBLPKlQ\nfqpB0yDYZpAZMX7srWYVVuPd45XqiFVJbxNbRfUMLuyYg4Qdhtq4hNCOQcIf\nRJ6x4+W5k6AU+JT8PVFI6lXe/7BUqkmC15HI3bai8XW8sbH1fajzUAJmmNxC\nHtkcTFjvBfuab52wJ5C9oeI0MMcfTojppdCh8OvMVVrLfW4XkXYArNf72qMv\nJhyw\r\n=lovS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEAbjrSnfYW9udxI+XK7a8ciWw08xPJFemYwvguHkotXAiEA9gFMp8z3SDHSzsVXCnN3C8pZNBgCGNTteO/PLZobsVQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2239-beta_1527114252221_0.7055368981305812"},"_hasShrinkwrap":false},"5.0.2240-beta":{"name":"meetup-web-components","version":"5.0.2240-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"bc659fcd7979e37f2fcc7862debf4093a5fed971","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](#release-notes)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n\n## Release notes\n\n### `v4.8.X`\n- Updated `redux-form` wrappers to prevent `error` prop from being passed to wrapped component unless the form field has been touched or form submit has failed.\n\n### `v4.7.X`\n- Updated `TogglePill` styles per the design team's specifications. These updates will partially break in `mup-web` if the original style overrides are not removed\n\n### `v4.5.X`\n- Replaced `flatpickr` in `CalendarComponent` with `react-flatpickr`\n\n### `v4.4.X`\nForm errors update\n- removed error elements and logic from base form components\n- form components are now wrapped by the new `withErrorList` HOC to handle error rendering\n\n### `v4.3.X`\n- Upgraded to a version of `swarm-sasstools` where we replace responsive sizing/spacing mixins with CSS custom properties\n- Removed the `responsiveVarContext` mixin. Usage must be replaced with the `customPropertyValue( <property>, var(--responsiveSpace), $space)` mixin.\n\t- [Example usage of customPropertyValue](https://github.com/meetup/meetup-web-components/blob/master/assets/scss/components/_inlineblockList.scss#L49)\n\t- [customPropertyValue documentation](https://meetup.github.io/swarm-sasstools/sassdoc/index.html#mixin-customPropertyValue)\n\n### `v1.1.X`\nIcons update\n- Updated `swarm-icons` to `1.0.0`\n- Updated `Icon` component to support rendering of separate SVG symbols for `xs` sizes\n- Added `_icon.scss` component sass partial\n\t- allows `meetup-web-components` to provide icon styling to consumer apps\n\t- changes default icon color to `secondary` from `inherit`\n- Removes unused and confusing `auto` prop from `Icon`\n- Fixed issue where `Icon` would not accept the `xxl` media size\n\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2240-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-y3fqAPvep8bQnxB2piisD2ngdSyxeOmlXPvbv8Wk4qgzm8fFxgFZjiWQXawzZgkonYXebyxjz2yeyPzx1u8eCg==","shasum":"db74e07b31c8c4a7ed12cb5c1e171ea56b500b69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2240-beta.tgz","fileCount":504,"unpackedSize":6158610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBeuoCRA9TVsSAnZWagAAR7MP/2d3Emlzma69qb5/ht65\nUrKylgwSBLEMR8c6FjojKT1RKxZ+5XPx7ObI0U5EUoaQeS+k1qNF4+zMqb1G\nxezX2OBwLl6kgRQcojqejr1pRyeCgHhu+eCgk1bS/jc2oHw0m1jny1pnUNj9\nr6NHNHc6H6HNw7wl11ikoWlkcncvmSyShfnVbPziR367fj0tdHQGK9eXRUir\nmQhKTRXVpTp+3C55WgJiLVlEJM3F1uFe//rRpWAzn3TldEjgSs+OSL+6lah/\n4zqoncBMvVUmW/jAVCvLqjr+zEhZneMLE98r699DXvDCY/qAOcQEsVRI3b9C\nqHRO4Nh+46put3Vo+nY5xo2gVqi+2mkyv0gi7TbqPcyDEfEY7YI1uxcZ1H3q\nLAtvTjsfOxjzJ+W1YXkypd52zvIWRVRdCSXeZe9CJivQQLeVxmZLpxVZsXs9\n/71jXkH74CwuaeVuaHVupZnWA3nOxciOrzwnai3gJtfCzX4z69QBGbjObjh2\nyBwKuYlqkVxb43KUqiQwLRSOj3kYWMZJk0GNQ7VrlY+YHdhL6wQL89YsFk8s\njTx289TtXrLX5SMVMlBKQ3nbo9L5RdECXeGDuJHhnFdnhi6DnTbyw4uPwOPV\nA90rMiP9gj5Y3/OSsh02m+YY1+ReXZA+V7ADc5zS4mnC2nhOcZ+Kt4Qi/Oap\nDQ5s\r\n=CYB9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG+Ovwu4Q3l8iu44/bztKtXyNSiyvsEVWC62RVhD9pxXAiEA90fJILpjmes0RU3inJQIQSh1Sw2RNf4EK6jBQqY6Sg4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2240-beta_1527114664462_0.7912399180775564"},"_hasShrinkwrap":false},"5.0.2241":{"name":"meetup-web-components","version":"5.0.2241","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"72e7892ec5358291b9b31f49a6067e5b52c6925d","_id":"meetup-web-components@5.0.2241","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fFC8m0eFWeccJoHfxhh1CCQPXzQLXxvyRtBf10X/CLhRpX3RqiDv2uuhsBy9GBYBb6Kl7pesZy06lHO05y0cKQ==","shasum":"823676cb543ac3cca51f9bd4621c4be1578aab3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2241.tgz","fileCount":504,"unpackedSize":6158605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBe5SCRA9TVsSAnZWagAAQJoP/3y7boyatkn08vihML7I\n4k/TEQ9fvsPYHZdT4X9HZ9ecXixC1yVfW11sXHJkxgjVd3Gc7RpI+m3jzsbz\n4IrteZjZFZw3dFILiDOawvUn0/Nssm35wpn/Sxn/ASefWgEaXl/C9WkDOqle\nULXyuZBPLV08l7h/tfeJ2HtCjbgxc2KXLPA7W8vVnQ5fn5xLlL3q1Yzey28E\n9YkGV+0tTylWubih+6mLcFzlU438qBwWBgphDkGEkQ6pQrWtrxaSU8qEZdt9\nnZ5pNyElgmu5TMUvjAFkRX0VqIZsUUHOPQA7VKnojqnwLGhA6ojuTb35C1T6\nJznmv8MJr/apHwT7O1O2apMlljOziXRtj4HkNANSRxob/JNhahrbHM8CiPFr\naKia3/2RzrabB8ZKJiLft7W7sjSH0b1EKB4gyEHjWb8Uc5zqAJ84eZzaEGoP\nBP8Aumlkq0CXtK+b1ZgueIConinxCpBjIVRMRaK2RagAZ+1KvjkeYPJNVG/x\nUC9asPdfBlSQM9KTb+UOrzPviyfTHBWJjfCLBTanEoteEFHEDQZUM7dsEr6q\n6sEQI0JOwf02gI+5lcIi3ipPPzuPYipRr/2+UFpEuZntmAMyjRRGOUiWFjTM\nI2EEqGjBvbmr+kz0b9jrg7W5eSpKCDrLnEv8q8HvF9Tg1pNb/fCfBqm5xHlk\nkbZM\r\n=iDz0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8jFNDERIiT8jixpAmHwYX1uo8D8bxEGyhgVT0vgdFEAiBrXzKmFSeLDM4NLvilyEY6seOuP/VkEF+HOH2hLbdG5Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2241_1527115345541_0.8968743648087634"},"_hasShrinkwrap":false},"4.9.2242":{"name":"meetup-web-components","version":"4.9.2242","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"07daa0329da8879e95e1fed7fdbe0f7165305c13","_id":"meetup-web-components@4.9.2242","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-l3hm18jF+DMwvhrKU9ld2W0EO0/atDRBT/FtPh4gJhqL2m1udXEmaU8WILYYStqW311JI0Haebm9UBv2DPRv9w==","shasum":"2d3d6ceafcb55751c963a9584f80c8bc613e42ba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2242.tgz","fileCount":504,"unpackedSize":6158605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBfmiCRA9TVsSAnZWagAAMlMP/0YwwI5tJWtS1uLF5Esr\nUULGav4gFSp8dEVYk6T79xiU9AAh2kGgqKD5adNgiehEWSbmVVlrCnIdgf8I\njChsWqLfJPpJNRlgqEV86tx9EjOB3fTdAsqNTHEKajQrvB61zOkXW9ouGTCy\npB2TiGr6VI/0GXGgOE49UtW0WL6jvcvCvuD16i5OKS3rk01S5iaxB/yQSN4C\nvobEU5P3MRPTsEYFyNwPdMgp7cF3ZXn70Vb0IYi1iV5mfvKS8zgTVTH293Xh\npksjP2Ovevx+ifeQ6x1AMZPBVEkU4OtJilf2/eNzAcEM1zru/A03kiRscob0\nLe15GiCn6yqqmSU5w16QdOMiQy3e2FvDAcnY3ltW8njHKoM2qkwqeDB1qIXD\nnn6su6HouZsJBjr76x1JUYRhkw/Ld3QKrDuUCVMK+EVBRMZqOC4HLYWFW6sA\nSRrqGQK2mU+DcRy+tMvYulfY2Rp+hMvi+tpOiii+eZ2SC4QVJ8tGRSqAwXbm\n6v17rHrZtZ/DdcGGbun7q6rl0VG5XX94+lQnCr57q7ovHE4xajOJVCkD42h0\n9VvkIRIVWJadaguBvx8eenwZ6WQ01cwCwvsJuWYa2ip0hWFFthafywZjsgAC\nzqbZcrFEhxYwtj6Gvm9N6m7TygWuHFdCt5sqfanLRaKs2mBYNMACNpIei5iR\naL4z\r\n=4aey\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1Na7N1l6iXO6sJqmuVyQ5UICU+HYiQsvQaDQQ0F0hYAIhAPxQ3hXJo4kxda/Blm+UCqx4NGEyDyjbr6CXM74PZSeF"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2242_1527118242522_0.20981044451763387"},"_hasShrinkwrap":false},"4.9.2243":{"name":"meetup-web-components","version":"4.9.2243","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"24f5bc172d76a7a651d9b16f21c016f462991a33","_id":"meetup-web-components@4.9.2243","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0qfyp110zwOkp+sUoLn+sg/DgzZgTpLvbpLxMbL+eF4c4SEPp5lDIYNsMHNCevn8CJ6LgKyJvSUUJoXbmSGOYg==","shasum":"56484baabfa6271df8000c6c631004114cc81d71","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2243.tgz","fileCount":504,"unpackedSize":6158040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBuMRCRA9TVsSAnZWagAA8fgP/jaYsFXYPDsgqPVIPtzP\nQ1W5IJArzXyGX19TxtS7pXqTIOpZ4FdcI+1AeUmi4J+rFtztFwM+8751gHPt\nL9bJUrLeneIWmKLDrJwOFB571jzQ1ASeJUfAeKq/DthWuiNgrvlcfRjoMDUL\nzOLXJu13S3S0NkJ8MZssz72GOxxmFLlCrlLSwGi0etYO2BUse1GK4FiUgjdI\nk65ZxXziRVbuaS8hqAK1ijK1FmJRCHXVh1NUQzOm3tVIcUslyfOnC9IVmjCt\nkLetDc2tIP676pJ8elVi4BCmVsdQD9IzZfeE4Q6pUTbtK9FhfhB9kWr31M60\nXYXa2B3mABiV7AOArw5DmYmDyx1V1eB3SlMzSo3C1JOFfC7VPMVXMJYfKMEH\nWbEZHx4UPo/hHOvX58A5yQTSPQbdV37K4E7+79FjP56kGKf/LZrDfDB9BQsa\nI6xuKHPl8QbdrltYc5WpelUB0yMtMfiJZkOmyyozigYd7t7nfHobxEXf3N7i\nvlgdVXvO/lLlGGwa6ndMHyt0W27SEyrUXZ1uie1OKrYZfM/QSQKAI6+xjk5v\nvo8h9T2aZ7Vxt0Avj6d/lceC7NMK8a7BAzx9FhggdNL0JutPJMYZ2FMt//Dh\ng7m0rxKIQqmKNnNFoonc+2ZOGL1wXaPC0epxvA3G8WuQRjkIJ9X4j2EtJ8Gz\nq0eh\r\n=XXN8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDzAy2MlQkUBxjUfD/2vvgvVcfLhl4d295d0tKzQyOlmAiEAonriHtFP2Z/9nAm7KjEAqNHrQ3eAeoHNhAbYT2SbO5s="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2243_1527178000851_0.6713380824555808"},"_hasShrinkwrap":false},"4.9.2245":{"name":"meetup-web-components","version":"4.9.2245","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8ca30ae817e5d4482b8eeb85f395b658beb1f3d5","_id":"meetup-web-components@4.9.2245","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-KzUPIk+3xe6Jcp1CW5CctNlPVMTeozKYXF6jR3fn1aBM3IfaO9Zii31VzCFYYuemUcgOKiOFisuRP2F9uxNx5w==","shasum":"3e33e1aaea4e3b80ff2360c1bb94238ef7eabd37","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2245.tgz","fileCount":504,"unpackedSize":6158077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBuR1CRA9TVsSAnZWagAA8ooQAIhwxcjiHWsVX1n1tcMw\nek+gOCj6cqzRjoR9xMgRV6C1K2GD3I9wHXfOWEhACBgCBuBmm2W6SYiJDJQO\n7ON6IKSnhblFk2z8cIFIr5YJFE2PMVNOl2qOWZLon9hD4s1FHXDNP+p1D0H8\nTl6XoiTIMgPTIXYUz6u+wejOW5Z+AGIAbqGuwNLsAb3kl214cRLFYwpIe2o6\nCYlsqT4q2bqFWl7fBg9wTWZ+a+AOGRztjnOQXJ/PZjEgwA6TeJ6rUah9WfVi\ngKhJiR+Ystf+1E30xUG1/NHO8HLkBpD6NonC1kc728xCXrGAGlEC8MrJNz5z\nrzOeQIVmSzM60DBznqn1BqZESCqMxmhmLmRJZZF5Ti5wkFYIg236i9ss/zXG\nL4JKqoTNS6n6f0uVQBPAEQv86ADzv1fpocMuyyvt5zPPWBEVRdGnE2vD88y0\ndwVjZO7bpl9JFLcQfoFFhiFd0sfRrx5YCz8OfzWEYJrbgmDXPJeihSW6T2JV\n2w+nz6KiK5XNkvRG5HeLPeWeXAGgF1EDx8TGZUvGDCo4ZMNyacxx0eIARbg5\nR6L9siY4Ia1FWLFU/ymcAC7VYJeRnij8sjK6WSEg5dxCan5Jk6r+KCqiGXL8\ng3OVCDmP5W4vuaE7rWheerjfTr5fJvEe85URuWev+9UNSnPu2B5RW92kkAdE\nnMZD\r\n=Ciwc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAoESLYQUgWCQPWuXcdC+R0VPrwScnLz6GY+A5pF+6S3AiEA5QMS12stmpxSNIYfBMwhctZv8HVaFfsK3o1SwHeA9Kw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2245_1527178356084_0.7147628016894356"},"_hasShrinkwrap":false},"4.9.2244":{"name":"meetup-web-components","version":"4.9.2244","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"2a78e78659a58b862d55a310ec944ab3c2f8d6ca","_id":"meetup-web-components@4.9.2244","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-w+k08GZSsTw8kh2UYjhGrkkewQDB1eN3TxQvH/h052MnA9qQuCJoiBlcCqVgSWSoT1o0voDOkUAACIthk8hFoA==","shasum":"581df4e5b658c7e0fd747588ba2a182f70559ede","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2244.tgz","fileCount":504,"unpackedSize":6158086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBuSKCRA9TVsSAnZWagAA0wEP/ja2ijFDstsmgtJw3kYs\nXLpWC6EKXekzUagjxrFq0pofNm6LDeSgCm1IrK1EKTG/sbnRW0c6fiFqDPBf\nzIrj5SJgXYRP8hEfAAll5zPVBehmbVesZkbzmafujmBLLDOyrRF1a3noxhKV\n8yJrymw2hiYLNWFU5w7TV018bVsgcX6yFuIuFmRssnhYDetKwXvvuVTqW2PD\nVczc3XopMsCiVFXLjQJWd1/clhd7DY0eLLpGzStUa/OmRqiIcFEqVE7gfd4e\nEuGiLtBJcljG7bHCL9toiI2V0f+O2d0vPF12R/032kb6ReK2n9MHF5e81iIJ\nUpsvGJT2lrkEpvm0s1MXravZR/XyDTfz1oA7nle0fWn//0bRu3eRlNKgnyzn\nlXk9sgdhlr/aVWhnkVVX/ut8+mGEdDAK3J75Mi0DF+U8NNypsBsNwah17bVw\nZApLsUf9h1pcjS9Ui0erjiG6MJW0l3kXPFtJxdhhhmOiPA0mALx53Bt+7+Vf\nKgP6mINyFrDOAY1/bYu98CRtcl3eH4grr83sUxMmRbVCRjtDCJP3D6yxv5z8\n/LK+T88UC4g1NrtCUx1TdSNjZPHPyMcpGxLJ1jgw9jEI5L2HxbGn43U/RFjT\ngRERtHmPdsUVlTBVLfWHvS9FcepFlZLftRjMyVbDfNvVrIxwiIYavK2jnlvH\n2PZ+\r\n=6vS/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM+iwiuDzHO+WxFaku2xKfkg2R/7HliI0jBpvOHeQXDwIhAKTw5UBgRbR1vIrSzg18i1nKxPj39rz6M/itbFKjfJyE"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2244_1527178378010_0.8592155893394757"},"_hasShrinkwrap":false},"4.9.2247-beta":{"name":"meetup-web-components","version":"4.9.2247-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"53289389cef1b553b64a432d073ef5bf67408f4f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2247-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VFAuh4WeZ0MRiYhSwYC2xvss2v8/R1uDNB+gTx5uWB+Gx2mMpO88FC/tp1tcozuXaUOATnC0RCJyZ0pJjL3hYQ==","shasum":"a4506388672950133d07c746313bed00fe9dd0ed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2247-beta.tgz","fileCount":511,"unpackedSize":6169527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBwzyCRA9TVsSAnZWagAA2BQP/jWv58kZMWrdb8YZyUh0\ndxb8X/OG9uJCEaGO73P6CkKsWXjOvnqUfNbo0TGtrXum7CZLKq9KpGvanvgb\nUEINHrrdtGda3Kiqb0cDyUn16IJFSxxTVyfUyjUJVXRx6jVUBFLrImBQoqAz\nhGiqD0Owfy0aSs/8Q+FGrd3/RMbSuE4D9SZmN5S/SOe9EDmS6j8/QL2043rG\nNQysK7I+bY+WCdy1UXVPG3S0tZjo/DZe606e0Cy5HUp65JdPvcK0f1JQDzi/\nR92I83TEC7oGauBDCRiKlr9wZVlQwZ+PhEXIEDIpCevAzJNUGq56uXkxLc7O\nlEfkvcu3PcPid4F1GaDDM00H4okovYlTaUScVX8vnLZEM4I3XpqPgzd0fFFe\nLsbTLG1apnRH3641Rnah2R3S45ZH2CKlV2aPwZNzTPg85mYO7IKhbzMZljEi\n80sLVp8n257t0oL0XBhiMOIq/0dm5MwyixfJNaUhz96/InLO/mbnxE4Yewk3\n4HyoS6h222XDZC3phm/KEUrMiBpyDuXQ7QnYcyn1o/sURZTcOPkTWBByyOQ0\nYabDzVokuQjOOg9bD872ec7xOu6JIV7JCilhWzwKQnLE5Ip+mfZRL68liOtW\nWfC5iZtbf1nreqoUPPEwxuNfseH0rgt1Oc82iWzJCUCpXKJlS/gSJ3LPys5x\nT9SG\r\n=FF5H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9NJGthC3ubkspWCTJ4to4WebHQlGvJ3orm446cDuK8AiEA0Ki7Q5koJ7WCjX4l5fE2R/ZQGVLzA4jrlEuFji1rRhc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2247-beta_1527188722053_0.7144076350280895"},"_hasShrinkwrap":false},"4.9.2248-beta":{"name":"meetup-web-components","version":"4.9.2248-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7a610d1162ffaf1143d0393d46820cb4e9c9ba5e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2248-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XygOucPL1+J99Cik+a5ckJHkB2vYlWR13sKb0BEUARJy5x3rREbYlBq304utEVT026ubKeV6OVrsoBXa4vF2KQ==","shasum":"eda241cd60578778b9ad494db64cf14a654727b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2248-beta.tgz","fileCount":504,"unpackedSize":6158237,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBxnTCRA9TVsSAnZWagAAxNcP/1/ewObI6AC9PpZvKO7i\npVfDqovtJDYpzp029cTLWuaTY4S05hJ2F8q5PjOYg3YaG5+ZH9IDpLpXda7P\nt7somb9oSv9yVk907Acbyf4I3Dw9qoCd6TGKuZ9sv6VgG6uip2y1hcjMtzIA\n5o3wfs8jOA3oprbLiKUyYMqGrqWPQN3wK0b4A+NkR68phUegj4kB8DSk5Xtp\nSOGWeCtnder686rkTBTqjOK49hoT05TDUc+5XAZhUlGB/L2c/r3+UroF4dP8\n1G9gjukmasBWQJBdL25GuGG45dwMY3gDlQJ39cRoxWou6vFZVwYvSbpLALOL\nI7m17U8VkAcRLgUkoeI7PqZcCdKjaWaWz3ach0e2k880jTlYEkg9lunBmTxg\ni3vExAR6tk1ZhCIUyYmxMtmINRPHTEX+NUy71xCIhZI9vLVDbGOS4R9wNP7A\nQbhNqMjvaC1ip8NNX7eKJhWiYlKuvtQOz65u+U614V5ztXisIJpQSDiV5qV1\nKXLWtDYgOjljE/6f52wRdjDIxf2KYWMyS6kBBFygS5ZmqCiRhKTgUt/qHOdt\n4jAZyD2FusKy+JzACSaQV/j5MUzrMj8wzPBd6rvLDm3U10gUA+RzFoflSKz+\nQzrrUK33Y2+Zq6X4T/MhlgPQvvxUAyfXPJzmrZSk5fN3GbdmCwmxdLCPwa/e\nL+KI\r\n=d9c5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbh5o6q8QvrfloZKH7phb7u1BmIfe9FOJeuOhloiyx7QIhALBb8g7hzrSCkrJBEjTxhreBWZ9Phjd8ZJ/Gk8KSZinr"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2248-beta_1527192018824_0.9479881057872093"},"_hasShrinkwrap":false},"4.9.2249-beta":{"name":"meetup-web-components","version":"4.9.2249-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"366d564b8b6609ad7614429f942c0308ef936cb8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2249-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CxAWm/y5EMsu4EoB3Aafe+yDgmpKdAHYdBZLyhMoJf0uQY2fMVin6153jZaLRSHrccRFA90w7SJgoCVa2o8kqw==","shasum":"8dc82756cca280f3f566aa3838272931c268d2e4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2249-beta.tgz","fileCount":511,"unpackedSize":6169495,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBx8GCRA9TVsSAnZWagAA/pgP/0uDArQ6c9i5dafflZ9l\nZJLyREs0cNcbLeRUoI3Dv/8g+c/wUmrN8OHhetzdlI2LaqG71BhqEKZClYS+\nVF55aLBknZiO2cxvqGvPTRxtm1kxQEkWyspWQ/NUNc10Nuc9chbeoGdKbXrI\nPY2OR14h1Zxq35j+ObZegPZgCpQT4+vz/KB8IlOF/Uo3/s6eBJ0f4Lbn6s7B\n2ybEuujvcMGucxNpe8YMTyNoRtH19DIaBMnWa6XVlcZ7sdo5rqsq2RN8Jxye\nnPD50XLrcHyD5ooOu/ENknqncFOoBDR5mNrJ3SkxLgfWiY7oCn8nSjZBzCZh\n877ktEEks/t81aQF7XB/JPszO/TYIPk7Hzd9yt0o2GrLIWEJUGKHh7H3Wul4\nO92i6xoUPOlzh5ewy7jKxmf+XNZypbOezvTemC1vnBOWa+UY7oMNMGD9fTG0\n/y/mEpCe0Ew4bDnHYqkhvpt4oe/HUNeq4PpaVAgGLBgzS00VyUEU/ye9FuM+\nkvn0ct0j6BSZYlYEG7aEjIrXsDgrEHAGRTcWmTe1jFX6RiB+3tOdPqM3E0Jd\nMZLqqsMgehLWgzJK8Ps67nzxl3wKvau9fvaoMBwuA+N99bchhmaSV/MwTDdi\nEouBYrsUkcHVO2M4B/RDMoSyT3xWS82wYHYeqGRxoQlju58+DS9+HxktCycL\nb6eZ\r\n=eOq/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEs720kH+5hs2qVa9AIiJ6XtRuJDWONGzX7li2vdKvZGAiAL+/aU3SMZBNgw/V6oRjaKZQUtHFBqvx+LDGdTVyq0Ew=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2249-beta_1527193349928_0.7665448899494978"},"_hasShrinkwrap":false},"4.9.2250-beta":{"name":"meetup-web-components","version":"4.9.2250-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"1252caf9171fb9c492792b08c93b66692840ffde","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2250-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mBDutHE/tdi5KdBFG7gUZ6leyEx51rHiERujXZGleROep6md9sEqwwtcGMUbPvTyk+6Lgxvmp75v1dhuCS/PdA==","shasum":"87be50843f5108a2aef6681a7c38a89169832936","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2250-beta.tgz","fileCount":504,"unpackedSize":6160350,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCB+CCRA9TVsSAnZWagAAx/cP+QFUNjdBJJ0+H0ZBw9r6\na5o16IELrrXYifIRNtxYgEeTIbY11XGIFVKqZGrbPgcyUWp3oqy3SKNws6r3\n64sX+gwc08SG+2kcWrtXXbXxwnXflzJ7Ixzk/PcT3/Fy6/hZC6Y4NqLOx3Qd\n53YAgh8ZrJlTRKNmnnDqsLLNR+npkE7jH8unLIBz0ff9gNNEIpqvqwz+x15P\nHPKrWOmn1wmjFMmSyqpDhhS09n6tITqciRNU5Lh6OGoWY302J/K8kjWZt/F5\n6Py7IVG6JnM78snFRJ4nXo+/CMLWYPBHqz49x/ZT2USj7IGdH4dvIJizEr+K\n02DjOQ7bSgGvq86QhWxGsw7llyGf+6oXoTmWZhr9APHf07crsHlQ4rv3BYMj\ncUz8YFV14B2E7A1XiW1D2iLgbhTXrzY+iWj4iOFZ1hqWH/ZajOpnR3OHA4Ry\nct3zWeX4KB85EWQ7I7zWgIRqZ1Zigl5xuNBFjv9/YZr15FRANM7iLZ6fKirU\n9UVWlFbiuoYnHbo3ukeV3YvK5HGxL38YW/KkUcOgOT2gCPHD5+cmkP9ydI51\nR4XiLhhhUO4UJtloqJvxnlx1DXRv4GJM5P/09YOr+fAEYgDTVdIIppxRY4e4\nSEfzjeTvyEauloca8i5dxMm6o6uf2EmyDrmvn3qQ51TzbBRafpuiIoY4iE2h\nGmUj\r\n=3UcW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAi7gLvFFFzTZO3xY8W6qeVTOGjsO1xK/0Yl+T1X1yWgIgVgjKmk2u+fziD8QWGsSxC2orzm4Q0hgSsuF+aU+mnFU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2250-beta_1527259010038_0.9039012768488055"},"_hasShrinkwrap":false},"4.9.2251-beta":{"name":"meetup-web-components","version":"4.9.2251-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"06487120e5943954edda78c3f563c85a665b1de2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2251-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4B/ww4J1NaxUJlGvT/zEbZ0XBxxah2RCSYIqwON2SC1ZdLY2LIuQG+KO4ygILRiGhv7P2AZZwj7cFofzv8vBDg==","shasum":"05ab76719f22cffb65d097ff15fc2bba9f72289e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2251-beta.tgz","fileCount":504,"unpackedSize":6160818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCCQTCRA9TVsSAnZWagAAiigQAIYWqti1aByvwUe6Y32+\naXT1GZYi7S/Lk5pSHvutY/wVHd1skHLZ5rLCBteBTKrIN1bScaVkyWRyJvZV\nC6jEs3VeHKGMSjuRVYbkEUUE92mCNu7/t1d49gfQIVvQFb1YzeRXGXBn6vrX\nvBmFIEKsXhTd784YCLTHYlGDRZ6qpiN4cD6dFFD1zQGwzQSZvgYx1WEkoaLI\ndrAO/oPdwTNJed2kUfC5E4XA08jAbi0z5ubG6wjyW22eSGJq4rjUZ/cQdt+w\ngHXHS9IYKXFeIk/0gxOVwiIhqZzbv2QowTrA3sJQHb19jb0OecvZB/unWlHU\nHpfvYt9/DDOV4Y+6mCF3GpUo1IibvIDBlekyLbbh20OeJw/FUySe9wMO0h3Z\n25emK1sAfBgQZes9dBgJdIPzzKST1Dyrkoau5yy94aM1QJCeBjdEyoVIyK3c\ne8FbtK1Y6m7cQnabdK49IYknlA+q8DXRxCnIv777hnRl4M4Hzcm5+ZGq9/Jk\nD2MX88/Igiz4HbiJ+PzWGNk33RPklVSNZFQ/GWAzAesDAnAPxn0aP6Rsy1No\n6lwomOf6MVb3i/PsjdZ5RWjY0zT+gHAMND7h+Au3dRn5E+hYeEE/GXLHT8Nt\ndxRM0KCBPqcFK4gFKTeAJYXNBTwAepY1gtMaUtMMeVzGwUfPeOXHtKhlldfG\nQVL/\r\n=tI0T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNf7RPcPWzKOVn7Fl51W5O5BBwRGXPjajpJ8N+pF65NAiAfPLgBOtxv8PJdt7dnJCLG03DTG/y9bSMM9BgWLJ/OtQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2251-beta_1527260178596_0.5977234249222168"},"_hasShrinkwrap":false},"4.9.2252":{"name":"meetup-web-components","version":"4.9.2252","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f5e454e82cee4029bc569a0f15b5bda448281339","_id":"meetup-web-components@4.9.2252","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Fu7v2avz4hYr55agDXK0cIQXplpbHmkNxl0OghioPGCPhoNAFBaDf+vHQlVWuNny1zgsEFZiF04Y1djf7AqITg==","shasum":"b4b5127d1460199f3d30dce3951dcfc23641a90c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2252.tgz","fileCount":504,"unpackedSize":6160813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCCbUCRA9TVsSAnZWagAAS4sP/0IX+S7G9fmJ4RrIHDzT\nbghEjOW4/kZvCZ0VhCm+iEiaJoMN6QoZGRBi+sHFhhsSXR7Y8/rGpVdCgkhr\nxA4Jj0NSVk+mbF3uiWu/wASfe546v7GQUdGN1iSatFkxBoitCEJ4sWlDxYJc\nakfLqbxgNUI6sLz4V7Qjk9djcP4IGl+GlcJ61kql3D1vQSpelYngNbudbuOj\nBgyDtxtYPpAa7fKIl4C0XsFxdtSZ4+KX2AXbdbVIX1kvHMNeySMJHMqLSleb\n3qbzO/8oOfo4k2pDjbVL4XdFBHPyGosK9ve+zsnlfbqDYlci6z+a9hvbHixQ\nUbbTv/ROPFcJ0B3QNIvyHG7XFQyKChJ4Apq+6vy17nBdy024BfX3J8a8lCrk\nQWtpCqWA4vA2zT4GiYDr41PQZgH7YJ2tUv4H1plo3yg4C8vYuVVzRj/gziCt\ngfHNz02Sm4b2aMfhjkBvcpCHd+3iMbaVVncywoiTw/rNOWh0lI02S3vI6waY\neJcez/kyG283okhalQCugSMm0KawZOKbMjXgW1qE+HXehV073ki4yfWiUfrR\nLPdttMmpPvbWVEW323TGVzBUDMB/hBs8GIQjHI39AhSq+7lIWXgKPRvqhIbJ\nzaDvyHy3vR2/+OnB+akDxF9EtyrvV2MlJWLVu7MKXT+eSPIECHbWZDUY6V6m\ndwmc\r\n=u80O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZ3ovG46/aSGQanzixqI+oluOHle/68OjOLyZCSCU/GwIhAMKWh+dDBxGc5NPC3VtHhW/0hw802stDCYw9tSFHTLsQ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2252_1527260884187_0.9039100431382299"},"_hasShrinkwrap":false},"4.9.2253-beta":{"name":"meetup-web-components","version":"4.9.2253-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fa4d4d2f5b180f067bc9cf6c44d2c1a55734fc9e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2253-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hZbxzBIH8Rj5A1TVZ/qJDV7LLPD+++STS5tx2E3NRjwIuBZuZ1NtRk2BdxK0SpenJTRfP66SRWpRyJRaMYeTnA==","shasum":"65af8002a3f614830789463f576c83fd990c531c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2253-beta.tgz","fileCount":504,"unpackedSize":6162070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCC57CRA9TVsSAnZWagAAmL0P/0G+seYWYVtbnDeBj6AV\nw5AH9xjwCmiDlMtz6QXxfIt588N5SOj4dmGewmF32I6LumwQTrOA4pEaBQr1\nhmH5VaFIhC0h8wHAr1GJwPf2x0wtR9rLVTp8NCkcyjkmXk9rCCJVJUmP3Khv\n2rBg+oRqzLX54/G/WrUceXv70JZqCHHKTL6x9KBiJkRiD+rUCyGIA/N3mWhd\neVvgiNXwAJrOeqX5aEEWTDMIefGmYO60291pCTw5VSB/OiDBH8mE1b/KkEI4\nT2Bhn7XSdMTakUwYhc/VGXfbxeWfVAUbBmiu7K4a1aWW9Bqhf9PRka9/KdAd\nJrMC5cxiknkiukm0+IHKvpTDNoiFOzyKNqbSpuFl4N2CFhHtGZsH0W41KIrk\nU1ii2KNEhbrm6nu2dTQ6s8NZxpteShKCZuPjDZ9lMdj8H09IdTfP7rLekBK/\naDbdqL3/TfNzpivGkMD59G5L9tLqBqA8tVqm8PoiWxlfYpFE5XdIAWhHNa5B\n3d+xdJJfRKwPS8RMJCaBiGEtG89ahQNvjLn3+0j/f42jIqd1S+rVHbLibczq\n6J4e6Ya0fKmNlNNjnDs102i6i2Af5scQWnJtPfQROqICyJLYbfryE+CZiqk2\n/x8yi/KSYtVFPK4/9MWQ85gZdtQ47+79i7na/5283nDWpfEapjP1XsfIDY79\nOBy3\r\n=M4zt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzpf3vFIla+nUTuL3AQys6zXGkTW1YkBsgGpzYvnxqdAIhAPFN9kkNaFDJj8C4q6aHI+DfS0jlx2+KYm54s1+gypIR"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2253-beta_1527262843055_0.8505492023372252"},"_hasShrinkwrap":false},"4.9.2254":{"name":"meetup-web-components","version":"4.9.2254","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f70915b69703ce82e1772588fc902dfa28e9874e","_id":"meetup-web-components@4.9.2254","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RY1+kJc7peux/2QQm9+JqFmvj+Emcwo/cSr7BJ2H8CyEkqAZ2mc8gCcHm5EUbOO5oicoVHaaa2wrZfy+NEswYQ==","shasum":"a08612722da8e3617776349110016bc766d1502e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2254.tgz","fileCount":504,"unpackedSize":6162065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCDtZCRA9TVsSAnZWagAAKWwP/0SOJ9wt7h6wCh67I510\n5aRmHOAOb6FwaEoX6pfgLsghrbwaHE0np8DVmEValC+0N06W0SDKQuneXyIR\nxTpHVf7Nndxf75oD1FOHfGP22BZejMIhA2/QlwlET2cgN0NMfc/xVQ59WebU\nBXXNKURvD8yF3M4Pyvz3lStHzdEfro5Tj4xsFIy7sj0XefhI019EYFU6/J6S\nQlyymLpz9fZ3z1HGMIExbny+SG/vDxmUVvlATKmN22qxg1DjFrJ5GxEe1Knz\nOiG9A09aK+0mMii5/rlD3lo1+mjgGL6iuLuKoY29LCwFHpT+l/YsUSTxmO6j\n+fYQCcJfuonTPGoxiAaHGybZC4dtx9QRAhwssnCm/TWQWPM6rAIkSgJQo4/z\npWaAQZ2GjVOObLpmcO084LYzqXGVoNxVSs4T3ca9Mi106ThRc3cS92LSYJBR\nXIRPBWWEvqNoyuZaRdPuogm+k3uuJvxAQzphlseQ2M06kMtEWHDDzPYy4lE3\nhZoW514wDzbMVSeaxhRvR+lRMHa1VbFf7XGhUbmjEdyQ8eb6glVjltVpOZmL\n4yccq/ZDvensbe8f8q35A0nGSxjLhTDUMJpBJBGBxqsNy5e1i85Xt6mwe86t\nw5odmiF9CphL00f8cFV3VJSPml4D6yRqMGF7N5EtLGJXsuosHwiXKrRzVKWN\nOtIe\r\n=TPr9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfMDTGL/qVCSAjdZoqlhdLJIWMQVv+YuQuRRSiyQ3iRAIgRsWTkUczJ7t1DRdjIPEzf2wwftIX0zBvN2WmzenwhoY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2254_1527266135020_0.4290695263585049"},"_hasShrinkwrap":false},"4.9.2255":{"name":"meetup-web-components","version":"4.9.2255","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"91d279aab90f1c422b3148df938f6e12977d8a87","_id":"meetup-web-components@4.9.2255","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mxo9m6pXuh7tmIvUkG9rImImvsNM+Y87ttWVnUCAfG4okjs6Tc2P6eDKDYnxCP1TGIYH3p2cvAVFesUInCa7rw==","shasum":"a19c9cbbbe9e3bccae6fb57200214598af07cea0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2255.tgz","fileCount":504,"unpackedSize":6162220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDWuyCRA9TVsSAnZWagAALzwP/0jPK/R1112dirhc2f9P\nYGCTVkQ0mmbnX1Y2QFeGepKpfPfKj9H5TrwFigPk8ivbCFAiWyc29rTVymIs\nygsZ3s255ND6jItctuFuOQE4T2Ze/sAbB6S8fhnsJF/GWb8xtOxfih7Z9fGt\n7uMVKQUbipRl1Dv1NpVFtyNzgynXiR6rKfaeTkUJJJt5cXnPVFymFP8c3EO+\nnsOWO0KgIJY+ZtX4DJPJyjq6bEfJQZFBNgBRLJSgN1JMp+BRd77x6IL4yyiw\n6LW5JjPYU4ovlz71ctQQfd9Oo5YZqfGOPgxozLVsHPV6J803SG9qu5/1XvAO\nbdN47m51n7nDsnvqX7gDDjotUcVBMKY5HZR26LWGtqFY7Zw4912aw4nSP2N+\nP60nEu3sSTLbOBSz7azCTF3422YlzRux8zKKzTQySqMTG/VjU/F5eto6Kbfm\npD71NFYZGrDgqU1JHn36bInlU8/C02+ldWPsBhMUFni/G7LaRNTMpixT8y1j\n9Ub67thZM/ROmTZVqfZUQgCeJ59myiGb+b3gTdN8dpTxOII6TgriTb1JFCku\nsIO/VGghMaVxn0ld8K2s4me+/OgCY3yVjqr4S3wp9vJ401obhxNI4g87jfKA\n8+FHiRUD33wu/bmfEBIfmOMuzUFq5sITpsztkg9QkDvDDdIDcD5r0Yh0HCVT\ncGf0\r\n=+USA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9yAO5OMcsOG/Pfx86cHJjz+okgW46T4PCGtxTwoPOswIgAe4u4RVcrVjtbgVcUxCnwa3rwSvsd7zsVyUhJ0j6Z30="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2255_1527606194217_0.558211874049449"},"_hasShrinkwrap":false},"4.9.2257-beta":{"name":"meetup-web-components","version":"4.9.2257-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a114acc953ec12345c410e8bd23bf6d2f4ba4e22","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2257-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9B+YvK5KJP/J/KISEltFnnMd1H2EXyi4t5IDJhZtLvJhRmYsF0B06TRuSu2+QnzhcGH60ZYaMlFTgW+Nt8W8vg==","shasum":"826f040758c8a3e6a85f9ca7ebf7c2868c32699c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2257-beta.tgz","fileCount":505,"unpackedSize":6134170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDwf2CRA9TVsSAnZWagAAdd0P/3ICwdHWrK5fOnkYTE8n\nIfRSaAgGhAwophNOFzd4uMkpqRHPnYh1V/WuGXA27QKqz8x4E4G6ed00TKlg\nC6d7u+KGSgNfkR8gS+xaLr7AH/QNXVTYRh5fJuSPSr7KKV4mfYc+wE427xOA\nteQSzu4MUMToa8XkorpyTSxAkLaX2eWbSENYL8Dmslgkz7peVbzf6UaiXpMY\nJTIBbdg3fMT3UvnyxKQ4l6+zyNdSXUcyUHezybcqi0legIWYgxlka9ru4hO1\nvk1S7P5b0sNuAOFx2QvZXpkKJBffPYZO+p8m9MhRT+dSsNYXVHAvx8EUJfcH\n1r+kjUrvyStolx1G/3uhz6CGVC5dQ+NSTQ+5zI6lTmdootden79Q9/Wj1Cti\nWCEUOWAW28G84mp+wdPLXDxzgv3XjGiDth9ZbJjjy1lJuDjt0XZR9xPKMZbn\n2feEtHC93xwAEgthODyaVW2xi8E7qpS4441kntl03cdbXIZCLraJVuvpIbgC\nyMSUFJGjVgnouDs/pNvwBtqlZ/o7LgLFKOyvqJ9JARafEMqJcsNL4KFGd3xg\n8FsS+mmhC8Mnb215gZ+d6V0krWAQY5BsdLq4rVCzDp6jTT2e6BxF9/V0iqXM\nHye/qE1h+c930zepgEykLXa1KpZbEX+zIYT1s52XUObnXvGcbdX4BecTQm8v\nU5ah\r\n=XU9y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4Kht47DJRj9RhLmk4xbkpy0XyGtxzkDHT1rhOgxZxLwIgO+Go+SSFXg8nzw6u3xnbYU4r6w0IVtMzi3nVZMsQqw0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2257-beta_1527711733820_0.8006433230743888"},"_hasShrinkwrap":false},"4.9.2258-beta":{"name":"meetup-web-components","version":"4.9.2258-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7e38fea8ef0a6bdecbb87a43a17be6bafb598b9f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2258-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4OmFZA1CGJcoRnRS7g7NVkO7B7VPaK02iuyZH7bFoDgBXUCNGq3tr1CF7UAH4kdSrqnekFVfoeTp9ZMLm/RZBw==","shasum":"4ebb65514707d9f870a3ea267492f329491121d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2258-beta.tgz","fileCount":504,"unpackedSize":6161333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDw1zCRA9TVsSAnZWagAAkWsP/0ftUfBcBmjxD/Utvpen\n28EfF0kYYm8RTh0UVduZ2UIIYsjk2Ps5UGgNjAldkHERlgKoLlpQbrUyqRmD\nXCP5YdgLt/zGGv5wxX9GfDjGDsDlrUR+y+P0mk3R999iyJPCFymkpL/ck/wx\nMsHj2ByJILFBZ/e3jW0wxJ7vZHThbysIAmQ3HIRCrCg7Y9yAnZuwh5q3ZB2L\nA6gk6M73UXEdDCdF3HI12w7A6ma7L7jyIjmszkI1r91Zacdn0+1jZOG8G0m4\nmsNuOQEByDjH3BdkMohDs+SfeK1maN9AJYWSwSY8jOXJoih+w6EyPv+lPfT6\nOIh9DtEsmJa8CeWFJBikynpzh8pEATcOYH+kcCQ2DijsH7LYvWMDvgNWm1d/\n3QKFn+cMt3/AynoG/rKtwZr7mc2KGHhjPsbunx+yfObRPYKoDdeuCYxXsxN8\nuwWLrMSBteU1GoJRBhlof+d2zwYCXe16piyc+XD/mgs/sLzZcz7sJO4LfoG7\nfj9tkfJDCAUsJa4pZ3DlI7T49+zzHBgfkl/cjN5s8WmVLESwSuCZo8eaNfkc\ni2rIsFOanceTLNaNiRqa267TnF4gvqoRtlxVDtvmd1XCAW47n7vr4Uk8J6me\nyzmZBZbCt8HNEGWPok1dDcGzDvz5qq1zc6nnZnhrVl1B3su+2J+x0kl+ikJT\nZVVG\r\n=0iJ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEvKCFSuRzYUdePa/hMgYQ7nXB3eTFIq2+w3RvJKDs9QIgN6H+2DMv+clXGmQIJxiqxggGfjRNFfkeVF/+zYebPCY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2258-beta_1527713138859_0.1777222651081285"},"_hasShrinkwrap":false},"4.9.2259-beta":{"name":"meetup-web-components","version":"4.9.2259-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b21952c32a74dcf8fc58507dceb8fb064e2c10ca","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2259-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1yvsDLRsWa7F/veeQYhjtOzO0cbOtX/o9gt8C9YUXHDS4pk/4e8dmqwH+a/uVhLafB+45f+hbD58MBvhu+jcAQ==","shasum":"2bc982eed22ce42f8c75842d460bcbab44e377ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2259-beta.tgz","fileCount":504,"unpackedSize":6162278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEE1ZCRA9TVsSAnZWagAAsccQAIPRYQ7CvPwPizTf6+0E\nYGBomxPG9DNJ1PLxAi0Nvec1OZgvDOjzlRchRuRE4xOWmO0X3ATTAcxcDe8A\n+wSOCQKv7R6EjnTSNJZPH2xUjzLQICrfIER1Y3RPw6m2eybpsUzuYJ1Ek5up\nedMubxGEI2qlk4hIf/XHCN+qwGcDJFbC8g/l5rk4/wcEJqrEeTkxxKmf3FNO\nRggoS87CRaVr5SXBUnG9AdbsE+zO73nXRV/54KTvRQv4vr2PufclTzjtdyF1\nMBcJWvUnJK3aGPGftsPZlEAprwGB/7hnVawC0a3no5vRRs9Q8x2997YpOb8I\nSb4C6U7z3cHLLuxSSEMrwOqN6FDx9rIulo8ercqWLiQg/Sv1las1W5IDJSuN\n/9sgw30Mjxa8q5X8kRzdPNhpXxUvorDwBMTDkEc4SVlkTwCXsO9j6MDl1Hcl\nNl/LErJNvCfmp6ZlgCzl5/XGYNuBMEgZIuhXtB9JpYTIFCvrkOhK4SxXFnK9\n70R9DBv/cChR3oTiNqPFW17eg8d6gySlB8FggU1zLL0rCtUpSyhU5MovPSsf\n4l+/lx1PqWiLB3Y4EO8Jy7kyZQZZc3ZF1KmfYfK7MIOyB9lgXnQHwB9mts67\nmsIJR4uzdhFiJSraAfD5GlZGz5H0tJk8R7xQs+ahBb2nSuKl21a6Kxwuh09U\nPlFI\r\n=4J0N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpnuJcSsdsF+J0DU6dSb95Lfg89Nh4IumxCI5RiWAOFAiAqlZPD6ZcaGxjmLMIh96nQTpwj+cCzx7yf71kVhAlfbg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2259-beta_1527795033466_0.6685711921641078"},"_hasShrinkwrap":false},"4.9.2260":{"name":"meetup-web-components","version":"4.9.2260","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"12e9f0c85f271f9918318774aa33e62f3e60fc33","_id":"meetup-web-components@4.9.2260","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-HsFkXeN8P7EaWJdPe6kBKOJcyi+U6fa4R0qhV0uWfEZ1RHlz8AFzsl/E+N/qK7RlzP3yDiy+GnuwKma8hCCrXA==","shasum":"23fb4a162d671cb1b0deb23cfd24613ac69e41e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2260.tgz","fileCount":504,"unpackedSize":6162273,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEGFICRA9TVsSAnZWagAAk/sP/AlCm4I5QgAolOG3eQ98\nI0CBhjyqFO+HsaMJSPMRX2WwLFhV5spKqEWH5zehWqdRXzQEeZ+cNRvlcwxK\nZjnNqZX0phUWGXFKCIzZ0+xklmxUY1l/Ui3SLLJPSOy5x0oGaZl4owDMulWT\nClNLb9cI292YLwgCysUeVSNY7xOjZc5sKq9ji06+CkTuz05yDmHqWRih7LK0\nQgE6zhlbKQS7Tep4IqaN4owiPrWMuddBNBQUMCSQg6WHOFF80ixnKj1aQVCV\ns3giqNdpdcPRpKzhOI6qEV3TR04Kgi7/VV+Te86GzdtZoxmEb1TjKoyUTQBo\n+kBYY50xXn8MNeDPMbpLMRJJSdD1Bt/PZrI0d88u6XKhSHfIAilz+P6Lp/NB\n3PVAXKiKXD6i8+2ANE2ZogH+euZtuUVTqIirI9MTYae/eq68rpk58EAGOj0z\nffrWhU6CVxTQ/5uh3s2Ft0Vpb57Eug6kHijgoiqzmxF5Jgy2BhaIRkXi9egP\n5fV4pH0KOmGldYyNB/rAZTe2Meb2NF9wb4E1iVmcHm6enCISkGL6BaOaU3N7\nIyRlpoo/WZIypk1ywhu9680xMuiUfLvn1L5dTTCVu49CFAmEIX7yZ4a1s+8T\njOHNUrSTzWFT4Ugf54CdA3Td5KN1emSa3MWJ8hcLiaZ+Qpkqe5pVF8Gqo09c\n6nK1\r\n=/ZHr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFk0VVi+nEnyt0zrWw8mENPoW5HiF5c+gpk+rA9BrUvDAiBMJUjM+1vCNLGyksFW9/kMlKuTA7CSDgOZOxILMI14jg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2260_1527800136339_0.22090274408473642"},"_hasShrinkwrap":false},"4.9.2261-beta":{"name":"meetup-web-components","version":"4.9.2261-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"29757449015ad0b8c832fdde2298f6a385a6c029","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2261-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xhT3GmC6zPsPZV1qtLKNlMtvFDyujY+aqkyq7FbaEl6390DoZRjP6rPGazN9BKFvtEQN5sONLeyvKic2IfcXIA==","shasum":"2fe26f36955451e9297ff46e4a287a4a12414073","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2261-beta.tgz","fileCount":504,"unpackedSize":6162304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEGIZCRA9TVsSAnZWagAAbLYQAKJd6ZqeK3G9yvsimVb0\nVUrC7fmEivxzsXMxTSn5smk85p1brAja5RCLxdMsvZvoNZhukO715Is2sOT2\nC9HwSgoRnovwRafQtrxZj/u2WoQ7YOEu43mX8FZR+xnjTvjkoVHbqy4ycCf0\neUsAHObnZxZZBw79EDal2ZwX/MNXCclZYJDQU2CSTDNPiGGUTgSQiDtCSjJe\nT7Vf50oDQPi/mKPI7PA6qH/hw2ukoKPLWUZvqHHkUq4a44xYCWBvTUBzLekq\nKY0FeriV6stx/rzytVMXP3FqYe5sxlbOvxXCHcOHyVs6x5gr5agjCVSJ9FfY\nvo6qAxtAMJqwuHGY1ZLEUzkm+dZV8M3pfAcPseZaZXWBQ6xNxM2nMKH85E2o\nJdeTFUckF+HRD2rVHhZ3sKWCQK9BJxDYo4U57nkvMnMUnRXRZzt4qcin/2Wc\njPeAkuIxdM6CKItoGibpeBHl0zX9vSJyn+aVW3feqZo9Jp8UZ4/GFaqV+u8c\n4kvrZmb2ri2eArk7UDFmWmLODxRvkb3S7iDSU9VeqNjqZXf4CGxpCU6RoHMV\nQqO7pCNgzH80aKXJ9PHkWrNia8b83Faa9mlMj+dZXrKJFSVsbuSDLnWB3Uss\nTmxPZheNJXlrP39dfCw0+muIk1PAq1qe0E06Z0psna25JgZOOMppcku/uE67\ns2fC\r\n=8Opz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHfFVtrrfy/yu0tTe8TZ+gT+CzAfAfzfY9MkL+CKFoDaAiBzh+oO7OUAaQZKrSeY3zq87SPhPustTrDddbem+XIbYw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2261-beta_1527800344560_0.05305062018689588"},"_hasShrinkwrap":false},"4.9.2262-beta":{"name":"meetup-web-components","version":"4.9.2262-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"a5dcd81563b5dc19a46b52921b999d98474956e7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2262-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-X+YZ5rsxRRim00kOXlD6eDPOSLY4oNy8TIS27zJTWmcJLWqrGG3YQsx3iZWwauB6LGWHxTCZZDdq+8fp3PdCkw==","shasum":"fdc1e71975c405030b90fca58606671715429078","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2262-beta.tgz","fileCount":505,"unpackedSize":6162539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEHLuCRA9TVsSAnZWagAAQ+MP/3AWLcirnV7n0ucXxxuo\nr2w/ZFjA9CWxoBrSbSGGNj37W/9imdO3oZUdCapXIRLhygeQCShCSCwdiW/5\nJwhWkfVO4QlsqUxzA/1/ooUVaahOtyRqU8Lk8r/nKVnCCjjSAhj90O8+CLc+\nG+UEhLnF8nrkbjeYw/jvuWLbdSyvg4Uyp8TcMArZm8iABYmLRQXwqonr2JR3\nHHPIj6smr+YCGXxS23BezW80LLJODlrqkwrnEPWx2zZDA5DQnSeD1DzlrnZl\nv8HUF0hI8PKejD6QNkFxIwI3RYIUQqqVEtB7q/pMdlb/us0yGcNQRI54mqJ4\nEsl2jVu7vl3pj8ix+59TGhYhZYlnXnrKUbOzsgSu2dHcRvANXlaXue1O10SC\nEKVG1BSjWojPEwzT1n5Q03ThtaJqBeWRAOYvvx7miVFk/0V4enl9ZPZU4hF+\nmLVOJu61sxQVQZpe00ucZQXb/3Nd4eBKpLacvgi6zq+w/XaS95eG1IROq59u\nSDe8BLA1YhmF7CgQEsKOPY//KHXDnvU2TJ6Qxgq3kpX4Bsa2QJhFVN0JDN6z\nyloL79HoSnEoP4C4TMnC/HCljAfPg2aYgwS6s8m0mia/iiqT+9OcueOpZVDK\n44MZDlwrLlRDa4e9sCIDN3GwTsx3mpAEzVnAvMCyOkLjU+8E/lPf0MM9/ItC\nH1TA\r\n=1KYX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFFGQZKsceX8sLxgd8Zt/ur/zyoRGHJWKg2w8oIhsQuwIgaU9euQgb7+pAz3Cxx9Ac6nKOBTrq8FR9V6wRgWKfgFk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2262-beta_1527804653761_0.6715731021259526"},"_hasShrinkwrap":false},"4.9.2263":{"name":"meetup-web-components","version":"4.9.2263","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"e871055e84c8aa3bd7b3110b9df24841991acce1","_id":"meetup-web-components@4.9.2263","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4Aam4w+HpTXAYe4JkcQsjNdwRF8CJhDoj0O9NY1ukKhoP/lm8fojviFJyJ/Dl+rJUjIG43cl/qhPRlEh9yIvHQ==","shasum":"a2fe1d39d83b1db61976324aaf2f254997581a87","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2263.tgz","fileCount":504,"unpackedSize":6162299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEHneCRA9TVsSAnZWagAA73sP/RIdee4NpqNsXxRA6q6H\nUkuPg6AK6WOWJkY7CzT3GScUxTG1e4IvEeut7zi36KnpvFSqoCebwsuXNucK\n1J+UflJgdXOreN0wKxAXW6Nz0wJ9O3237odL0U1jlj9vTKy5jEpp9CmoMBDf\n5mOMFEg30bvmaxbyftIclpGwKoRNT86BzoUgeGfVnU5XWWb89gFrD8bLN55E\ntZJu9St71tJ76UgESL/1uqtEn5ODAbV461Sd4stwLudhwD3ngh1+lplthcvj\n4MTdQLaTXCC8a+56lmzmhHgyy9WRxUO3kznoyCOE4iQBuZUzx5Mn0N4+G2Qr\nA93jR/8d1XupeX2PHgML5sraFHkPgxZ6JPFO8267i0oAi27gEQImZ6pS506o\n0bl0wmefcC2PUYRAdkFoE5frUFqbtZsAA9WsJ4xuCKJMM3GB8bOEMHD+N8ep\nMUmS6F9uHXZx0k6/bDVPytWgCQ5kV4tGCiDSQ0i0w2bIlNNgMV4qheZluXXF\nFWImnyfgTzN9afTDeLbOR1eB45R7Mkw5B0mGs+a+24eaqi9/11VOhoj7tfDi\nxrCZhkkMbs9EnDcwOI9qc6luJs57o5ywl1lscONLDxJYH02zkWGKsFMA/kgm\nR0AVAST8kd9/EhX3yXkd8kqK0VOXMwNhnhODj0xT98g423zwaDjLyQ1iD6wT\ncJqY\r\n=pqkC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPLRKskjt7SL70N7j7y0hrLPre1iNdeyB5S/2J13GymAiEAyDVonWbKbkrku/AAp2aVR30FiG2ywn/RsTxc30DABdU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2263_1527806430318_0.43867421279677155"},"_hasShrinkwrap":false},"4.9.2264":{"name":"meetup-web-components","version":"4.9.2264","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"cec6e42f4653cf36d82abb9623b140299bdfb8b1","_id":"meetup-web-components@4.9.2264","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-srpXj6/0ST2HbZBH5gArXe7khAr+v68MEmtujDw4xaBC+BKVIb6DjBi175XYjM+QiH9M8eaGfdGw9VDhUDATzQ==","shasum":"b9b68e10f342cafb856fe78e58781dbccc173c3b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2264.tgz","fileCount":505,"unpackedSize":6162560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEWifCRA9TVsSAnZWagAAK98P/1FawVBmhfuP7ns6cBce\nPzRwtKl6VN112gOpNjsO+i4dVIdL9sBaZurBl2oK2O/oCHomsFVWYu1zoCYK\ny9V3kTvm7QhUQBTwT3YUPnMfVhPiR3hIV6z93IQvaJQilFhkfYlXqyJ22Lma\n7CrviTIhV3KXvF8L0/HQn/AX9yAFJoDRkAyYVwUroumz8oJvpCaGro2k4I+l\nno2tznmDKU2kqKMRbI6S6TLoWI8vgdBQWN9+1u3uWQJrdmcg0lixxm0eVL6k\nvtZRPj2xSkYAFJ93jYoYtF8jV+QxgId7wwGaEE46981Yp4rp8pL9EkFhy00C\n8UvgNqvc1VUnqj+bwLYm0iHvJXUWC8vHryKWqWL/b5KiTKOI5NP8YJ0hrg18\nuH/mehroYB2ZucgGImBSpfPAC+MZclj1Y+uKGKiyLCzj135hRjGvJ5YwD/Or\n5lgafxvBHZraOS+9rPMv6gJ6caGrCcJQOs/h0smleFfcIMea0RCfRRfRFX6J\nWtvSIoFUfu8HFAHzxBS1hU/1qWEZpVrojZMkOlv1+2Q0fIhPEpGzu9+qQ8BH\nzgOZKXTWurL9srVxI7i8Xm0iiM7mU0FvtXJZxuNAI6ojtLiArD625kROCnbR\nqA8m/e0s7hVbHmJB3CkTrKB6vTJfJ4HP82XrPvvDkpVd5P9v8GfYRi90/eZw\n0RiG\r\n=2wEL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLit6L5kX1ZQzvhQE8iL1g5Totp/JU4QN8xiGqfXZd4wIgAzFMvgfvcxG06j2Za0PiQHDj9i98Izapd2R0E6KH7ZA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2264_1527867550709_0.7744937146610855"},"_hasShrinkwrap":false},"4.9.2265-beta":{"name":"meetup-web-components","version":"4.9.2265-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8d4a98ca13838e4a179f52ed0f19df5ef6f190bc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2265-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-yrctsQ1eJglI97vw0xmGaNAe6uuURsw6jEZjDfvL5SV+SExt9aqdc28GRoh7v84oqg2um2oniCRFn63MN+/YYw==","shasum":"2fe15abb833860103a07f678f9dd33c68eabf369","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2265-beta.tgz","fileCount":505,"unpackedSize":6161805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEWnlCRA9TVsSAnZWagAALTAQAIEZdJiS3jd6Qj+P5yz5\nmS7GiaAzFT9NB0kDGW/YlmbWFADenb8ASH81AYOrHJ8EDF0DL9L+ubT49skO\nLv/xEoQoU4uuDw6/Y8AwX+XfwwzjYT22nWloY3XKrrtbPFhXRK2IqkjQLPL3\nEAOUAoyzB2kzTFFLc1b+SQU25JBMSBcgkdIoajsmKHSqCsSZ7R9VAhr876Yp\nm/FvSxGRKUcIL4B//Iq6S0K9VRG843Kj4bm+u5gy9lBo6S0q0TBxHgsuuh4M\nFY6HMnw284aII2wOKr4+U1TO9tTiuHzJMIYgDCMnRB4k5nuCplNZypnvHRQz\nincbf/PerGh51m9mgn81jKsCRiaxfjtInA+HjzVdHrTvxcpB0gJ1/lxEGd3J\n7QXHSoRlQCk83Rb6vniIiYY8PHoMCJGaLm39r41blU28dLibLNs4aW86l4+U\nL4vF4htBwUYlwC4yKdloGHOBlqeG9L+UEDScnMdmc78Wbdl/3lLV1+Y3rbti\n0qV6Xevagw1IBXWd6CfLFOkG6jkDzs3LhPBs5dRybcbzdyTC9UtM72yzNHQH\nZO/I9YjJF3SeNRHhnLdTKy46ZT3KPXly7h/RkBrAN4/ZS6YhDdyumWWgyDLx\n21dXJfHqMYf3lhpLZsw9lzeTiVHWfub6o5ID4LJcr/JgYmBS0HyGPkxHx2z/\n8fE8\r\n=n6ZE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX6ys6Hqy0sB5t4rfYWHME/9IsL23VJ5srwpbJJvF9UwIhAOmI4IGiSBw18pt48xP7Pg88UIOssE9igAVuhI0Aw899"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2265-beta_1527867877361_0.31611962946474037"},"_hasShrinkwrap":false},"4.9.2266":{"name":"meetup-web-components","version":"4.9.2266","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"b9552e1abc16a2084235019c4fe924d46d8edf77","_id":"meetup-web-components@4.9.2266","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rbbuWNnFvg5mOE4GXZjjO0irBoIGxA2icYmp64DGtzYHYZU4CHejGp0+o3rIEAFCpe2Qb9oOopytCoFc2ulGEQ==","shasum":"3e46eb12841eca341f036982b31124b5e27f99b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2266.tgz","fileCount":505,"unpackedSize":6161800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEZT2CRA9TVsSAnZWagAAl7EP/jqi4HfvfTUjVvJomEyH\nvDcbyu8TWLURMLu0yX1RACiMGm+r75+P43NshXZpnCfiiPAIBLTLPcc+NPd1\nOqp5cz5/hp81a4YtUaOrMEZTEKyMwaGHb5avo/1f2AhgoWynTpvSevYuuwgP\nVncjoLXteMvGhB+sSRzrnC8R6CliPePVA3rb8HxTwkr1OTOcZc40s7THYV+O\nN2iZ0BwIhbHoHB47rsvk0oj6YxDuI1+85FaGcgTb0HX5COVAK/FkCWEjEl6R\nA1ZfEwQRQnmPHQ4K7oPKQZKNxe8SbHpcFR/MVe8RrAfy+1IvM3pOJN3LqsME\nSuzQtTMyJmQXCPE317l5AX90rPMA/ZBr1nZeaYO/yrd6+Txm/2OOIykmY0LR\n/rEnBEor2STkEsDbb3pApOp6Eg9JS1tNBHOC/DlOBfYAVq6/s4GVj90PY4Lv\nRnQHnLYhbthcxK+Sxqh7XXfKRcw3uiTeyn7nnvFEHfKor/ECmMti0Jolog3Q\n3YFuAY6fRD2BnH4OvFK33pVnPobkkHxluhMKFW4piMi3uWKedj3OxovE3kZc\nK3gtOSTIxJkgtZiidoaLCtgFIdhopbZRJ0pN8d2F/dgp+1rb64Dp/8mXhN/+\naxNkuEvi4SYcYh1tmiu9DdtRdyqgewXJm+6prPpg23c8KL99uP5tsVdLG+wm\nUgtW\r\n=Iez1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbf/X3hLSN8VTV6+im7K3JcTYinLHZ0fJlN8qv1/lQsAIhAJIKthjKZ5e6HjN25v0/71y9utlC048ok/r917IqLnUi"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2266_1527878902591_0.0252454775994837"},"_hasShrinkwrap":false},"4.9.2267":{"name":"meetup-web-components","version":"4.9.2267","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"12.2.2117","mwp-i18n":"12.2.2117","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"fdd3d9a7e3f9f38ea665a2a02f2d9d717abf3405","_id":"meetup-web-components@4.9.2267","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/YkVDWV7w/7ptvqVyRgaaMGn9Y2foe7QMkqItFrVArQmJ39lBXCTR9Nx4df3prJOtaVCbF7OuhFagHt56q/Fhg==","shasum":"7b07dd34ed0ec039441ccb89e40407dda47e4b6f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2267.tgz","fileCount":512,"unpackedSize":6173213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEZy2CRA9TVsSAnZWagAAocYP/264mEOo0zHZyfoSb4bz\n8zCjSf6w2gd9CAQt6oEqiyIAdIYvN2aG1ZFfPzrd2uJ773iLo6bROyoOy0VN\nrPIOvwBOLDwfBgdr+4RQQJX5f78Y0FCM2KtO4rCxjV9QkULu8J0PhImYkO7M\n3pIvnp0vq7O/1XZm4F71bQBbtopBR7QTaX5BgDzwkfruHsnJXxHsQVyjs2RD\nPMuqaKNPLonKhL7nCek4ONqKD/G3kDbuE7aVVLyk8VeHa/+GJfIrcwyuPhnh\nr17FcMs/nneQu0fzRV2ZyN8GUeiMDjOv8fp6ZGsc1P0Rn05wPU6BFq1n2hsH\n1Hf4DD9ZR7oH9TKd2O8v8k+vY1zwqb6uhSco74jj5zipnWeu1Ky41Il0LLfT\n+706ECRzpFvnu8ALARtHyHk8RjNCBfHINMC2fKcQgbCWxGZFOPyYBFCqDdtu\n2DYhUdTW80sxG9M2B27b7SzyPmNH3qK+OWT1loUGyCZs+hWG/r/7aU7/wNnN\nrOYJGzD2yFk882aXBTm7KIHS1UXDtryEwkuI4d/jKjxVRyR3Dgc8eZtT9QYd\nsl+BlI3lJAmnVDesGXwdW7ZxThGHn32aRmc2zfQq4er7sUj+WEQ7ds3XeuDW\n+Mpvb99h+6QUuBi71wTHFUr7BWDivh+Lx/eTqA5h0JpvSWIACE0oa7P1/+Gm\nf0E7\r\n=iKNO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcdDzDQV1mZK+NabhrxFr8h9nF2I8dbkbe0UANDLpTmgIgZtJ8pOfSuvjD3s4csbEjv2/4+68bgdOV+51tvRaoaRE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2267_1527880885665_0.2552368975587902"},"_hasShrinkwrap":false},"4.9.2268-beta":{"name":"meetup-web-components","version":"4.9.2268-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"7f9886d36e0dfcf7c670031dbd1ee0b247bf35a5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2268-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/OtN1vtHcBQcgUVqGir9/gFe8OD5xbABZwPkLNgCxDvU3TN9qwHe8bu817jadyMe55i/nJJitkLJoAdpPIEbEw==","shasum":"7297b39e873cd639ca0544e6057bb17e7d487bc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2268-beta.tgz","fileCount":513,"unpackedSize":6145170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEa6vCRA9TVsSAnZWagAAaNsQAIMbjlrxIo58+wz1RZXJ\nv1c/MxCkgiauOX/iqa6ONL5ci5vHhF2Dh39Gbq3TttWa1u5inDFcOK7lCyQ9\nXxvVuHRM0XymIgncZm8ow6e5XglYEjXVPDnHR0C9SI44AGnNL4PtwtzxN7MH\nqLugbqGtlox4espQJYWEGw7YHQZpENxf8hVhXW+2WngOyspxHtIE0UMabvP3\nCxskkOYD9EnRDKyQjkfNOk1/ZK5WaLvmkHMCNFtoxBIxOwiE0Qiv6xtmIBBO\ndTHKfraq0MkxKBhr2hLpRSKAcCSs5wEXxDIB9Sl5kXQK1QVV5lXi3Fqhg1Hf\nd6Y2HH4s8ukv+en7lhq2owB0AAwmGnKbBxFPNuBkbZEQhgdX9t4loQNluqCl\njO7ybKAhs+e1YswCOyGZaBAPUSm259kkterUG5cR7+q0eKlils2PSQVeHbLp\nJ517QtCPRl/Kl60J6XH+hbEcGA01u4pXOdcnRSBJElD406P75Ym35GOZL2MS\niO2ufLGuJ8aZbZHV0IB3bpCECJJGkK6VhGSwTb/PSiQ6UU7CduLo3PpjWuAC\ni8gnwOF2zxB9E3ptTZxIO4OBWMTr7NW3PikLvBX+xJiNG+0tJhsNp4b8XcUm\nngbiguL+nZHRC40xgkwL2tu1XqrBQUwyJIvSE3rlZSXJ5YGyk9JQf3jF74WP\nCeoi\r\n=IfEf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHNN/Ic7RbIrcIXNY4wGDVsXitAjHhUBOEyMjYOcHp/1AiBBCLI42AMDVy0xVpYn9fHNrefLclgq2UZdEOqxWmunJQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2268-beta_1527885486757_0.6680489354000914"},"_hasShrinkwrap":false},"4.9.2269":{"name":"meetup-web-components","version":"4.9.2269","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"04b37d5f0ed8bda22f048fe1bd2521cd4a3214f0","_id":"meetup-web-components@4.9.2269","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-T60svt5BMCCVJ8VAJ0H+4UDwLVQ2sqcDQi7e1OizUaBs3V6CMOFW0hWaQWw1eWOFKjUEf0WzxynAS9rlW6PaaA==","shasum":"fb23ba822f1d59614e43c911018297541c1b3e73","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2269.tgz","fileCount":513,"unpackedSize":6145165,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEbA6CRA9TVsSAnZWagAAMwwP/jLosK95103AHLCpp1gE\nYcxZ/7bDpqjLxG06qoMwyBt8h5VZvVumoWH+KKnSuJVpX1aSBrLkO2DKDxwe\nhvJ5sqgxI314uFtm317YVeWdW5OFJmtm8lkH6cl0JrCYLFSCkds6bQS7Z4TF\ndJdT5K/elFGWXgfZYiznjF3stB6o6VINOLWC4DOOcs3gm1+94RIyLR87Zp0W\nNoExYLbHuOo9NeKIyfMP1G0v23M5p6xY7jKP0AEzGzFJ4pCwaSD5FDBxo6nN\npySeNDVUuL5xf8EXenOIs6HtqO8zCQxNTAAM/bbjR/nQk+grmdi0ZLJP7fUB\npXQGf2S+m5XZk2g3tqeejXMGm7rud2VRTBtQsU1RjLjXc5F23TjAecw17/NZ\nDiSrakjSL2V0pBhyC3BZJWljdiwuZsGjS8Zs6luytGRmjw4HSw4+3WaQksLj\n6Bbo2YZFoFdWyO24YFbD82jIhs63/hnhm8ARJKX6b4hMhdr4SBimxFllzIN1\nlI8/OcxZ9iIIsrdmX6qORMkQfeXp0y1eKwnP/cNls44DqfbRVWiVoZ03TyAZ\nkvt9YsOZoZOW0TIj/5cogo+xlUzXFuBTQBe39N1rN9mq2QZ8ML3zfGrz+noD\nHPyZHbEj3RP0u89GbEtraCtlblImhQ77Y+QzYGS48NCoeid8WS5sTsLawLOO\n+Th+\r\n=I4Ai\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHzKik3wxgPG9NKaC8ZAyQBUVKwZeM/fjnPN5nWQ3aaQCIGiP6GdDkjOB8ke0GBub5Ub9S+OOJwaae0DjMMICrsnp"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2269_1527885882451_0.6894274569515888"},"_hasShrinkwrap":false},"4.9.2270-beta":{"name":"meetup-web-components","version":"4.9.2270-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8a879d2f067e13b9f6ab1e4941ca95e3c2af637b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2270-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nfLlN8Nt9sYGMdVI6lTXEHj7N3aHzQW01tfjGzvtDR3QJJvZuGbbCS3Mget3tDSoJRpEwnnfJMlSOiFoIp8P3g==","shasum":"598fe848f16c853e9a357980b1692d165bbfce07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2270-beta.tgz","fileCount":513,"unpackedSize":6152639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEbFlCRA9TVsSAnZWagAAquYQAJYdSXXJeQcouctYekd1\nNKWxXHJfhA55M3hDSAqi5enuNw/JvjpBoIbH+UO18Qv33ANrvGBjdEFF6lNE\n+2s0yYgt+W6IIlje21YY9fpPB0mF9yBtGgT57idI9EaM/IefcnJiTcCpCmBu\nfxiqfvVEHKFGqoo6M69J/t2+nNYSl53Bie0ED1HywQpVDe0HU8oyWYRi7os9\nLJcvVdrLuwGxRGSMasTXbJQQjGfJO+AV5PbQZl4ikZu9RbQCaQ18W8CuERsC\nvP4eB63gVwJw1RlHYOmjEvt97/DV3y8fTBNMF9BLQvyar0+z36o1tF4Iz8p8\nVDoju/57G07OCN+VL6WRmJ2Csh9sQYL8ORHeCNzN4d9JKw6EYP7xHseT/6mh\nvW6vykJic6Y0baPvk+SbdvVvuJqTQuVhNZYNsCfNihSTIn7LDrT88cbewjUY\nqyjaKHDXy0zUpN99WDg3bfm09n5uBB1Tw5aKl9pgJ/FVZNQPotyOLq40qea7\ncMZBnN2kcZPSKcSUEoVY2adPdfuBOz/m4F7lOUAk8Y8ozSvcZPrqnK3Z8i2/\n6zZBQ4+PxA+qO0GNgVw9nhF7Gat0nX+ImTa3SflMM42MLu6K1AKEMFg6bH6v\n6WJpsOc0WozSa3qWJWRuN+Ez7ePXBG8YlgUaKXObzLNYdPTpU2NLRZTcEizc\nPnXq\r\n=Ee2o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4598+UfIXb0cC2X7FceWNmdnRLcIaX3uIq6S7s7JFWAIgIiPAT2l8OFaDlNXefj20cfu94iLGVz0xO1zFVVv4BdA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2270-beta_1527886181466_0.7665775630892533"},"_hasShrinkwrap":false},"4.9.2271-beta":{"name":"meetup-web-components","version":"4.9.2271-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"eb7dcf025b7df0f0b0d00ae273cc29ddace71cf4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2271-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8pjvP3rh+3D5Vkp9VxVH9k8xlzClo5hjPc9juMvfQnB493oSkA8DvsaFEjDWJ0JPqOuEchGiGK4jMxMxNIwvXw==","shasum":"3ae9d8bc0313421692b6b861d7566a7e4454cb55","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2271-beta.tgz","fileCount":513,"unpackedSize":6152049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEbZNCRA9TVsSAnZWagAAn78P/2tcliraXtiLC7/Z0sQf\nxb4yoekXoXzy9J4zqKkF7H5NRmec0YdUSei8/hsa14oEb612AUS1/csVlOek\ndlutco920tSQkTXQZ+evLwxVpSuDmdq4Di0ojwUgb4TpYNBDFXfWq8Gzd1fA\nOgwVAsV6XY0Wst2sQb/r3qUt9cfmnhEMJTcQT1Z/utXpszqelBVWCen473V1\n0qq12ixHFSI/oU/RGljZlo9YbWpPiRyG/a8aC7DKcZYS+nSWoCfiPDIlsgH5\nmNgU6+xnoxaeBqr+cCMqrqeCdxFVaQRWgFqHsg6CNG386WWUjpbs3kTRALzg\nmG74P6nQo5LAqSOhot7kFf1DWTuNqD0MKEvzVAua0yCcF5QgXU+cQoFGweeS\nWXpVZdeIRizAZplgtTzXjYAOFuxfxgbO2yUof2YycOmZ+dUVMDJJJjjhKjFF\nUIiVyv4EJeI1eGY0qymtxIIHyN6jRj7CdudSnZWiKDxNiFhXQcPO/HT1q275\n+p/8RWN4LzoNzhhDoNPhtW2C6SJeZ1/aOMV1Tk5TXgIqPumO5QdNWxdOWCQJ\nvP5OWzrw/5zhlzp/tJDmcv/3LXtIGLSz3+T3LhkKbcLJ0kN6RP5qKah4Z/FD\n+IMaPglNq3VynbylYFd+YGUgdrv+L3S5vgYReNXroHwwIzDiB1F5JEJLPRLn\nL1n/\r\n=6NiQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgCCNpIKz6Hiu6mze+hTCpqwyLnupmOWhVpGuBPa4IXgIhAMt89Z8lS3Fno5oRbjggaZ8fJxjt+B/RjPwomg1WNwVe"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2271-beta_1527887437587_0.9819157299991432"},"_hasShrinkwrap":false},"4.9.2272-beta":{"name":"meetup-web-components","version":"4.9.2272-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"add9e1c749e688313592f10bd95a378c192b725c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2272-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-W4mWjv1ixKrta7LZDV7gqsbULOGpKCH6FEfxYAV5s3pCMU13CJAHpkVv9tuuXyb04+hXHbXjzJeybPxM/NH7rg==","shasum":"f691557ff195eb76a6635c7e53e3e3e81b1d9281","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2272-beta.tgz","fileCount":513,"unpackedSize":6145254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEbpmCRA9TVsSAnZWagAAuCwP/j7EzyJ3wUwE/yYwGrcU\nnpjPMG4ac7CFj+lfEHSDwgH4HI/SBkM1KaNVe3+o5Rqsy89gaEgFwkyCqBHx\n5jHB2lBhTFvdFVipMDooiqbpKbRYd94xMKB3c1iAuPsiTYly9b+jgx8kavgL\ne8jh5NnZhkWcM3j2ehNJX4KirWej2lAkxVZ9qQ0YGrhL2f6ydBTJ3QWJHoNn\nlEJ0ZjzNGIvy6kPYsZbSu2OCNE+QtbgjlYvweZSs9Bytskzes5Jw5drR7cvb\nC2Y9GT77jt7qEK9aIq+mKjaLhwcrcWpI4dZ9nunulEKDw+joC4Yvh99OdUZO\n+F8raTEQbPFMz5i8iskvAqRjjVC6BEGMctR3L9KCfZXmpZcC0qIDm0EqbelK\nVsgwr0ris0yjt10on+S7RAuTNigULpjziuXP0r+2mtUOSBTm3hCfaQtnc+fe\nzH3fd+pRxDxtkATROcXQdMhHV4wCxlPqqGCn75N6fZu1aJnd0osUfD9ldZHP\nXo7BPPn/wFfGpixIIxIPsrDJ+acSnEO3w8GnszIrjO//kCRujPNWd/G4P6K0\ni64MqlHGaAMxrnWeQ1OhmjtCjvfhPFurR9wKvj4MzEaZzMWyBeK3w+tmEcZ7\nI1KrNq5JDgHZ2LdOx67+EmfOY9UwqNFz9wCXVN45SZkdHODiWrTUCAXbL/bq\n7rOC\r\n=ijAQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIYWjbr0pJuZUeA+ny8cZ3zgaSooMIxRpCRXGv6gmnEAIgD1LniSG1mRrpHJtzxOb02B3zwnRVcMSWYj2f/swukTM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2272-beta_1527888486452_0.8912991971250419"},"_hasShrinkwrap":false},"4.9.2273":{"name":"meetup-web-components","version":"4.9.2273","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"f2d0f48aa3b6879ccf9981aafbd2d27912dfef7e","_id":"meetup-web-components@4.9.2273","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-BsWxImJjCP4H1zcL0vX5Y0AVarCGB9xLQrh9dgMPKOe8eQQ7X2E6jdOupyRVA/8gUgWlH+ynDLQvFGIh/d2TRg==","shasum":"e2b95d49c405b359f37a89c30bdbcd47b29d16f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2273.tgz","fileCount":513,"unpackedSize":6145517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEbq8CRA9TVsSAnZWagAAIQMP+wUkAfL/O/xJ1m5vGm+G\nOOETYBNqbftunwRYXJ9NpDUOfPPWPQXErDwTYT0kEy1TVKDPDN1gkAliicVq\nxJTx9CBJ0o4v0d8vLuGorG6yMZhLpFaLuLX2CBTxmj0KTnlDsO/Rz/mb+Bhb\nomUrG0KPzQeJR9RWnn1D452PpaFkufff29vxbpLP56Q7bKxy0VSzOWPjQsne\n9XFPYzxbDbQY387yVjHu95IkFUfPGrUq0MHd5b6kQV5oU/PSWDE6BsC45jUT\ncXGfQkJcJ3j1j0gfoNz2HbcBYVX5tLySaDQWucfdtAY7tgU3wC59pPDdmpwA\nCJW31XWj8glsrEOQX51ehcNT2zEC5f5wFvF53SLj4YloItcORRk4I9q+5wW7\nlNtq7TlxDNvSGHMV1t4v0k5ynhTONSZq5fLjsS8d51On4ZJOkQNlTRadFsRx\nOPTcLN4rpCJsW2+IQTM+ule57nLolp5D0tG1oCBIN2M7gJonL8yofsItLhpT\nkIgXfn69g1HOOtMsTcLu1IIVf97Xk+UI1rxKf0HK36E2HHybxLCI/PmfJWti\nT5YG9ApHlb/RCtah5CNAAKgC9lA/NiUgqpw4qedFkneQW3WEj8SpLhdVcn5L\nRqAHrVurEC5h17Mxp9g/bfXrT/a7Foc2qaGVxrxi/XStHdMwGa8htF/UFVjn\nZlsf\r\n=3fYA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDR3LpCsSxFo8YvXewqj15yO+Y5F0tCPpBvPpcNgv4Z3AIhAPBHW6oDWipoQUqwGwA8KStyxqvWyKNxWatAxE0+koJr"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2273_1527888572577_0.47135086927337144"},"_hasShrinkwrap":false},"4.9.2274-beta":{"name":"meetup-web-components","version":"4.9.2274-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"c20e1f22f82d5c025225e6af60a339400447eeb9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2274-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EUOO+tfmY4Hy4Au8xpGIjoMGaWXWGOo9bmawcFR75qwwUqs56rG9VcOVQ5Yaqhx/VzpjtHCHimr7u6m6bx+G3A==","shasum":"90eac49085afb52264cb4311c096264c883b611d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2274-beta.tgz","fileCount":513,"unpackedSize":6145858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEcC9CRA9TVsSAnZWagAAhisP/iSolGDI1tvqZJnokMLJ\nohwipZ6CDbxxOT+pa3kt9G5z8cfqHde9PCdX1Jcw5V8X1w+NmCsIa5/x9DBf\nMA3FNg9Rcoln/EzzSWU7OSosExQlPk9JmF5JtqmqV4YQmnhGv23GsAkvM9Xx\nxOqj5riBaMkGjzgci+/Qp3ZNyBSYMhORBQxxeDyqlNhrnLt5YrkzEx/vMeZz\n+he+pMdj3jHfhgkMtyEV/j/Iv/La4Z76L/y8rs3Ny+dJFtxmuoHHzsHW7+pZ\nUfDeCVIhQrnO7uVdG6BjjVfEd+dln1khNqPot0c+aKFqcYgF0NAHDqsN5ABV\nx+2UpdjLjYGHs5thQnG/NtAREzHbOXioAaZGimrXHLuvs7Wa8IbetJb98J6I\ntZDdPeIsMh8kC0wVOFlwpuVbsHqe9fhPupiZMA5Nn1jRRwMXElHSp19Qai1C\n7Q+YWQkYvZcnk9FCXmGWNkxyimNMHSWq296dbc6H5Kh9U3G+ZHY7fS4ywraS\n5r4pb0WNBHiKov93kPzCg9UFVgcURHJ9MsFtdLTUI5msV3+SFKuvHnu64meA\nZXjz5QQJDXBEvT27/sdqpf2kIulSYJq5q2Z2jHMU81BOjNxbBI9633cs9sza\n56m3UqKkmzUOfTKfebk3HPdKdhY9Gl4McGNyAZUM3jORXLBaMqeYZLOon6pB\niJAe\r\n=6PLh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwoBn8NDS/y/u7TnT3t0mLP4s2bgR04QmFF/tIoa9X4gIhAMSr5Kf5FN519sDJzY3rg9QPi9UMHpygkj408XJaYH6H"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2274-beta_1527890109555_0.9513669954145931"},"_hasShrinkwrap":false},"4.9.2275":{"name":"meetup-web-components","version":"4.9.2275","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"8154b9260050d0d23691ac1596f55525927240c1","_id":"meetup-web-components@4.9.2275","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EyK6uqIYzDfKe1/+kHBacRWdUm2iX32LzRv4gBBjDOnkoHtNJ11K0gK6vX3l+sKhFgmdH45Gfug2u9vgGSJibA==","shasum":"91ad414a6990073448d3143bc45bcab1ffc8361d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2275.tgz","fileCount":513,"unpackedSize":6145853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEuh6CRA9TVsSAnZWagAA2BwP/08y0nJCXWe4E2ZA8FOm\n1uQojoSHUxDCslCz6ACfd5HMrxd+5Jqyv5JaSiHizTNqF8aug3T3pZQVnhnO\nFhNKJGn5FOjHGwbdxb5GCnuZIObHu1xwzzBabB855rYdbzwfZgjP8P2dXpUw\nbSuiuEWu206VSzQ4TsacuQ2G4ChUsial3YzV9cfeTwIvP0RqZ22RR8FPXLTw\n+JstZwOSRPLXrIAYc2RoI2Tw0lqt4muVu91FzzSeMjHzrCeOBZcscOIfozV9\nk7PColKK1a756RcjCGxskVPTzUDsVI6jnltFmXxxB4UJNA8wrt3Zbt7dYCLW\nFRQV+BuuPAkEShbkQ0/4oaNwjBuquvU82wIZFsBjEkJ0sn0I07gm1n/qyusP\niOKZCJWnO3ygIhsBTnksKAmHb+qoseMonk+DmkL1eLIHm4Qy9+Gu7mkX20Sf\nlLlDS1Mi6Yi6/yV/nD4gzix5fE6EUMzB6NgiOfVGns7/C1Fit4q/q6enwpo9\n4fNiUQisReSYUsdqCQ4BIsr+dItkGczbPBpFkNoTMPUiAt1KCY2m8X5+SIp9\n3QAFWe6v80sC65KlTpIe7WdFS2yHiG3cxyq74vBYHcj28MgQqZCxHnqVBsG1\nDkY+n/VsH95cLMwlFSNXnwlyb0wyuYfPtqzccKQeRDwSlbjLCS9eJVkSGBIL\nDQHg\r\n=75nN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIH/ctvZ0DCUWKyq2xYNGhyBnAKi6o51AZZjAZwpsiFveAh9C2ZT5Svy7ZdGhOeGLWj+3hKIlxL7gYcQjV7F6UtXk"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2275_1527965817755_0.3639840011206503"},"_hasShrinkwrap":false},"4.9.2276-beta":{"name":"meetup-web-components","version":"4.9.2276-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"256240d77c8e62abf31e336006f373ddd5000f67","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2276-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-blzZaeqrRtQe6Ra43JtzoeSAOMDsuoHN0+J5w7rc3aQa9jXoAr1GAF1GJfG3C4DatVcfHrHd6LQ2sQw+0RIpzw==","shasum":"2b189ba3cdf08e95ec59f30347464d129c774987","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2276-beta.tgz","fileCount":513,"unpackedSize":6146626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFU8hCRA9TVsSAnZWagAA9g0P/juSIdUbdCEns18yU3R8\nN/Uh3uHA1Lp8TFo5Crug2U2DH0UZNXdlJ4Uvcnn+gtMVb3Goy6P2w36Jr3J2\n6ibbjBpZHhYmoeY4WGkKcSG4y4OFhhrPiEGCeUYlF7EseFoSGTZoi6Nt3Ye5\n9xkLbhwkppJ0qGCqWRB2DK7GWzD18k5FlCHz8WbG7WSTpf7ROkqSpP3cqnj0\nEp5daFkHYTDy6NbM7RTvF1kDHghJV25uuqGzvxvo827CbCsbGYxndjymRIXL\nYd5TiAtoGieKlzZRcQbCObdUKHYoAVQuhi/ETInmLa73h1DqM8OYI8EVGXg1\n4IbsRyrPly7l3FU+ZpR77k1tt1hRK17a39xGgFs2JgtOGtLVRCc4OlhFdeXf\nTB5n+cdE91jyfCFAPlxagRA0Wms8rFkTXkSQUTeycfN6WxJcL2OWpBo7e3RL\n6ILBixu1NWRU/hsiiKBrhD5LiRnxu8P80IJmOAO1kCsF21Hx0vBB73ZHJ80R\nXyF1lZObBeDUCn5eZ5uCF8eXGCDV3Af71lRls9ONrxLgI4DKigCc8/Tnhqhc\nCKc4B/ntlxV6OcfZvrhtIhX2oPaj0O2j33h65UAVWHHan3jE3VpLe6OydIeg\n0oWpRi9Rqwbjuwr9FFHGw1voTC7A4GqDcE3yHi3Dlg2EgrV5lptwC8r8UL+o\nLC9j\r\n=Cw4y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT9xtZtzQEQzObymCwD4kWTkbzP4arZUwY82cVstOVdwIgJ8iXHcjONG2BYJ7ASHAO6tkD3oJ0XYJGzbmg99hBXBg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2276-beta_1528123168154_0.5920280425559041"},"_hasShrinkwrap":false},"4.9.2277":{"name":"meetup-web-components","version":"4.9.2277","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0ed2c0394b1138eb8c61987c09080e5ef07cc672","_id":"meetup-web-components@4.9.2277","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AWivhn6AvXLUXlS9rHzaGwjqhcHCGmbvB03CZJfUlLqv5zXIe164fI0wFYUUv2rl6kZz+h0ixVt2juPtGSpcYA==","shasum":"2d2aea013854f510132ecd172d4d531cdd7c7275","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2277.tgz","fileCount":513,"unpackedSize":6146621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFVGkCRA9TVsSAnZWagAAfpoP/0v8T6UyVuVIASiTdgJU\nhhlahpr3WKA4bRY0xRzj8Z4Xn1zV0WQ3rQlFto98ua3hHoESc7vkac0tcD5S\nnY1FLECdytuC2qWHUMHYGNP6UE45kgLYlQkFivfwcyV9iG1RYVg47VpvsU3X\nLh0FQUybzeLCvC4fEs3UZBCeVpImNVSQfoe6eOyphuEIUzSijsQVSox7DyIc\nLd4PWnIKg/sj0BtfG+WyClkL+ctu2H8euV+O2QncVH4OlFBTzGlnla7HCkmB\nxXX/mli96mZVYq18Q1aZCm+Y0J/mKG1cZX9etCL2LPIeDxUQ4hqVYx10ZOy2\nU2O3HMKJI3qWCM/H/lXrWVz/8GF5nfjGHb96pBWhu2G+90VgHCfXvCyEGT40\naSoTKBhflQA2X85YD2oq4xxEmF6KHc9nLGAi4Oz/QFzB4Fu+l1wCtTw+u8v0\nha/PICS7edBe7PaU3fnDspJIStg5ncv6td+iqJrOXlELiw3BB78PKEXw0vh3\nJyUpIocFooj173VPRkXxRCoRN3BdXm6QvzXFrrMlz7LGQ+ea0YfahldsKTtF\n3CNHmBdiv5tKTD6RHIwd+E/mxEqQXgIKxhgIMrNh+UGLkSdrPIj8GiXX285I\nLwUWRKQE1r3u+zS08JVSr7aOvXEOQkiY1NlwNrsKkQF4M2yApY3GpPpTzt3g\nBgTt\r\n=ZeBA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgGtCkyJpWu4jVekVAiH1Ijrv+mdzuGmwKA3YNnnCBlAiEA+chEQPBHfzg7V50/Hcn+1Dm5DLeEtfPd1ntjOkIyEGI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2277_1528123812148_0.2837058283088254"},"_hasShrinkwrap":false},"4.10.2278-beta":{"name":"meetup-web-components","version":"4.10.2278-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"52a608fb99e9c470c407274e1a7f11d415356d7c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2278-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zJHieXoranMnU4GTkzXPXFvRFGzuKezL+KSQCQjVynIqhxa1i5TA77H7HQtWfp96YQNpy1zToelQkjCWwwc7fQ==","shasum":"1aee0d33cdbabd583128b4d815b64079b9bee07c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2278-beta.tgz","fileCount":513,"unpackedSize":6133896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFZTuCRA9TVsSAnZWagAAFyQP/3ACBvInrWpkjj9dWAW9\nq8+fseKUH1hXmjc4e33IvRIqN6W4Ekwzqz/55OVQZ239G+ZY8ZVOyoLZ96hQ\ngsVaLzZwdry/NEXqdcHz1WauuKo+sdPwyIoBgnejj0Ec+Y7ToyQqmxPFJBBp\neF60FiJJh2e1z2JOJYqQGXwfYO4qkK/tQZOE8hD8MH5Ce+ZdHqH8hotjJvw8\nim4oqBWAT0ACwWgBiNbXSKvuEclnVdmhFzE2fjxh1nzRU+K/9fH7g/j3f4h6\nJFx6PRpQ6hT6HNPL2yNmO9D2T1/y8RR5zNfX9+4clMpO61JwJcAzLqNU0O7I\nCJs2PfvMuIORJUSBe4zMx5C5r5t5Z2R4ETtKhcuhZGaV3iogqDH9cWCFVMuH\nRLl5dB4AnXKDiEEccleuS8JymSsLk7GR/2xTZ2jRz6nqI6fHgr4OtqORwlDM\n/3ZUWWDOnr4bJu3kVRorBr7bHk9AgbJAcRRLq2Uw8d02C0Wt1bzj1dF6WK9F\noBsaYyj9cOUZT0PEyaOodtHcuRSJSx3yzbZ8FXpl04cuAkyUe0Ea6J+cJPmX\n7iEImmQnxNnOfOqUJf5IqyOnWP+EuHoQT4ciXTk6yn1ZD4/mWNWTiDEf7xxx\ntGr4nlxfU1qMWEUSPhl+wU+ONuKVD6538ve1T91AopP5l3p3k7yazQ/bjjSy\nWSsd\r\n=aMYg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjiLY6gboeCBgQzexKE7nF0sxc4sc7piZ9hCbz7v0vSAIhAPA0MXts8bZX22SjIiP58af03fPoGYZ0TNcMHiHusStK"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2278-beta_1528141037611_0.3246169795056357"},"_hasShrinkwrap":false},"4.9.2279-beta":{"name":"meetup-web-components","version":"4.9.2279-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2418","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"df25e49b42d32d09cf1c25821d3fd81a4f670fc4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.9.2279-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LtGUdlvk4FF6PMCdtSoZ6W8881qhSkXtUkcFxwLTCLdR+Pqx3Tp0Y3ofPUI8wUOMphZ97lPbGnouej7hZXezTA==","shasum":"87e83c5245c6527bcd50653db07759871482130b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.9.2279-beta.tgz","fileCount":513,"unpackedSize":6149496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFZXSCRA9TVsSAnZWagAAmZEQAJYQRyPgzOQtnYHUg58r\ndjySGg0+GGkiV4C9+nTrL9lzKANwaGn031oKuc2aqrqhYnLXlQ4eO+mew+C6\nataOaLGmZGnzWrnaUkjRf50k36WCzz+AQDdpTzEoBheadqULtiNzutzAOdsI\nOLkPm5/TKeTxaBbamqz+a+GO5gqmcNH0jLqcI+cwEy0pEsaOT5dVrQfcYSOx\nUGmyYZOXE4S88LMixzFVqFAP/d9qpyt3mPlE0ftYp/sqje1zno5/SYZfF3es\nEmsVpSpOH7xELTKacUSX49o4RYxoUPfnDRtjGWurjmAEzV1VP71mmY7I/un7\nD2nVYutAW+1SfN5FvTlUrqNb6SvNwckv9ODdJUeMM7oH69kwDqlPl9NQpY86\nAq2Qo6zXztJCK6NePMtLNy8pPGFxRZYQkzo3c4lC6g/FbmfU+S87jSUqgojQ\njeuVCB/oOwrTeq9AD76yg/l9qb7EAvu2RWTstQ9785w5yohhA2TtkV3WfJ1X\nXBYcydcKS5wO/QRoao6c6sHhiI+NdJoxlTCjb59eFMsru5hEuVgykley8OJd\nqNTDxK4Ru3XiMuHlNF6KBIoc72+dMsQAxI6n77IQzSVd2ibKAZfd/oTL3dWD\ntOjw/z5XGfDqbuAw3HBojQvn3OtjmKrI2V1zZ2C92aMvFBkgTwCaSdx17YAS\nisl5\r\n=w2N6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwrHi1iReoymhLWrOQgRpVgho3rIpbtEejcCEpHnRlEQIhAMl78ENg5oUaWzJdchUitL4Omw/OftqqklJUFEAQxRzH"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.9.2279-beta_1528141265781_0.43295588086395353"},"_hasShrinkwrap":false},"4.10.2280-beta":{"name":"meetup-web-components","version":"4.10.2280-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0b8aa0519a1e3b62d446c0eaebd90c3093a6d786","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2280-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VuYW1K5OXixGyPGfSq0UvYFqTGFwLM6qss8uatpppI2N162yLdbCgC5SvPv8q9+HRKx4k5txwWgzqHqlSk2fGw==","shasum":"70747075d3fc5b00859941b9d011377201078274","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2280-beta.tgz","fileCount":513,"unpackedSize":6133896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFZbVCRA9TVsSAnZWagAAYwYQAIpaqr/XV22Ob83MyM3a\n1NQISGe8L7B7YTEu4JAke5CEmkQksWnfiAeT7+d7n4sPAvGpJlIt29AR7ADU\nCkWLi7sagnWWpJJ9AKXysph01QbFf9Svo4oXusZguvnzM9AfIc+JgZH0qn0u\ns+60qvT6sBgVO/FmnTjV3RV0m2XKcJXbJf1qsnmFNawEvug028DEK1+wMZCb\n/oWN6nn+n4e7OpfeI0DsbMDR/v/P3Gdi6TjpKj43WLZB24s+eZc7stkve2tQ\n6t3CzV6jt88pYNyrs9fWAQhonhYheG3rLZqJa5eJsWQdsPhzZ8drOn2Y2BXh\nynQcKfOgw4BzuyCipOQnba78T3hg4rI0OeWxjEDg0gxpQ+xJS+VS42J8ZZc4\nGy54urhQggPDQD3sYaFqNX5gLCiV6Gb6NiQiz1zn4xjL+u06gyVDLXtg7ob9\nBcCWWdWfY9WZgoNRhRvwbehzQMLh7m5VPdeCHllcMfqjcMgU7bdtwRQeZHAO\nJn6Z6Z0jc1Ao6JxrBXC5aXFY3X2D2H3Vbmiq3XYz3M5W0yM9q04T7rn2U5CM\nCSrsqi1Du/FcETEhEfnKj3cDZXT6Yew/Tb3N4V+0ZQdyz1X9fA48bDAwAYGO\nU7/rXHiVKKAM2nwYBFR0Gn13xuiOiUG//mFRYRrAxocdaslWJI6jRnd0hYn+\nLcPd\r\n=I02Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAsggb1jKlgUa4GMFYqOPPQ8SjbuDshzj0jkl9xhMWeyAiEA7kOlSiFHJBP8xy9Svf4PscLMVO3OfDd2wgrsCfuVTWM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2280-beta_1528141524425_0.5416345064311485"},"_hasShrinkwrap":false},"4.10.2282-beta":{"name":"meetup-web-components","version":"4.10.2282-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"0fe46d8a3e423b3b1fa583118e6c4b40e87b8c78","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2282-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4ksChxL0TbgwI9ZES5h1lwPjcz4S2R80mkehWj7gwz5oqb6Bl3JCcUjnqFkbKPBkV7cQs/woW/7bv4JOhrMKBA==","shasum":"c3be09aa15c316772a2f0b6112736032970f3439","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2282-beta.tgz","fileCount":514,"unpackedSize":6131396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFawvCRA9TVsSAnZWagAAYkAP/3Qd7NPVUNcffaRz7gPo\nPB4XP7XpNK9i1LoJWaAptVwdcudd2DU9iuvWMxZFBTwGF9by51JuyHWOB1bi\ngpxWvCpKlZVPwdJqgUxfc+C8oS3Iim/c6mMERQo+5nHZWhbTRQXFed8RhOQw\nwsqprWnP4YczWKYkh2TeDVF6r+zmOoM40izjHSlGMSXTzob8CblF+hw+Wegb\na1rl3hOUiK8zToYfniAIWe/7Pe7J5K4Ju015iMXSdEcoUfQ8uGHowOAvIQ4v\nxwiW2Wol445HuLqx1V+bPhE5T077gkYtre6RJUnLmoU3Ec3z2LE4/dv12FS8\n1BO0k1oOdOnWE7DlXecJeu3WKs9+rX3ByoZTEhvJCRvvW3h+i6i/Kx/NPXZ7\n4IUEikCMx7x4ZreF5NtisciaRXJpDBDxQmL+oForPwVtaqPq/v5f2S2DKE3g\nXgH0mVh1vFIdnC5FKpudhqol7EIVQg1AeGaXLx4NFJ7DROgWpJ+GP2AOGT68\nYR97V6rocL7wREeYCW+xTiE2bl/hwYx1coV4YcHEJrQPa1QmWE7CQ0aygPmP\nNK9bDrYue3sYbZk3DivsoMV+wBj4bXXHCUoimogI7hORYdhw9N+vg3kN234G\nS2dC2deL+h2bn/QhY7zwiTjozzs9dUI5MkgYCBB23Mooyc5NOBhldULwiSYX\nIFJs\r\n=SxDT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCednCHgU9cPojq7VVRcMbpUTCcrRLn3U8zs4IP3nmRlwIffNBxJN38cuF8suA+8AZwKOaZWsO8qPncTUjkOd67RQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2282-beta_1528146991497_0.8461828801124909"},"_hasShrinkwrap":false},"4.10.2283":{"name":"meetup-web-components","version":"4.10.2283","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6c3788dfa6b736df78bf3147cc7b6f4f83ffa834","_id":"meetup-web-components@4.10.2283","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ywyW6ZXM4BFNFZ5FhEXbT7UHE5qFEBtVnxHGekWwlFmgYlGW0LttjPeeZza/KIewcASPtx/CGUij4YfWnhh3qA==","shasum":"df5cb80ccdf7912784b7b12dc0354bb2279a67d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2283.tgz","fileCount":514,"unpackedSize":6131391,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFbPdCRA9TVsSAnZWagAAW6MQAJiKGar0dBulCiKq4GoS\nkJs/YMdZsgVbGyF3tqeTPK1xzBMjj3peNk08J8wGRbDWsCVy/+4bTzTRtj5d\nBXWswZ0fIy6+ZM+guamEVep+VkpHvquyCwm1jfn+beKNDusDYYcokQgzsS/f\nHIBtCwz+MWAUAeWJELtABFgkgzKri0y5ro4LDN1Pr2Qens38/50Tv/EbIjs1\nKwG+JjAKsTIR0CKe8ciRUuttQ5l/kOFHp8PAs9vowtlSwbyUcAPE1IiBg/XW\nmMPiYyxr77pthap7oAbNqbUa47BZoBlKyHIUXziCUvtF6oFl+XtKOSJ4Xcsl\n6UfrESvfYojhdMFzX1U1PhwLDhQ4b2TRLQRdCzGM9mxQqO7/l/EPv2bvPPHr\nBFnySiC7Nv+BB1SjwBiDs/WcD7N+HwK3807PYr6COEpP5NRpN7Z748lUqdJp\nwUdNy4QiFN7VTXSgdhss03/1+aOFoM53BE142MpPgj0rypEGl0rpgrWzd39H\ne3o35v3LU1TBah0EiZ6Z9p6MlxVby23T2tr01gNsT0VUUosZJ1tlgEC+7/wr\n1ylw6HawQLARp5X+6f1/AXuG+2RJy/hKAnak0yQHg6YW7L0/0aIkWogy/ige\nQvcqt+8K/1c2+3TZeospvPfYb6fhvA9kERQQk08FvO/Za4aRYh455rmsdbUh\nrUZd\r\n=mRon\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDilOUmk3ZKo97uCRhR2IHAaSEPmX/ViZcZQToDAzFnkAiANA/hYLvnQpCyu6TiobbU+37m0uflEqMs7ncQzRbceDg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2283_1528148957104_0.8347106934829116"},"_hasShrinkwrap":false},"4.10.2285-beta":{"name":"meetup-web-components","version":"4.10.2285-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"6b93e745a90ff0d6caf02c227bea8d34c1e492ce","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2285-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6MmxSXz5Zmjs8brx2DhB48k4aXkURWfkPzdfT9ZOoMG8CGScBDPR9tSgL6//zgJm6SuWJM1MAPYHBTmtIqSBJQ==","shasum":"2f8df1439f48b082ca86c4c09331dbe1fba2de54","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2285-beta.tgz","fileCount":514,"unpackedSize":6134054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFqBhCRA9TVsSAnZWagAAXAMQAJZCQoNxbzp9chJHBh4X\nwyae+YYcvGFrkrdkMSQZBKjVT0itgEtlYYn9PjbHpHdHbchFUBdz3dKDvsA0\neTJQeYq/igBKAXJ3hzqQaqRKcy5EJL6oaR09VAxyglO5s/1UshZK9iEXAdQI\nSKlqGlWv9oNWb2aHbZ1PwfrfYR1igBLNcUpsC9DWnVXFoRhw2ezmNdY+Dq1l\n8cDbx22GenCbu4S+EXP4lnRClkgUuNzQd4RGfuWEusmw8By1WUOLcOVe2zU7\nv4oYUKg5Jdwd1I2pShvkrcSf34eyKVaP2a2NlKJ0OGUWwHF4J0+hFF1B95sd\nZNk35H2+zC2YmUxc2rAVw7iAsBHW1PkTI4pRWN6T2wvhWAOOyCfnv8tUNwNd\n3DRbC/Gwq9g9GOai5REVD5Xr9Y3nc714/9I/nzc3PajpARu4BnRjIUcLEoaf\nmr4KC3cND3/gqM6hmH8qda0okcXXxFKYD38BDog5zUOSfHw6llRdJQjPrjjp\ng5b7tp/8n0bh1b0UP0dPBT9C53tYRkH0YQfsape9vDqMUgn2QhlocKILsjGp\nBmZA6WYGQmYyLVFoFYEI9mBV+AjVF3+Piu4HqFCbkaxZGVZEm7all9C8dW87\n47xPmJXmOGeLzg/Ab3WQe34GoDn7vQDgv0l3fMGPUlhLJZsH+DkavDOY15jK\nhbKq\r\n=89OS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCT3p10DN8HoeEK/VXQjbzPrmjieK34aCFzaM1Jv0Ul9wIhAPT9T9EWyo9RfgR59XqEvvCLIIkT5/1bd3+OCitg3HTr"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2285-beta_1528209504575_0.48676727568538825"},"_hasShrinkwrap":false},"4.10.2286":{"name":"meetup-web-components","version":"4.10.2286","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"**/*.{js,jsx}":["eslint"]},"gitHead":"024b6ce8e01736747575bfea25f0e47e5b72073d","_id":"meetup-web-components@4.10.2286","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AOiZbmAyh+lwnz2m8YfEJflZD6ojfpXnpKwnPbPDhV1U6uJEP2b3E2kzxNVdcD7fP4YPt4tMpmGdUa8Ar3atoQ==","shasum":"2d94e31fde9a90962ede8f60173b6a5940c1c381","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2286.tgz","fileCount":514,"unpackedSize":6134049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFqPUCRA9TVsSAnZWagAAKOoP/2V3sEw8XhoaTEIBitrI\naGaEoVKK5BKn4fI2Rf2NYnDueLe+ezqBXDweebRLm/9A2fg/HCtnARzT1fmL\nyk6lKZr9HCYa+UPajJzC/7ZCOb2Cho7L7RGuin0MJcnfQ02E+08+CcE3PgTs\nxl65l3iY1yO14ZwYK4Cv5zLBleobm/0+4ZfYhlaXFT8l2qm1d2ZRch5zBoTf\njM20/BJpx36oXbb6Z+9JXcv7ba+leB9uMvot+SWIbpi2ktBE1MUI9oYRQXHz\nd4ViNvDa0Kho+ku8YrRpxfJSQbBY+tO8lRkE0tnBLECqr57ZcQqJAfApVnc+\nVEq8UeCoHxKXJWJ03z2bdXtcy7QgWE5u9+kuabycC7U4xzNB7uEl3gG/GY2U\nPgQRUKKfRmUS9VlyT2ZTtoKJwy34IsysoqAPK3bialKTkdrJVD1E0HtlEoP1\nOe68GhBlEZkOpAqNBcCvKUGg+ipGgiLNKqEkNGkoxvUMLnpnw+gNVbwdkrf4\nStwDAAZj7qtsGExiqxGM1vlkXchIY6xJSV3RoH7kRg+AJB4skYnFHh1xAWmD\npexU3NFp2iNM1l7Dk3tlC4+lgrrkupzSRHn1VP4OE6YhywQvUa9z10SB2M8U\nveBozyC2kCwCIBvYG7IpwXQZBVeWjtyGko4rL1wnKvkIkWwI2EH67vhZETuv\nsoVo\r\n=pV9L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF48OQQA+p8Rc2nnqwqx5ZGJy5Q7dKXXI1yDrSqJQaApAiAc6XawwDmda2YdInmRwbi60sjMRax0ciKGbvgFiTf3dA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2286_1528210388245_0.09570983344887951"},"_hasShrinkwrap":false},"4.10.2287-beta":{"name":"meetup-web-components","version":"4.10.2287-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9215bd7c0e43f36382b36e7f4dd19e49bf161523","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2287-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cYdgHadrJH5hI1mpQ13f2CQsyYVR0XrxU7KQ4NUmbbOJlG7dMUCGeAQj1poVcX6iw0XFQXmQa5KJdPCz0Tz60A==","shasum":"3d1e428d8951c38bb833dad32297fd1c9f9024d7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2287-beta.tgz","fileCount":514,"unpackedSize":6134228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFqb5CRA9TVsSAnZWagAAQwMQAJLKX6NQHmqqe/a+jBju\nfWtKT5/Ak/0npWrPlTEE7CuXjIinz9+pqxRRqLmsMUZr33vwKDlThkvYl4rB\nlYDkS3FUiCyVF3KyDlIMDl0+yv+O8rG5j1DFaAxEbgR5xGyPwmBSe5KLJnEn\nw0jI5GK/o+LjNmz98BfJ9z38sxebliNzx5WbdqHeVNguyq06W7+VKKVgcQ9k\nMT/l/sGp4DCiKkQQCcKAoHZ5GlpK5ueeJHJAiHM48AlCxPoxGzn0E15JZy4b\nBHeOYjoRZihWmDx6cgQOdmcHT/M166Rjrw0mCGlnzjqLkZAr5ymMPlI5oRAm\nrsv04+pdyz5jzWDO7DdKBnezSqJzBm4co24NmAo08NvUULyu883SBf5OsO34\nnSsPqFygTTCljPlSao8oZsApKF9wXOKUGwl5n1ixXdqgJ3qXGWLjIaRlXke7\nsDETkaZUhGc5DatuQzZfMci8fv7f05elToJ6i36KM1e/nmQornsqOnfTPqZO\nmyA6K+zNfCsKk4Pv9oXpf6LSeSrFZAyLt0RlrxXMsa2hiHLxh/5QfIxYzSnk\nPeFN0C1qvDDnTkEnwV9T0b0RSMuslwOK5xYOcjcUnBl2q66rWCXaOsC5d1zU\n3jOhwYLHor90yXkKDCcvwaQLovaoFVZCSTLZ3omcq8wb4cR/Lcut6JF03tPG\nz/EW\r\n=RsSo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzUA632oP1B68ZvKIf1TdVAAbuYZhS31fyf7Y+0XttaAiAA2nKZcIdtVkk8v9euE8dubEC16m0MNpUW0ZMpB1nE1A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2287-beta_1528211192319_0.019475968728265958"},"_hasShrinkwrap":false},"4.10.2288":{"name":"meetup-web-components","version":"4.10.2288","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e82026daf41640c5d860de407d580a88fc53e970","_id":"meetup-web-components@4.10.2288","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-//6x4MSkfg7wde90xknmfAepcoEKrv+GWxkcdZvJaz3Uvp1SduD5VQEH9EPEFhjpQ7fU0gJ1NQtFlsnxKU5Y7Q==","shasum":"d2a6a161d6033eb16f89c9d5141d865520c85b10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2288.tgz","fileCount":514,"unpackedSize":6134223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFs4ECRA9TVsSAnZWagAAIDcP/2RyCw1/Z8fEiHUs0ZQP\nu4gAOhhIDhdiD/MDph5lG+PWMaWlCxkIByWO5qQMACJw050h5+UpdGq4TyKu\ntiSo4rOjMfcgwl4+SwfzkHGm0pBspMl47NRuyGpS/zHjgMb2kgTh5SMre7eZ\nstI39UxEe3uQ/+yrRIz18PuLVJyWtUxv6e2wrE8l9mHCyZJivEc0Swe6Jmkx\n/6y6dMfWEqCoQ4Mb/81cYdFnAOdJFcAsZX54ExdufnOPMSxWy/fzJWtQez1y\nBLeu7cxViw4zF92gVN/7pgsLKJM1KAVGF7n/6sg9dNpEvDS8ZuNcKXsS7bKo\nryQA83SZWEDSsNxQ7E2JN3OHtNs9v/8aa+v864yw1PFpbTUbzby4xdDFmNvP\n61mpjV0kYtH8pyYzbhk8e+iHhEY2uH/+5TK0/Zfr4d+Id5NnMX9TnO4523hu\nNK43a5A9jk8eBFlu43rczuzXV5WFjepoy+nja+3fhNdm4Jq5t/+mJNH8R8qo\nJaaCIwWgNmeGjx7bo/vHjb3m0+9T5YMT28ZfxNGyq5CrChMom+fUma21JRBU\nLJpN2XAnCrJI5xjCd7UwsaDlam5NqF+KpqnXAeTD898+7BTFLyrz+CQERWvE\nDlkRKG97bF+kkSQp828KV0yfJ6daB/WzW69TmdDv2c0/XxWV2ZmLieb5ICCO\nsEO8\r\n=Fr+r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDM2/5iy1VmpzNKtt7tGKYLd35zuNefXQ7peEm3f+j5iAIhAIAuI6a22xSb/lPzlktN4wRlMUHzDxtyN8JK4PV60B79"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2288_1528221188159_0.879965702966405"},"_hasShrinkwrap":false},"4.10.2289-beta":{"name":"meetup-web-components","version":"4.10.2289-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1e17e168740c42e8d7525838126024dd6170a383","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2289-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-E75JAETx1SgZiKn0a47EGsvDagL1QXT/8F5dgRzRdZJLLVUL8nkGHisoTTX4KZfIUXYlcGMssEPJidX7yAv7YQ==","shasum":"26ead03f52e89909edccaec3ce3b538b91cb04e0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2289-beta.tgz","fileCount":514,"unpackedSize":6137239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGWpGCRA9TVsSAnZWagAAEVUP/2+Aop4psABUYy4Aj2dK\nUOLKfXjZbr7SuvSnkM8HFVxx3UFObqOo7/jXhVPnb7HxgKyZMgxaNbH8CeDE\nJtX8gDjsBqL8Y3qlCm7DKUFdi1gh+B/k/GQfgW3LzbYh38a9YbHHYW0YSlJ6\nBFBTqhJoPK/o41b1fiitfwo56+x24aGslK1P6Swj2dJ5m1ekWMwFVljAH1Qn\ngNefxuoYHZUu6E4zDcW45D8IoHuP1giYO2f+B1K0133OqLEduWSIR7tv60SW\nRa5IraWEzWciEbXJ3ixDE0QBMY045Lodzh5YIdf8RNqz84qwuTTvCZLnV0E7\nDGsIzSaW4ZLBcEldDNmztmXvHkyOLyYZwSeKWakAIV3KJcaReThAN0K0ymX2\n5+5HktjSHWDenJhfS2aicoO7kcJ5L7MwkM47gQcKukaY5zlo4SJiGYLEqnfr\nKL8g+VQyNb8wjWLXpXBoKxOy15D8BMmNqlPINM71d4p8zWwMBiulGNUfD4xG\nqqkwRF4O0hqgjjvt+ttBTZpcD4vyhbtFwJiKMNV/68j4qNtmKZHs9hPaoWrx\nw4G9IgM7SAPHHOOzyh+6x2E6OMCud94L3CfIJS6P5DgBcvQaoVSN/4deLuLM\nfZHIxpkqusqCmauIzzuXyGEjFLB+O9wC5YFczrz7efHJ5KUoaOPhni+E23lF\nX05W\r\n=0TGO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAa/hmqo65TWkvTT15ZpzH9FGDbjeZ+M1gF0yHx5m/jQAiEAoU0LMq+SliS7TckITd/9UHu9mvieVDvkLvIsS8QHV7g="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2289-beta_1528392261826_0.3123463962608475"},"_hasShrinkwrap":false},"4.10.2290-beta":{"name":"meetup-web-components","version":"4.10.2290-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"53467b71be2aaa20f000e95c972a1fcee07bfe56","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2290-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Cwtjlp6EUWlapNDu+G7LT+V1XnkctlcUcpRC4Ol1CIPvMtqJBMkOt/kpU4GY0gaM4Ah6uQv4QN384h7TpN48gA==","shasum":"9afad299f48a8345c3b2f6b289e01a8da0f53d9a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2290-beta.tgz","fileCount":514,"unpackedSize":6137246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGZYVCRA9TVsSAnZWagAAo80P/1D8GyB6gIoac6l2RILT\nLKTG3Qpx4b7rm0zpXgGiu/w93tRGEMoIQx8tSFK7+TghNGyf8uUfiw0co4XP\neJL6Bz1rOni/16nkRKkg/3SIQOXYI9ZOQsldw1kB6OExqNDJA7WQpwMfd4ww\nBWb85oBv/b5vvarV58qkJAmjqDmYXh0t4+S4cwquDgdDZLaCwr7hWP8owo5/\nqDY0yO622E56WT/prE/RpO14kiDCK8goX62bKobylriWjV+YRJttPTdou2/k\nTOxknSx+p705PTgf1uHU0dGnIgXH7dypGucJCDA6QCxodc5ZRZpsSnvvemHQ\n0vRgDYb0CXG7VMTmGleyQ8HCy4pMuNQ42CZos9HeVMATwfTxkGnpHph7DQZ9\nPqAgWZiBh13Jj+S0Om80wjuPGn6xn5pJHVbfLm9E828J08268rhqSt3JatDX\nuKJj2Pfp80AkdG5lfkenJvWA4jQjF+zouN7sQjaRlGDKaE6m5F0TnFripyzU\nGJqgL2+Jq7nwS29eLfOw5F35GHiX/FJBhuIUmXHXPOaTpRQ5TBAAPsinEUj7\nUN6CSgy3E0FmAV65hKg9uhplz2cjWCCFMoZojrmiZJE1pSw1OJ6Q96F+7c5f\nHxpTQXvcu6L+MFp4fwZ0IgradPP7SLIUCnQCMsYmmHhkboVQX8sDDTh+peii\nThmK\r\n=tWRU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmrP7XunKrLQ/te662FtscrZ7G3onkOlPuU0RYMw1l5AiEAnN7ltnXbIfx5D43gsfqkWCV+H4Sm/+9ZUN7cqKAHERs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2290-beta_1528403477408_0.06385204732326377"},"_hasShrinkwrap":false},"4.10.2291":{"name":"meetup-web-components","version":"4.10.2291","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"f5ed4681a9a51e2e9ab99be0728f7883904e63c9","_id":"meetup-web-components@4.10.2291","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JW1AZXR0Sa4RUPRy136Icks1cBHRvM2gDTprHnfTHrX/Z/lCcitUI0DPh+PRgkHiLbRa7lToFyI7LAcH9cCMxg==","shasum":"1f11b68b6026f9888ceeaf494044f098296237c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2291.tgz","fileCount":514,"unpackedSize":6134219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGpwZCRA9TVsSAnZWagAA0F8P/AvxNnR2LsAeUfRe1zEf\n4kliCpyMLyCykNraeqezuwnAbjvvRjgA47daCo5eGxRsn30rz+6+WNt9kIZm\nc1OXm5UL1mSwt7HAeV5/Z66O9apl6dFd6s+oFS0iLfjR+rjXP7uHvzpzxMMF\nYBXPTKJ0ALdvgOZI+kbx0sfXRT2PgX4uHz+NPWP+JJQfItxHkekKnjFQjmjR\nb1Y4310gjrSo6p36Cjz4Zc6XZs3lK0leMGZGqG8GvWwKBx5ZmgMh8BRS7mYR\n/aIytrOO2jawjPyizkrEIkFTyEdImAWxlOWUAHqhxsjrnKFm2B1QPZOsRLgO\nkvl0Cp3zV4rFcBANxLCGXpDxOLnQRh7FFvNb6hTUhyZyFLN7JlIX5dCoqWe8\nmeGLg7Jjen2j4cY4TzugfBHZt07/jLmW2HWq4GZBN2q0+zIjO+rgQaFmnWR0\n8pYBfr9fN8ExCMx/xmh/w9wDoRmT0bSQUr2K68nKuLqs5T9ukct0MTV8/LOw\nJEab4EQTu/hp3jKpisIQ64x1yFit/4oSCfJ3JxZ2sr2pGLeaJfjl2u1UJZRv\n7krHVpyWQPTO6frDfmOvrO3MNe/20NndK4IFoGcnAix6S/dDeiRLb4ukWtgk\nAa4JgQrBhTamAqlHBnaQZHsTOjgkLzQ72zfcVo7OSO5con3hQkUOqNSKaAL8\nhH4D\r\n=OfYI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICYg2qA+GY1FgomMH/XiK71M7BJekI2hOz6W59NEXoBfAiAZ13KMMeSQA/qhaNAmoQZVQbuuvAMD5siv1HUD8kqihw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2291_1528470552927_0.4755210448432732"},"_hasShrinkwrap":false},"4.10.2292-beta":{"name":"meetup-web-components","version":"4.10.2292-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"dc4e073d235dce580121a5bf8d3b3cc316d054d8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2292-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JeqUnDajqKWSpI64ZMJFOcdh29vX+f3hmQSMmLiKA9XbVrr1XcDOFXFWB8XH3Ze5FAuiNDYX2WthHTOWdJIDsg==","shasum":"8c136d8313661c4d6714b8656f51069cb070206a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2292-beta.tgz","fileCount":514,"unpackedSize":6137004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHxtHCRA9TVsSAnZWagAAPmYP/2M/CL5KhbsO/X3ncx7Z\nBYVm7A7j4Z8U3JJMkE9lucBQbpPROROk7kfB6FWcRWHYWfW3r7/tFjT02DA0\noZxcx5b48nfpPSbBBLzu0dBmqKPrfTnbwar+g/Tg3Jaz5E8cpPgtKBerBzNH\n9yzu389sMC+RH8hjmABAilGvnwhUNdskBFGhRiX/5dHl8Yn+ykMok4p+FdKJ\n4sO/dU6paGMXQGFqES44GPOGxeWk02HhiuiGWUqrnW54IdvOQifaWvC/3/oh\n0JCMbqeEyf8/4pQ7d3OVn3sN8mPURY9BWP7Lme8/nQylTLC52w0hyfZmKBko\no5opGcTaEhL+/NNbEH+vz/47+6IllNhW0AS5/kllpxORaJRrxJ0saRwiKrtm\n23SDiLlPKReEpiMospO+T7s/lvQzmIRxpWeHfjKQUB2OqfQ/OC8FGukZopTQ\nxjNrtRmdmR6STyd/iQ5idT4qJDtGObeNjBHqQ00DN8lYAM+m+bOdUbfdCwHB\nP1MJDUIyNDuO+pQg6Vg5+yC1tkoHVzVB0lGCCI2N4i3fGGslvg7sMhq7Dsol\n5X5tM6rtb+OLteTBIlKcQ3LBwA3nTOYDfa2sgYS/J2GiMBRkZLze4SDDjyU6\nhejVqPshTpbAFg1ab8+/Hs32KpiqCbFTV7apJza5ojeaEwU96f4Nnzsu7F4C\n5Og7\r\n=9iIy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICp7wuVwpJvcqlAahjpWEhJkfsuVm4pbzZ7zQr+nHMkGAiEAgew+sHlvSXSg4m1CHZ4qWj9zGF8BCARY/h6r4hi3P/c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2292-beta_1528765254879_0.6173155820612515"},"_hasShrinkwrap":false},"4.10.2293-beta":{"name":"meetup-web-components","version":"4.10.2293-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7fade9581b9b6b656e8b4ba519dd047a123ac7b8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2293-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gtfH4Maz9vE6WkmcxLRoqph764aQZOmkGTZ6SucTuVBJi8pXk8MLK6EQBnLwF0Hex1SjWHeYdYycEfa5aM9Xww==","shasum":"243fb48cfeaeef86b1c6679ee3b1871def427f6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2293-beta.tgz","fileCount":514,"unpackedSize":6122776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHxuTCRA9TVsSAnZWagAAPCYP/RciGSN0Y8nzKim/EeyA\n8iuGRk+cjieRYdn28PevwKH5XOPAQgLipge7VeCQ6HJULHeX9rV3LqThLjby\nARz5vsaU6qMY6CCODo+R7FkJMdmOR63Wrr5/KCtW3hTvu809bOjX3Js5EOAV\nwAmtafcTrefeun3gD8ilH/eT3Ma0+ESh5jhPCPhqU4W4LqCr4lRWtofIfoHI\nZZmYmdcsqhAQvAoyH/sKpVjGPZvN8hmdrkW+yfRZsH/iUBg2rqOd7XASchGz\nJUxZk5mya226r92+qOJfxQF5hKBjz5SXFdlV2mHt0k+I9KPM54WcRMZas5mn\njgxU+EvHkHWd3/IQHP1iNjbY/qqGel9UtdV4WV9pgPL0BW2dwOgl8d7kyWN7\nQCLhumndmeFNHVfrfr0WsD5ssKdBbaj22+yravRlkg3EDFm9/45ABZy2Dgml\n6TlMIUV2ETOxvNZlCod7OF6+KkflXhd+++pQBtmZ8Wik6dWLYFSwLjx8cuDO\nPe3mveHrwoE2Sevjv4Wk0EbaqczCRpwmV9I5DcY38+MyNQsSPMeWJO+HyM6v\n2e2KGvAhB/RaAGLM50xodbM/sUngluFZJCZ7GtH7w7GMxVVIoK80By8R/BZC\nIH1H0CQMzKtC6td+mcpQkKfhyJ4lXrcwC8m1NaFKb9hnPHg5b/Xz88TZU7+Q\nFT60\r\n=RiFY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEboSR3YMdX/tZ0yGhY1ACs9mybL1TxbEcMXjQoTlOuuAiEA7K1RkY0N+GidBFyKx2hrqU7q8BCRDpamEpEcNXrTi6E="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2293-beta_1528765330702_0.6152389346717511"},"_hasShrinkwrap":false},"4.10.2294":{"name":"meetup-web-components","version":"4.10.2294","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"fdfd6d1fecca9a38c268f235bc0a4e4e1fd5093b","_id":"meetup-web-components@4.10.2294","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fzQab38M3E2gfBUhK+zU20Z6/sTS6LyMch5fA84N2c9bQMCrgBsKtXEwZN9WqhfuoTuW7LHSmLFxmIzZigWTMg==","shasum":"887afd1cf377ce411420cfc5dbc211b725e0296b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2294.tgz","fileCount":514,"unpackedSize":6136999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHyChCRA9TVsSAnZWagAAlWQP/R6GuQKOjF1jPXPvPfpa\n7Tk9qmjPlKDPM1C8e1UEitUzz8+r/nAaVyWZJHDGX6FjwAy0TNO/F+4mhVAu\nU/xA7L89+qMU+XRxFUdN6navTwU8VbPpN2odk065PcFstxZ52hFMZvgTsgaU\n7hnTZppSCkZ+H291ypd9XwQT9V2CChszfrcFwTGvFaEvHiE69CQS/e8Kvc1p\nF8FbBTg6edL+p2URKK/NQciPdk2z0Z2Wg785scz+yBlOZBdgRmtGnDlpPuC+\n1kUPgugnLuETsNoXmZkupnbC4aPEZr1c0E14C/3eXOZF94ho1/xNWmN6v8Yu\nL+3y80aDoX8nFcHOI7XRn1w96REzbHiQphzX3YKR8pRCkwHt64psYy8m0LIP\ny8jT9WceQzNg2bH32Pd2/mURwIAjOkGf/rFDv8Brqg8R+LIWZMUg4uaP0zij\np768AfimCGGHq9gCLXZLrX8GdVuI96aulzcbaO5YzkRzk9h9i/hD27PTIZIE\nblrf6ZG6Qw/X/wmljJP4lC/F5OzpGHYLZOPEKlyIdbCU8sFRimVYG0VmrbBu\nd4aZ4SppM9Ugw3NRNa4OOOmN9TdPM/+k6JDEA6Y+RKOor2FYOL/3O7Il9foq\nY/EMDuB7sWOjgd9jcA+TlO++WGeCkjE5j59eKAK9Of1VLQ4eEX2rw2ySPHtp\n7l2i\r\n=/zrs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZaEZSqN8YnULtyFQff/78N7eVyVuBioxHf9fDtgrtWAiBIx3I8r3yHooMs/Fomx+n+MzXMShNrISlgYMPGtySVNg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2294_1528766624998_0.4894758321553243"},"_hasShrinkwrap":false},"4.10.2295-beta":{"name":"meetup-web-components","version":"4.10.2295-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"12a8ce5591277c2f8346d07346ce23d58acb3800","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2295-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nsIBWwSS0tZyiUg6ikGSXnR3zGLqXPa2tzCYcZXT610xaLmoG3wUOhBtB/vUvaXBRHmr5LSa+NvD8cNHmjC+PQ==","shasum":"ba722b91ed86d2bff046864d3fcaaeb1afe7ac41","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2295-beta.tgz","fileCount":514,"unpackedSize":6141968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIBQSCRA9TVsSAnZWagAAxdEP/2mM9BIjczEAMMw0emxX\napaTW5+hJfLcgW80F4RtRb2jW1Hf1TdUH5QJsDS0kCwZuIQBpjOTrVGp+78u\nyhcH88ydC9NMDumC2t2d3Mtp/Jy2GMJrnvZmlaLH2IehCV5MLbz/Y20wvYil\n7anZQe58RlTW/T57PDn/o730GeXpfVcXxHylQIvAuiuHzX1NTd1KvZ87+Er1\nfw7p/EJkHitENrDTgJDZJSUNgE4hV04HvuyfKpw5M/iL6q/lG4AXLkfFA7oY\nHa3cdZkIxqggQDkxA3aYuu1/lBVcwg/lO+5lt/vsT5K8OMisqH8A8kQ9ZJlj\nOuorhfPFTShpA1wq0PfwP/cTOTZMU1uohT6YyqWCZLLOhxRNUNpkx+kgyJsz\nV21mozrCBKlwTroyYuMPqw1yjLmyLnXK3ve5k/JYjhANhZSCiPI3uCqxwMSc\nQCtqFW6vLqx9xZsY3cspMm1nQkG9xQSsUJjGKZ7oFm493o/2O0Xc2vjqB87/\nAK2SOCf5TsaoOswdhHBPWa6vX9mH8epLjt64nlhCOjadQmUZ/UyP7g3U5uK6\npGXhfyXnMuc/6XSqPYnbtA9JoKm+ZwaGxSsS79PhWNdKGI8w8yNiO21BrpAn\nRW9Yq/8DYp4pzrT2JUBjTO1Lf+tO5yEBkvow/qLJ7KRb+GO0+tTNTgqbSQby\ngfCw\r\n=ws5H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKg9g6Db8if3h/7MfHnTq5eQqREPoIHLFVakgxyTdT7AiBWNcfjMf05QNj4hFJWI/1PaUv4U/BSNb880V7TVBQfEw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2295-beta_1528828945960_0.24837548230721151"},"_hasShrinkwrap":false},"4.10.2296-beta":{"name":"meetup-web-components","version":"4.10.2296-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9bace51e1d42e08a912514eb78dbc93d64ab369c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2296-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-M3KMH0/XyyBUGRups6qSc932NBB7tsaaoTvjAhIRjcwI+gY2sx0U292UEK7D0ezZNghcuWhrPKCuiS3wBcjXwg==","shasum":"fa7a04f631dd1d07bc219f42502c27935ab2318f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2296-beta.tgz","fileCount":514,"unpackedSize":6141979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIBWmCRA9TVsSAnZWagAA0UAP/0rC5MmK57x1/ON5AHH+\nNtmj8wiqCgiywhS8zGKz3asxOC03gx5fmvLV3+ZCvz8PD8ZxsCWZ4XcbsJAc\nVBcbGwE+PzfZQe8yqX6STzzFc6jt+sZ/I5RFPtKCxKf7m08QWCbwC+0K7Lm5\nFzacPkyncNYP0bQUdfmA4/gElJLBXf5d3B2TwgvuC4t1HZHrSAq3vEZcter7\ndEX1SoezSsUySXOVOG8OXu5wQ931ACM4JcINGWZDjwdn0rt/e9xpkjZqLKh1\nhAR2LXSoRIYIzi4j+xJjYHIH9qtAbQ2B/ougShAhbLRsoyOrazKP/Ty2ok7G\nOIoqeGm4rt3zd15CMTw6bMQKBdmc/diMu3qZZcoWJGx9+Y5RlvqlP3kVpWSR\nZmLLwUezhjjtRXeHe45niokmt4697rupn2uTOvOUWH4IVwMXF3Us2GEP3dkO\nUXf6sbkLT+bTIs0s1dj320wCYUc7nB7G6xe/GW65proE9IjI8+cWHZHW9Ss1\nG7lUtA32J0dhMNSxGt5knqbjnHPh3AgJzl3ID9FQfAdpeD99eOk8y+DC4FBC\n6uOyuSpDEfib1/TZNa1yuQbd/dQKfSnnRSL5X1jL+ebdeiTM7UP9Dcy1lo9K\nxGKeJn34MMlLFu4wrLTLgMU+ulBN46DPmAPPHeS9mmFCDFuqqmJYX05dEDBc\nkdZc\r\n=vn/u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6cYNl6TkjWWPmRZPcTZA/TKcjSjJcOK/IgTqNiIFo/AiEA4c0s+KIOkjlHIA6fmzrJS6im4gkUKIdTYyA/xD8Ggkk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2296-beta_1528829350222_0.7256976704189759"},"_hasShrinkwrap":false},"4.10.2297-beta":{"name":"meetup-web-components","version":"4.10.2297-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"0be91c5aaf6c62bd60a8e7afe00f393ba39464bb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2297-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GcMXcz6r3ftCZdFCF9lPoEF6QY4qIFHecg1V8YJINeasTfH2OqZvnfV0bJTpXovDygWg8EU9ykf8ZNN4l0wnww==","shasum":"0841ff3367362c410438c52bb4da46ea0c0be6ca","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2297-beta.tgz","fileCount":514,"unpackedSize":6142164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIT2oCRA9TVsSAnZWagAAxXYP/jJEvsIBUTmOBrnx9XLC\nD4AEW3TIzqev/031wX6qphqVx4U6/pVPESpKhBsu3YSAvRM+o1nJMk6kT+Uy\n+aiPL7PdB/CzlVDtf13Ki5Glbp5CHla/5hFnOLqVLbtwTB9dLALJtXgWcoDm\n+zznOkxLNSd8BMJVez7g4rhZPlzui6auPlDxmxNPoKz8sWby/diN4hZdhXve\nFMzQIs1MUqKV5hR/teRiLk5YkeGwDWAaKduVlynj/+ZgZGzaoxUVhMPY47Iu\npNpErX4XdVyQ/kiFkXiObS5o72MLPCjs90J5JZGeu1Elyb9P83T1BBD6cG/X\nEDp/gQisXjvIG3PECmcpxEHmt6FF4JnQlrL1eVoS+wzlhgwvNJJKhMaaTx/U\nhfxh2j+soWGwfUTJ4iFN2qvU/WXWwC6yNHb8r6B49NsM9hpoKHC+4iT4+RfB\nJ9NLmUrs7fMAr8bRoZEixMTyIdERCYR+lx6uoeSLDcraF5Rre5Jt0FPecD5c\nwW6Wz2+ya4rotKQqtnP2pJ7Y9+9A7r9bdw2DRQiHrG5AmWpuiDFht2wuoopE\nHvSNw52q5QflnwomyQtig/SmaOKhZBN3i0Ke93mIcG6MMwdAA0T1myfAnoNW\nu4iPDEl4qTJ+bFrE/w+Kg0YpQYrsOjNtNYUph6L1jYvLQZuXPnCSeHDOwHBq\n297z\r\n=4VcO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBXTYQQE+T8HePyxX8DzaBm1FDSjVP57fb/V7VJ3PTJXAiBN1H1+n4tlYFd8r0Krq2PK23U8h/k+SA4WwYXZRC13ug=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2297-beta_1528905127804_0.22140204381040718"},"_hasShrinkwrap":false},"4.11.2298-beta":{"name":"meetup-web-components","version":"4.11.2298-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"94012ffb1b0cf9796f196cc68bfe74a260830267","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2298-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DfgrsGY+S/GYB1Ux+wwz2ri4FuB/XY+QHOeoCDnnoO+OBW1WOTkj8+/X/2wyfVvSFcmdyLBo/lbgUVedjjaovw==","shasum":"ab7d4b258e5d6febae7ee01e4f6fc44a5377191a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2298-beta.tgz","fileCount":514,"unpackedSize":6142296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIT/uCRA9TVsSAnZWagAA0M0QAKPcyqQYmy9z99IFcHhL\naRLIeK0o0mfh/y4AyzpV1lTZ1UcgYT+D389XRPTQa0ST1auDzyF19PInSnE7\nFnu9dSZVXBINOUmW232EWPmxihYJWRK8V3WVjCeyoRnUSN2kYkKJ38vlUhV5\nUGYPEukSa9BPuvIwDwe7fB+Ul/9641kvTl4n5cv1Oggm6HqIisLOAkmQgFxb\nk4pEI6Dudccw+ER+hxknAHRIpX+pGlZQM6mC3Mp00pgFbGI3xDFtuKkVoo7t\npU2rqQjZ/fZQ+owaF5YP70lOTiTWmUniXLWXRL0s9rlop5XpXN1nAqkqY0Vl\nli1iRnTnNJEeH3aNOnWs0SK0wlb2AIec5Sh0V8LTDvS5nVdYwhIEZlPnt2KO\nazCWrelXU485lq9jU/vqd3b0jJ8owUU4tYHWyczebvwUR85pB06KHShAXR+N\ngjveHYDIYZn1AcXDANJy5NYpVScGVF7VKXUkVLdw5KHLTUW+Qwb6dpvdi/WO\nasToI76p79szk30BcsfhS4fnkd7Ny5eMC7o+bF3LQA8o7LDnn2kMjkTMBWsL\n68PiEYZwS/AYW2w8GcoRqzRw8kUu2SX/gJo1I4h/PH82hSVdnTygTEfp0I5R\n1sjITs56GC5zxh2iSIv+7rvr0nfdjeOv7TrtsaILerj0IcQsKbSqwfnanTyv\nfalG\r\n=UyAO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNsSRbDc+QJHAbbXmNPpJ0YTrJCm6rmC2U5YOVMNVTnAiAmbUIUXK139YlUWPq2ECDtG6dp2QQpFuKg/nAFbBqQAQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2298-beta_1528905710126_0.5688166286581007"},"_hasShrinkwrap":false},"4.11.2299-beta":{"name":"meetup-web-components","version":"4.11.2299-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9b8e1a2da407fc1ac490598cfa82da5da955564f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2299-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-36wnd+05G9lbeP08j0+SFl16/1ue1BhTqB3xe7PHkWqUE3Wbj9WhGk9SrPuIfdbKBTjqJYV9AtPa/Utw+uEPJg==","shasum":"997906429448537f76b141a9eac500679707aac3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2299-beta.tgz","fileCount":514,"unpackedSize":6142297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIWotCRA9TVsSAnZWagAArw0P/27DHIKlinGrmYncrurV\n5Asi6wwkgbfINQ7Nd4/saLK6PlLwWUoaibj3xjxBwvFlPw3k0j0piKwSUnGk\nYrT7VAkZ1PgpRePX7mbMMf6LNWejW6v0iaMNM43bZgWGO2yaYQzlutFPGWh+\nmuszvFh0PX4fLvG/80wPJtbDtS7hytrYVviXsOrljBmyYcvcsFv3U3Vmt5sd\negzba2bolzqU9FXWqWX2Bb/8rGPcRD286Mp/aJxtpTpSjleuYTWSWFdm0ZoK\nsZIgBJ5ELrK/LY9Rb0RfByhdn3pIt1vhtC6hd0sCpSzmTqhYlQypcRvXZFE1\nxjhKtrKAY+KL78edLDH5OCtVmXqJyz9LVXmr3no3Xr/Zn33m95jRYqnV5ESE\nugkwJmesAvko1eTNH/oB0ELlBQrjl+5y/UovPLoM9okKICloM1+fU5Tn+AX4\nR3xs3SDpwYnqv4Brx23KO8QRGqG7F6JmqJwJqiBQGa1hQF9le2NnbUufyZiy\nPJCSySN9XEoCsx8oBwtMJh8+nG85/wPrpLtrtUgPMsASjYedQ5pvF0Vr+4eR\nhh85X95PSziKv1kcDo76EFZEFGHGmMNMSSqx6ay4MEpJrI7N/2mLQZUfoeaJ\n2cnIiRqg0SheNpO7jzXpxpFBvuVdArb3urBKElSrXHWgmCfMaWZy0Rdtj69F\nVjgK\r\n=pv9J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDm3am1ddcY3NUretQOtYEJNt+7ww6mqNIfe8uWY/PUbAIhAJ/3dz5Ii7J7EMR99YcvJsytFoExxh97iOYutmHvR9Ve"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2299-beta_1528916524786_0.5250032895744259"},"_hasShrinkwrap":false},"4.10.2300-beta":{"name":"meetup-web-components","version":"4.10.2300-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"4cb287c18de59dbba289f2f0228c890114ea1494","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.10.2300-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-P7OH8PHKHbZesoLJCj2+b0NmVwn4N2+zZJjdhFTXd4GnAF4SDkZgA4vSFFKRMuCU88RbM6wkx6HuJ4jdxYnIyQ==","shasum":"35555b8a86c827608ce85a3940a4f8b81f273741","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.10.2300-beta.tgz","fileCount":514,"unpackedSize":6137272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIXCKCRA9TVsSAnZWagAAH9QP/iK8OxHYSvUBu7U3N8Wi\nS6Sl2Eo5ubtRYIHTCEWXoYhlThxhAbflPxnOz+z7Am1P8OG8ieMDGOdSENSP\nFCN9OIIs5HCphaH4VMS826G/iSHjViTUelp5DVewd0qD1lqA4mMXu/etnWjS\nO8pZOgLcsD+Zx4jmvjx0aDAeIJjhyuadiTqjoYqR/icvV6lS9dGU7wWsj5Ch\nBBiBOAlKDQj7tvA5jxQ0To6D2JccuXQ+XSdj5pMrJZXWX/UBwVE5rc+21DYy\nUIwt0+nDGBs2LZYwhTmItt4LdbYPkB/ihEIx++jpoemSuRzysC6n4hgHLi6L\n2q/Odg2stTzge9BFvwr3xRGcXO15f3kOfh3k7COWRetmf+rMTtps0jxgYrZg\n2snNuqpujhTlRRKOftLVN+V33aZzrx3Ht945zmRrZfOsodOsT+8/2IQH/td+\nGEZZJDW5dVvZU1DtxAtkF2j596RDlZxRZZGehpuyO01M8H6kLo4Ivg7IfUFi\n1LT3Ptmdken0bfGs9unWRabcU19NPKAz8BKzceykbnK7BQmnSzYGKuibW65f\nWM+P/s+WLKudtPWS0jHPvpLk3DPhcQT8AvPClyUrmIgz9hrJKgVa7h52CsQi\nVUlqNnPN82uNQfuO1PsYJjmWPfTqkqWi0kJ3Yogf7yOUOwAHY7MCu3P2QuZJ\n97KV\r\n=5Jh/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHKCQhKq36wAZLROW4h+yWrkRDkFKSTnpX7oPRMaW7EvAiEAiw19cg5Dqh6Ecp7nakw+SOZtsGMDIOpbUTWwW7Ror9c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.10.2300-beta_1528918153893_0.25727790852034405"},"_hasShrinkwrap":false},"4.11.2301":{"name":"meetup-web-components","version":"4.11.2301","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"b384165e417511a7b7e21c1ac4941d4b2a986cdf","_id":"meetup-web-components@4.11.2301","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hfqoyXDfiOKnQq1DGxjK+7j2nJ3LkNu3WV0Shca67U+BdgWiPASmx9IN8I2HqUKEOiWgsJUwAD/NVjczyzTD/g==","shasum":"00bedab2488592f14de326d7c7dc5a44c878e9cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2301.tgz","fileCount":514,"unpackedSize":6142292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIXY3CRA9TVsSAnZWagAAq14P+weyU45pze8gBz8YEBxC\nBeq1k5pAJ/oW28TfciatkYrpvCiR29d2TPwF1Xh6tD+aSnoR6UXkT7TC9VvG\n4Kr3KrTsXzSPsGQNLIrPo+j2Zw0NxTn3yJO57CaMXlcDirb8NtuxqalKJZAv\nv3ju9UgC48Pqo+Qsv+404la7ddv9FjTHSKT4wv9qOFL7Vdy+D1ZkG72GzjDL\ntCVEeaYQk2vSg8CR1ysrwGpMPeEqZnbNgZHKsGpeO6WbmOHTENObNQaHKMzj\nBNiooO62EI4YEJTukVLOSZX3eiS8GtGKjLE2WTG1/69h+BO0aKocIVxDAdJ2\nHtA498VLpiLdT9jQB51E6D4lPAMSr4zjdfs7DljETzRJXeZfJJ1Msq2uo2wQ\nt6306naIZ72Ytf9HwnFqOdWp71IqJGxQSS5BZZLCwl7Zt4jqXst1lrBSI+lH\njeL1pkMW/+ZK0OSnkGsl09aKoTiWywY9zvPsO5DUjpwgrB/FvpGT97oH12oo\nmkFMIPv6tcvhT+5zVLNoEJZ3RbNa+eMWDeOLLvwYWY/PdJ+764ENb50YKSQF\nZDSbKsOCvDrxPOKMcrkaLtALaJxEi71GyX54fWv+V9+LBbaMosy2aQ32RNzi\nntndlxil16vXOVL1SwyWHnmWKKC7Q9lQ3i3FvkUrVQlr1+5VtY4IPvUkUlIt\nNPmk\r\n=bYKz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcaIFobWoFsIQ5c668zTvjWxCFcdfXsdk7oOKbGw0FIwIhALHf9hkO5VG2acyKm+vfe3I8RxzOixgk9MLSnw1dZYHD"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2301_1528919606628_0.2955593581380902"},"_hasShrinkwrap":false},"4.11.2302":{"name":"meetup-web-components","version":"4.11.2302","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","lint-staged":"7.0.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0","storybook-react-router":"1.0.1"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.0.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"b2183b9f518d55c83a6adff42e4c206d7fd53b60","_id":"meetup-web-components@4.11.2302","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Af9NPzeFeEa4ft0xJIeVD0721AmgSZeqy8Yqz9scwIvUeyM3fP1dLt3BPflmyaKKbBHCC3ZnCECpK0pKlbrq0w==","shasum":"c09fd9c85043c463838d605729748f0f873a3227","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2302.tgz","fileCount":514,"unpackedSize":6142560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIXZdCRA9TVsSAnZWagAAnlgP/26zSqK6jLvVdGzYVesP\n2FxPaGmu5YwDpxMwyoCPUnBLtDBnp6nYpqfchDcqfhOuw3keMqrDHeLe+28a\nzytnG+3BpsKU27xAiER4HEsYHuPnNDC2sbivD0qHmcMtXXpwuDLBLRcsRowK\nvzTRJUOiQMCYOVJwxqdTtZO7mAf4TgJHyT7aRKQPNXSPg+XG08tW8XN+pnYv\nTrNfMZR4KxXtF11ThmTWNdbZIDR84F/PnfImmp1d1rg+89mJBXSKUOQ8o1uF\nLYMl+DaBFoubbdUqbMLz2ERtzbLX9FkFy+m4BbzQqlcQlYCT21Css/1fKrBv\n2xymZyCicLJOLf5uJMH3roaluaC3QRlIr4pIVHaZyrfzTZoNrjEpCIRRU/XM\nRiByvclaNgUv5AFzBk+fVNALgHmyUDlSsu9nMojX6CoGAlppB3c+VhV4dAJQ\n3HC+Tu4F9QGrmt3eLOz10Z89QOpHcK3LZY1ytCFxlCGfVqVLdYbII1Wi5wws\nbQ2JOq/WNoqWHqhbjy2RQrhxdBHm+HiAuaiQpuUOmjE2rKw7Iv5UJ5t5HAyQ\nlhEBd4pLhX1bJe1aUHSWZkD5V4WksPyXsKNvvTayFCGLPYaZXMVTqVh3Zu4s\nkwycvqHZ+tgcS4QqKwOQWXzSSre1nvvZjgZBQNFpkl1PZK+kRp54IUQsEVzi\nZhZQ\r\n=/eFn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0EA3vmf9v1KFt5o4Le+sVkJ46iz+EJFh1Q/x7fTxinwIgQxzGyTcIWqN15bKjCeioq6HCTH8yj0Y5lNcFwaLFfVg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2302_1528919645217_0.1828472133109902"},"_hasShrinkwrap":false},"4.11.2303-beta":{"name":"meetup-web-components","version":"4.11.2303-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"165e2bba508823e5e0acca93f32e5b4a175d02cb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2303-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VkvLVYHhXXA+3Q+DESfPTw5Dc5IkSn2Ja4o9V5XuxIu4a9bRSvPH0fSL/QTN3I451/V+F50zFy9Bz1pejVQKbw==","shasum":"42b615c53b62734bd81dc164f50e4db7a699a488","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2303-beta.tgz","fileCount":585,"unpackedSize":6605973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIp8NCRA9TVsSAnZWagAAzSEQAIZ8gd52PYGJSNNkL/Fk\nLRwY9Sze+fdFg8nS2L/1rZVEDjYzjKG+WsnBFYnk44L01dXB+veLAaWs0giF\njE3+3wXQZ7g33VA1A+lbcSJAYd+ofBSPM/cfCx+LWm1nviIVE7f3UZd9PrOi\n7k641C4jaKgr4PV9S8GAbncUx85zcxRSUKWbfB+Pd9pa9BSAVLHSVasbLeP0\nPIeEYlBcTFyjXd9RqgMhkvuMmgLS3QySiSh0a9N9maIXBEgVx1bqDWUHknts\nDBTEF8qaaj1vjMRSay2SvTl73trlq4ZZmoL1sGTdeJVCarm/1wK3mVHFlS78\nN5zQmDWi1ZmbkqJ7PjlOv7VRTJLeGa41gEQAUT61JUHL/yvyLuWhYb/icmi9\neB9H8BQ844bMonwlhbPCsmajg3nYqOOGYQ4PhkGeeKJRntIpkFqTomTyVQsv\n+ARDWnag/KVhacHFn4jsWoMrXujmlEsfbGKaEtysh68mp0BI1dCYNzmV4G0X\n0zpEuDwsIZwtkDHIkpATlTlDdnRt8zBaassHLeDYJT7695va6beBSxCuyN6d\nH+AP1uXWN4N3oGgKaVVwxXqChtFw6nOlZZO+FxheZxbhMVSR2CcgWrP3OIR6\nDXewD9oa2RetPOcnQHzjVDm4jUTWEbRHkK9wM/xgdkY2UV9coJdgwD/Ms0cA\nBdUd\r\n=FA0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDzCwR9lnfoOhLRhMFuY3u1KVts18z1kwgmi5Xqhs+LgAiALjXvlXWyGNpj7jJI31dE1A8frdUNKvdGvz5tV+ltvyg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2303-beta_1528995596975_0.1851928536713583"},"_hasShrinkwrap":false},"4.11.2304":{"name":"meetup-web-components","version":"4.11.2304","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1afa7b3d1b65b213709329f1a9d8e31161d2d67b","_id":"meetup-web-components@4.11.2304","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0OYV1sDyJF6lK9azA9aSNl+VzHjKQiqqPzu87CYFXXCvGGON2SP7dmdEm5w6pheZufVjRWQtWT/lSYUeUR630A==","shasum":"b92adbbeea254042b203c4413cd1d397cd254dc5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2304.tgz","fileCount":585,"unpackedSize":6605968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIs1OCRA9TVsSAnZWagAAOw8P/1BivqvD3ymWSbH5+Lnh\nCElrdutwoFuH+89NapusExYu+N4JxJgSFJ+Sh8a9BTjom+IvziUoXjAUysg7\nS0IfQWGDJCcQ25l38Cfg3t29cuTCOkMTtTU6U9Cubx67quJ5R79BezYM5fpF\nHfC0pt8I/a0v8ajoVj9rdxm+i5oHzQ2zFf3y3uOr6Enpl4uWLKZnrnr6EaMg\nUCBCAqIqzFzumbL9yi3hKDIjyKZs1O/yvsADiL5bXaOL7z5BndQ0n4+BQEZ8\nGTAoaAo+0swxOPOjWu5ZPBa5L7bFAtpM1IgI+ljynD0GyjSoGQ2i5VMWqPGD\nVbDeX/2+ptlT7uVvoYM1v7wqP3OK44cSbRueX7+HTbpjxKD5WfG2rr85BCyy\n2VuRpWqfgZkcdsKlukptvS4ZGZumrAthzSvVj6b6a/5k7XNwRNMTcAVEEkG6\n8zytKZsrAmbAabAHqYFuW98aR3JJuIJaxAP8aK4nKWwd8O/qESoWplhg3RNA\nSqKgSqvvCon4A6a9XLKnFhlPaQKFLeevKlzugVh+UKFMvnRPWc155/X0YMjg\n6NIrHO+vcLGw8cGj+oshWX535OOQWf3LL1WrqXK3anGmyl3zYXWO3Pox9GDA\n1YbBeJ+szRYlanF/tCGmboxLx+o8HQZmq8S9iUmMmlNq0KBAL8Yr2J//rhO5\n5ULP\r\n=qzGm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcj2XnlbjpVJ3MXLn53Tqumnpv7kLgNt5MyIYXAhy/3AIgbUSED0TxTDIz9q/G/M+6N3nrXjLuC37eFVsSyVkDv8E="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2304_1529007438696_0.6216210391148513"},"_hasShrinkwrap":false},"4.11.2305-beta":{"name":"meetup-web-components","version":"4.11.2305-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a20f9f85c70901320d2621ff13246b5f67f02af4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2305-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-l9fKT7b73mZWlrAUllH/+IHWR8ts3hCnjBSRg/MknHpbArh+1PAl/w7vve0p7uOP/aQOAC/RnKieoJRlfSqFlQ==","shasum":"6e91084ffc26a5cea275168c9b80fa8491e9989d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2305-beta.tgz","fileCount":585,"unpackedSize":6594876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbI+nUCRA9TVsSAnZWagAA2KcP/1KtYAN2JUVfcq+9oRmc\nGs2jos7CGYpP8kycoWz6Tl35Xj226x9vMZFdr8zIfOWEnVVUNiQOHfNMQ3qx\nZtlz0bY1izbgsRCZlnfsXUu1s3BSJyMornL6w1jiW1dHE+T5ItqnwVcWPk7y\niRJTBjeb2z8G+PsKMmKG/FyPcJa2KFK87qdXLVidk/HS2p1+KSB55mtFbK4d\nGn7sOhS5ZrB+7IaIK5lVxPBoBkNO0ve5Z9Kx+xv4EHiAQSCyI1ffM5mzNmNv\nekMg5N7ozh2IV4+gdsiBCFO2kcH01Zmqf8nnBMHvUQDmdjP71T7IZ3PF/K/M\ngZYdlK2ZkNmbmcaYCu7NVIFB08vYk0iehvplFxnuhM3gbMMV7eTEQEo1ozHo\ntdaplH61Tt2Rcdcp44UuXoc3Vbbnr8hlSJpGfQ8LEUO/R3pphnrYUHgvTbZY\n7Q7UfW7F//z6creppCrObV3iL2YMAv/R6YQpPWhzn67wEO97Y5rA5NRw9Fe9\nVqopnpWYCFkpEHnwpo5azRZeE4jA0WU4IN/IPuWhOmK32TMradez1SY2RutH\nG6RNXsH+0G81lJqufmF+rc4dQ8te4G5EQ5pKiOWGebAAo7bsacsos0wE4Ri1\nUQjUrepqMy/LfQWEqTraiPnIeTWbMbiCHFKoRIpFKLNJNGbtkw4z5Ftz4ReG\nm/fd\r\n=riS3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt7HcHMT1aYS6fPaffBiIvDKno8lM2AOhxBfYhvTJYVAIgMT2n0Q5W+Hu/hUYUcCEwDxtD+Ejz+5iUOGUfcsLeJQA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2305-beta_1529080275911_0.19128949153722408"},"_hasShrinkwrap":false},"4.12.2307-beta":{"name":"meetup-web-components","version":"4.12.2307-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c187eed81e583fbe3b558ad23617422afcb49b37","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.12.2307-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-y58pMmwFxScseT5FYiFPZjFJRi9x+pUtJJV8iujiVZIkzbSK6R5W5VqmD3F/eYfcntfQDHjpxcA/OAkxRfDFtA==","shasum":"8dceebe038d1f7b94089a0dd45e2275769867463","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2307-beta.tgz","fileCount":585,"unpackedSize":6595094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbI+pSCRA9TVsSAnZWagAA+x8QAIItvrNt2iK74aauRx4M\nvsKdW+YAjq/BnhD7tCRrhSTANS9NrQ0riTIlw4U5VFgMpz9RcykctVqMc4L4\nqrMmzX/xakGBAuOy6AtvBCHwbO+CT8+oGTz3T4sG/93rS/wb9qVz0V6GEcWI\nzq7e1hb9VJvBV3B9UO6SeukiDmSk824VXoNyp1RcaEGPD+91/g5vombJ6wzU\nJmIALgs1REDxIdIHVnMUxG/KMXHxAmz/WQZ3O5VbkqSC+O2mTKwSAld7tuBx\n56PuKw5eqAJrohCPWxTZMQAxlVtkTqYUmQQaN9N6wBeGoH0nLumAb0g0ciwJ\nNnjDbseShLlujylDznnY65oPixjmt0nkdgesyFPZCVQqqPHorgVSnIs/U5Cj\ni1hqIYAn2lxveLWss4eXtVO13oqN0+44to1r3SwR+ZO95ZTjQSklVxjwHHj7\nftWUm4xvUx4lIGG+r9b82CY7O+dJqlt0W37rqeUa/8WQFVvEnxexMJodrGO9\n2Ckq0zGJf0kegYxhcI9BkIWyGiwXdcnaDNAK5EsEnI1d2pfs3iGLaQ3qaRxp\nMHVK0Z+OaeGbc45sJ0ZCEp59Ns+k1l3jvEGS6prS3TKu/tkxTUplaOfV4wPK\npvMVUFURxx0WbolWyJ2/W+cFtnYtOV8HIfK7YXoZO7e2rcW2ZLOdPOWPqQ0Q\nanDZ\r\n=cOyG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDcXuFY+PYU+ylBNx4luFM84LjyeVtuxbUmv8pPJAxbQIhAOAIiYertk1tUONXoS/ocO82PvKaamB9Gjjjxyg82lCW"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2307-beta_1529080401742_0.4263807420027037"},"_hasShrinkwrap":false},"4.11.2306-beta":{"name":"meetup-web-components","version":"4.11.2306-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a7be88d1f89d8dd181959427b4935b66eb2d56d9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2306-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4Jgck/129qcocR4aHK0JDj2LAKXFukCS3eIyH0FiW/+UusrWR+n1X8CVfBMfCSOe2RuFaTN3TrtzPWD3z/nICA==","shasum":"31caeab467d7883e666cd2be5388fdab7ae5e54b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2306-beta.tgz","fileCount":585,"unpackedSize":6594876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbI+rVCRA9TVsSAnZWagAAMx8P/ivwsTD/wFM1ohHju9M0\npLK4zmkeJjgkm6VEWX6bxrNZ+PbmJ8fMadoY8lNwLT99DfAWfBxPA7ihzzW0\nxWZ0dpqOUL5ETvRkPU8SsWbqsoFqKNVvljoByfnbXv7KapgcFJ5i7PT59rkE\n7oKmontcjDwZ+rBx3wGbQ72bYxFW6/zAguvsJs002X7w/iSEoTDK8/ghwVJr\n5qElSblFcfGOD6fe6dRHea6LJC6mSrms08Mlugq8Btue3z0x01P+DXtcOjml\ne1KNCO40Yf0X2foweJyCK1U+RYM+UR202NNnd18ygOu0SnxJWDj9D99nuGNB\nHR8ZQKV5JEFurJOv9ZTHHsgZYATX4m0rOmPtjU0lVdH5a8ziofCQwYzyJNC2\nK6BlJ42KWpesBjvyWob06lSKQiwiSYYZIVTjQzOKb/oKhhnB5rD1IeuCxBh+\n9YgkbGYzdWEO8iufI4zyM7DKztTDXRs+S2tkpygAxWeCC4X8CO1lwe+uNtwG\nhHECwOJBP95/odkpPh/OAHD1gsuZAHdbv+ymEnd7Rn5GY9eofPeGoZoVAtTx\nR4iwkVCdcRqWAfqka/VnQ4mk0+zWVZB+iK6GhCBPlbr6VrNsUuJXQNC+NVsg\ntbcGt93W28RSdsaPiZ79r8gc32rcIALRqqIhG6KjGu4Am7e+VFnRsDpRHADB\n1ywM\r\n=+LRN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCp1oefnuzxtidQhpRmNVnt+vxd0d8ydbPsV9GOtDhRYAIhAIead81YmQmJcSAly0IOYPPKtl4nTEHk2mSVrGnB4wrM"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2306-beta_1529080533351_0.011532469177685245"},"_hasShrinkwrap":false},"5.0.2309-beta":{"name":"meetup-web-components","version":"5.0.2309-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"97bb6a1cbf3620937620cfae903ab96bea851b03","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2309-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GUO2PwtyG9tZ8F2MCmPfphiAUJg5/o2tjHO0M5uXPgpQHAHsgnsZdqIGgo71PtAryCtu6kEyvxdR27SHSPgDiA==","shasum":"ee38fc19186472a33171e43d21157ff5d4b1311e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2309-beta.tgz","fileCount":590,"unpackedSize":6995927,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbI/d/CRA9TVsSAnZWagAAEycP/22TpXmX8ij6oS/a/+LZ\nDAsA0rmdikDxkpdlOJQKxSsjds8T3kEOMf8guxho5H8Ls2RLgYw0MLO7XTXv\n9+wibNQ53o20IeYzn/GmAHnRibxtKUfT/WFJAn2+B8ZLF7XOCoQIf0xg2syU\nVBsiIDw5p5VsHvIfFdhXAbvpxvZ1oxBeSQFcDJKQkCBH52S5u1XxCMuM7teP\nMkJo5L0pNgRTObXyCm3XZSl3szGFU7VPOgkT4gha4+okk41agz6aoYc84+f6\nmKSzTzxfbtuBiUIufkvmyJKprYp+OkFK5QoWASt3DIFbjxmbaXEz+65T41aj\nPpqcnc/pKIX3rEMbxT4nGhrWYinwzsspHKMPMPdb1HSK2fKpGiI5BruW0c+X\nH3tCLozYpSj4VETmi2/ua8YGJn8A3+fAWMW+x5tAfy46QhMbLt93UFCR6v8a\ncbqDjumrxoeBVrcjnIN87fJfuboldXU/KNjrtrpRURrx4DxFkVR+z6ATPEai\nzMNeXg58WVi9DZ+pJwulwVofz6pgl68jj2jSEfVqIs/rF+p8tHrS7YLRVfYx\nG2rlmWAiscIHl+sS8KHtAb7E6te5oOV50dWKw9aYjzfmOfGxOAFHoVfVKf+M\ndMmFs+lDmWcFO2QHkzGcoZSID/vGOMLwTzekGsX/fzRxzMbQtracu/dCskUK\nYTPr\r\n=eg56\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHHR8dMZY0W/Ah4dFdUfu0FaeX7gyDYniQI3yfpvj6ZgAiEA7tZKGWcSezQdf0rlASXCoz0tfRzRRd5KhDdeczdvXMQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2309-beta_1529083775342_0.19522779644864396"},"_hasShrinkwrap":false},"4.11.2310-beta":{"name":"meetup-web-components","version":"4.11.2310-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"73c0f24a832ffbfc25d10807227d2d5610899d66","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2310-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7SdA+gRGMbeKKM5ynbHF0zdpIWyG7NyVW3slgxPX8xiTvFbTLdnte7If5z0uty2HDrQrIEF/lRobXGZHJtlafQ==","shasum":"841795604faf86d416b8020bdc2abc70f4a315ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2310-beta.tgz","fileCount":585,"unpackedSize":6607064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJAbQCRA9TVsSAnZWagAA8pYP/ApB5p5MiZkHT4F+lj2R\nIKctvqF4EQUE+OrO7MQp8c/bESDUPb8+cz48PRcj3cwFa26iWMu/OAqY4lwA\nfUx9xwW03LeuULB12xXqQdh4R9+ANqq7OQ9XjSoSsTvh6d4Vy+Yw5jAKc2Ke\n9/zlcTICwPLrFjajjo7L3cuESoReROJ4FkIYQYIK2w72TC9dUf/tqx5+ix6z\nJDBONXrHC9SpB7Tj8k98Pjn63Aa+i8JYRb6F2y7RsiiMu6vJ92iQWEIwZC8U\n9CKBKd6WVpCko6R/ZVaCkGcohGAXAbwGJ9ZG9IrFeYOHv/IMgesBWsSuW0UU\nigyEgUF/pvQkO5V0w1U6i83d5I5lJqxXCrisK2QJmFV3fSu5a3AJ1E/fIzA3\nltRbDWx8XFGwFZcKGkvSBJQ1dBnqjD+OWEqbz8qhWMSd2AIQgTalSmwRj2BM\nqReOZEkPwXxwGvQlTeDZHsUM52QrwNc5PwWQ03CrhElplSvxdqy5jpMGzds6\nxvZLhElC0s/cA8LFeukJkjvghWIdCEpB7BHqSIjbFGDPTLEsWcY6nFH/DraX\nfOgNxF+nTHTsEn3Ytc3tFqBRKjZCr92xtPvfDT776F615s7BfRS9OR0HNYCD\nrZV9dScH6X4bOBtr9jYkV2d9x76YAnxCrx7trixU12A+2JflDAfKggpWcusQ\nBvcI\r\n=7h+F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAgAliQ/QePrA+5QuLFOh5MZ/VczmycLWwzVGovKs0xXAiAR5Vg0uPMQByeMNx/y2Z2vRSeKB4O2MqHOY2dXwI68ow=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2310-beta_1529087696318_0.8966832978240755"},"_hasShrinkwrap":false},"4.11.2311-beta":{"name":"meetup-web-components","version":"4.11.2311-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","prettier":"1.13.5","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"79e68e809323b50976598dd283a138862cfb2121","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2311-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YYN/gTRjf/+Yw7g7PsoMuVw58uG1rfFZMjrUzQVeG0kXtAOm0iY0cBPygm2+hqpelzcfHRHqY8qYbyXWSsbotA==","shasum":"5c5b7cb65ff25b15265bdc79f5e9fabdd8b29469","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2311-beta.tgz","fileCount":585,"unpackedSize":6607247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJAtfCRA9TVsSAnZWagAA3AAQAIAWJe6aCoptQ9Z4ULrD\npWWyhasxXzLHD0G67AlpPCSpHSaTnjPPYc85tkSiWwnEqd7FVpuZNMLRxy41\nVzxL/bLIGzwmkx9mE+boTg5kLXvw72qPEIfjKrf9uVIyYuVYg3AxPeL2eKfg\novPAD+5GZZmuoZV5Cmov2K8nSdm3xcH+uh4//DFEjqWrOHKotrnWILXz++97\nHB4jPZ1Lc8hsCvnViU5GSIMaKj0F7g3Dx/mWuv9b1qWG7/UMF6miCNMF6alL\np/x87XBit42sMHLIsbeC0zF50qJLlaNbF+6xOfOB5BXKS/pflv9kEQ0yBxWo\nE1w6oG0702FdfPpcRdGuWhfHg5gVqgv8ywpwhqQsYGELNsp37sTJ+zE8J1Qf\n0rIZBkp0jBZIRKo5fdrxceef1wMRWkqZ1J8mEp6o9wM1OIK6wyYsWhLJThQU\nG/u2LoA8+9aYkNKPlCmS2KskgewtjCHB+smu/hcG8SNjFFcJW7kEddhpcKL8\nRuWq7YL1XgqNFdvYONyY78GPmgd/yCPqq4rzl9bv8ej9lGV32EZIMm57S6ac\nlvraRJ2vFSTrtM/6aBTgP4om6g3IyXSOsgdNY6bUN3wKkWA3mqPzIgqOh0IG\nrs59qWBLrTYeGwbdRfh1CGqR5prdmm1TwyJuKry9s4WkGNCPTq3bAXa798M7\nPHM9\r\n=I72+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh0MKaiLrfKPufS+XCx5bHTxmR3boHCrhDie0Lkd+3NQIgdU78xLKy1d/JO21fhAoVoUVdwgn7mkbMgkW/unC9uC8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2311-beta_1529088862478_0.920402223265613"},"_hasShrinkwrap":false},"4.11.2312-beta":{"name":"meetup-web-components","version":"4.11.2312-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6353ee47eeb010a426a861a2cbc079053918734e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2312-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xoM7pw0xF2c3bo/M+kVqeaD1tuuOu3R2M7ISXBWG003zPIJ4qQvzGNWrYNAYCNVJo7dfWWZYHPObw6Br3cRWiw==","shasum":"1b2a8326020153851faeaf31a5f58875949ba132","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2312-beta.tgz","fileCount":585,"unpackedSize":6607310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ7+/CRA9TVsSAnZWagAAFq4P/2nx/vH8Pqs9N3H58nNM\nJzc8H/nS4xUP7U0AjvRu8kcdS5j8n1ruvGwspb8JkYbmhlaEEuWjgp1uqyLZ\nDWKC4yA78NEirXAO3MYh/MpO+E+OMfI6dFOjYRp30RSz0Npf7PpX/pTt/zur\nkrVrgUvNYhxNzi+tHX+zIfhYNCopi2U9bDnI0QpQSqmN/jfha2HN3VwqecHo\n+rwADnfkWGoKBFrhpBDqgNBJvmayCQNgyHiYdrRWsa0ea8nl6p12J1AX+Ca3\n7ozFZCZcEzJNGvwKXoLpX9UV7yv2OJ2XrJ1RsMp6vSae1dfipYyI7rspp/Em\nCFKLQsPSROWAfJuYXF1YoO1IhCIzwM1X8gLR07M9wnALvMJNw4hQ0H77XcmI\nfzMkmJEqqoa8PULOu9VSTEtdbeA2D2oqhlz731nrQuqWhdsQE06ZugeZf5vw\nOpsP13IocR2OWTlzUWiDeDA8vPh6w8i7LxzLnKIqQPb3oN8UMsTlOb7Jj4NY\nXWUFqcgkFzX4c3NeL7adMSrpThQgJ6FNrZT+7bDsgHXeJgMsjGq+2tRZ8alE\nVwo3UHcHjgsP9V5O61Lh5/9iorZ0qVeU1m71/hR2hY4XAdSn0i9Qn+VBRhCe\nJXnnVufstraMNFj1o2PBaa4Fo595LnXSaYxmqXniChMmD+QGqd9LJS8bI5sJ\nqQq2\r\n=kxqM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnfXg45SWhCDEBz+McG/YQsSfslgeQy/kIzqBP5GtKKwIhAMcP6fsakSZaOmjRLKiZk2xWsoLjHPEiQWqiDR+n1+8g"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2312-beta_1529331647452_0.24771505989246645"},"_hasShrinkwrap":false},"4.11.2313-beta":{"name":"meetup-web-components","version":"4.11.2313-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"27b14307f38a3fbbefa8f0da3fe624a8842de1e3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2313-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5Gzad3qydgOSn06v2/Ep01CENxvmmuuwdCItu9nf5yG/kcDKcbePLo2f6f6FyWMOFiTK71zZGUWxLawMMR+j9g==","shasum":"141cd3477cd889a2b325b1e93e6fbe51e9c92fd5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2313-beta.tgz","fileCount":585,"unpackedSize":6608206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ8rmCRA9TVsSAnZWagAAxMkQAIeCjw0U0K5AC+vl8M3N\nDcr/UXev1mO2FgoK/G50+og123aZe8kzJqBakjOzCH9gZZAqHlnQ71baSnc5\nSiGoCwNQWQNssP3q3QtfIq64LiduaQiopOlsIN/wh+9gVtw+V4aXliLuehqu\nxJzgFKmmr2ey8282xWbYb6ljovf2Q7qf6Upg/+PCuqFdGXt6schYJ4eR1wrV\nyDo561a94ol5dT7LA4FrTv2p2qKSXdWnsjC4gs/1O2Iun8tuFHklBrCSZlXO\npuUZBQUkbKBRFDefrxqCZYDJj7N5ZV8AbuVhrDkGk7NpHui5d9626pF1vAI5\nqLtPhYeoSD854mx5WMD4Oianpj3TnKyP/d/CjrNpfK+gVw2JP4Uq6EZ8PsWD\nZDBGcUjOi3FO6NP1Pov+da29WJK21lDbLMT01EE9Foo0GoRr6PICwVnLwcu+\nCfTjD8pRMyo/z5NU4H8IhgMIwV5CqxikX1Kbqw2kwlj/f4MQHIu4UtEE4tpx\nlTFLYoGTfpf+KPUSWgGU+5x6SvC2xcJQPVfmdyb+0KP2nb0rOyDPVDEskNZ1\n+9Vi4hCIbbSxWvH1dwOT0CiuDnGmp1RCuekrGfMRb10i8lNPtBBxDF7NADyV\ntUgqWoRGtaSFCSlvcIXG9iiOpIs6Sv6rETBbTfdvsxrobAdoVhl82ItkBU8l\nz3fk\r\n=asTQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGt7W/ut8sjRFQDY957Rv4dRa9+z+qDPjXDj8rOeGPy3AiArWjo2bpFAbjBQodffwECKmhGGhwaxoCNJ7hMOBqF6Wg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2313-beta_1529334492952_0.8246320809386984"},"_hasShrinkwrap":false},"4.11.2314":{"name":"meetup-web-components","version":"4.11.2314","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"eab690166785850600eb8bd881ffad076815d532","_id":"meetup-web-components@4.11.2314","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nQwhCcEE+C2yMVDqdx1MzJbXSBO8VztzRpcbhwE/DsKZEe5f7Bl3Gpa2fkrllhfgtOtumdkVd81hw3Kcyh9XcA==","shasum":"f19bc39b911e32c9ab6a1ad204ada5637a331c4f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2314.tgz","fileCount":585,"unpackedSize":6607059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ84ICRA9TVsSAnZWagAANisP/12VP2W60madJ8F6iekb\nU32NUlJzZPX02GOzKzcEpq5G30SSsW8kUZnLkqjibO5zwAAHB2+YOWD2sCj4\npmpTRhMeJTBR7CSYFfYhQPkj9LS1oM50mmy/7cdO3Fd2SIV4deEvwEIltYAZ\n8CAZk7NN6uoydiyXCQhv6QskfDHVDZHusw5ErCsZFqMCg7qPqHt2Vkg4LooK\nz24wDvv2of9ZJX9z5/FMJTyQIkZi6vJVG1pc4QxxAxKpBTooiopOEx0N28rm\nLsNlb+ihdTrR7X2RsOFiLkqiRliC0FAJ+7FwKAwwXI38O3wBxoBSsVG93AvY\nQYRHqR03pgtx9e0oZ3KUmS1dpUHJZpPfq26qovcLOABcLjVgq6kcPOOuUkQ9\nIT3JA5tNiMtT18GlO1LV5v5keRGmY9namxyWPbYEp7dNpBv1DQyN+xvsSFLu\n/Wc20REPD8NCcQ6ebqDr+9fc5GqQvCnUB1NmAMjNWq2f9En9YMiI4XJleHhG\nW5Zcxl0O75lVMCz+obArdrfWVJv7Mt0R3Tk9ztcR+JUs+zCeBlCyNOAfu9nA\nEJW9g72t00zS10B7Sc3BzUp7RIOyI6C6kMlK9zvaofuly3l7CtpKWYeUt/xf\nmI0AZX57/l9I8hk7CzI2jpPsAW2zDkgaUnDegZC6aDyzp8S6QotBg/rJk5OL\nG8EO\r\n=WPuZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEE4QLfvTAnIIVMH9KQZ2vLMMn/mVAtRNpUXVY5FXCdkAiBO9IZUmBUz/5R2gGxMFOh/ajnURzYaJ1l/5itkxf2sSA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2314_1529335279830_0.6023767858320854"},"_hasShrinkwrap":false},"4.11.2315":{"name":"meetup-web-components","version":"4.11.2315","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"3a7726a34028a1c10533d83f0b414f5d17138a58","_id":"meetup-web-components@4.11.2315","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IrwlZZbHApoo+TBCbLZvWP/GICXjpw84/VlWt+zYe/2VYITjIrbte16k9n7l9H4Q6MdWu7BBZEcntBpNsZlznw==","shasum":"ace4d14ec3fb9f08c796c9615854ae00a28e48d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2315.tgz","fileCount":585,"unpackedSize":6609292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ+UBCRA9TVsSAnZWagAAT5QQAKUMVcjX7arjB6up7TtV\n2psA+SRGJi6JmaGOLauVP+MEWj4AInfRNdjH8BO9uYYFAgVpVCH01bo/6VtQ\nW4BVmTEa7SU1nuqflTuCkfvcoTxQbAmqW+03n6YVek2Jy7BIxUg9/WGzDpRp\nayquQMTXjzq0eHKsvqKuggGnxv20mFoyX16RKmEF8EhEQNVBJl/mfL77d6C2\nNqfsOYmuTV96hwkWlhZhfAtMNH2h8QvytVVMHmoGspatBUA9A6UDn01v8QBZ\n/u7rSfZMwFdakodExiiMKJ02tTIaE2InRm4aW2ATfKzp+Du/Hqk2WLaa57Bm\nWE0YGiKzPMT1lbVwxE1si2NIu+csEO0Dfy/BIww5w6Rw6NKMfPms45row1XR\nmeJTdfhc+uSPR0kU0o/MnCbSxBg9eskVgh4n06eJZe3A7AsCYlNfnLpxqS5K\n8YK0xa+gbL0ZTZwJlU1ynn3PaxnOSRfUUMGTAByfJ3eQks6cwIEAb+88slUB\nWBgdYNqNojJEO4axd3FL6xhv/x21FG0uw04/dDVJQpnYKNiTMh6MQgtqrzL7\nNDAa4OmBGRCzptnGskcFZHObzF8pc3hZd6+nGvVxych+lso2RqX/cNjmHgCa\nc/c+MvdywzaYJFsNgd+FIu1Y7glub+gGIw2WytMtkGUcQnxE5EBPRFWSAy0a\nYe/P\r\n=w2yr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd2/kKg1syJInLQTQrLsflKIz/Hk0z0qgY73TK2QodRAIgb1Z77eJiueuW7ikwVEUEhewCt+8+RlQJGHFN+1Khg+U="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2315_1529341185021_0.6533315304498608"},"_hasShrinkwrap":false},"4.11.2316-beta":{"name":"meetup-web-components","version":"4.11.2316-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1a7ef8a03e9595f98e8c11bb146a8f3bd368a6ee","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.11.2316-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-r1JDa5SNq4zbwknlxx3mD0+y0ygL2BXuKh5XYg51wzTwRMEVByx/iWl9AfykqCOkfC7rFgd52jmqT/Qx+jLX+g==","shasum":"19f63f5ecbacf7cf11ae094be7a3c67debc01df6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2316-beta.tgz","fileCount":585,"unpackedSize":6610394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ+tMCRA9TVsSAnZWagAAxD0P/0B/2KsXL5/IxPHLGAWx\n1xIqQHwkHdaP9U6hrGDfc/jsa3DHehEOuPSq4/0Fkzh7GZ1U5h52NhbDWQhZ\nFv2T1USMqb9OBLmPiDHfhxEGdW9bvIFSc49HD7kFjvJtmK8QYySS4GauAYGJ\n56vWL/pjTETCxYi+yopBXBQwEL1QcJivBsjIAGr9byaG2Et7pCPxV09n6y5v\nJ102wo90usU3gNVn87AtCI7peDLVX97HRjB4MgOI8g6TS1LuFwERINHeqGNY\nCrWI4JEGo3N6Zcf+uFVN2SWgrQKqjWdgOQlKDh+m8/Ab8DLMGJ8w06vmJi27\nd0Rc7OQlCVjQhHP01/wPncvjS6a3OUXJNosO4EvKBDYFiR8wAdggyICTzrtm\nc+OIJyAGVfkcfaSbAY9XUwpoYcv4u+BubzDcqiH/BgQqiauckelH89gZXx04\nuyF4aZ0V0TPg7LoJ0kIEm6S7gBKfQw4/u0G9yit8vQnYer5PX8mZoTjqqWSV\n6YlRVfYhq7RpFo4y4HRJ8fRX8QFhl3ro641Nc2r8RI8C130cZu0E/Orc9nkj\nFw/eaqIursXto6ysBia4E7LLg/vwzL0qZf9CfxRJOcF1T2H0exu4f8jWN9Um\n75y1OKIxLRvqT7pszndXqKcl56J9XdgWdE6g17q1KBDxTq61x75AncTQei12\nK2Ld\r\n=6oq7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDz6y/TVTJp1MAu7K+Q0KYUCPS1C/3rFAwAF053+0eyYAIhAM8GEyaAEwydNOFa75+JdLFweyxbKGnXSP/ea7t0UgFe"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2316-beta_1529342796128_0.7510075267208334"},"_hasShrinkwrap":false},"4.12.2317-beta":{"name":"meetup-web-components","version":"4.12.2317-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"557f01000e191d02f5e731fedc8c489b452ff018","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.12.2317-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6pED4YtiTmZDJL5u6foHae1hheylw6BtDyo1XL3mR2i5ymyRd8HHFRS0rd/NSSpRTXujL6fQLc6TrvgcxCTOFA==","shasum":"a16e5652c3b982d7b743dff326fe0cb7579088e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2317-beta.tgz","fileCount":585,"unpackedSize":6612108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ+8wCRA9TVsSAnZWagAA0YAQAKAWpAiCk3goxHf8dfxL\nwEs36SG9kSdAlSE/ML7NApQDADEuyfTA/SDyN3M6sgbUTBRdMuxEuT6ts4M3\nUtXTZwbZAoaGANWtyp5OW7GT4Q5V49XUFJJGggK6+f4eA15EEpyfw6cc73ty\nOoOiJ8okAQlFQS10RPqiqkM2VvMppTi4McB9foAmLfTYBs6Yep0jg8+UcSRc\nn4Rr39NNxNnB/RGODNCEK6LYeMb4pvf8tE06l4sjWnJAU9gQ4oi19jd+fAcy\nz65VjtLP5nlxWedSS4eEZ2uvBs5KGomxoBP75SptzsB8W7yiLDH/OAcywb/G\n74a3SbavvAp+suOd76CRLoWIelcnsGjQM02NklgxVlgYEo8uglYWPNdY9m46\nVEKQlnuSpnO9yORpcIBZXTBJoLe7UKHlwyLtbQnBxi5rtM2OERThC9+yBe6W\n7ChFQ7LwU9vCMWFxXa0Y+RwsSW9pNRoa4W0ln6l9qCrFWZH7DUawu0W6f36r\nwoPd0a28Kx2QgXmG/c/wIt6dNrBUnl1JzrfxRa8J1+D5Hi9vKj4KwClx991u\nJVPQBFsSVFYPRaqV329hX4ZNSdLvJ7nc5Aq2FjIrLDOzU4istDGodHwpikls\nI+GhZ0g+iqSomKP29o6an+nuabbOIhIE2aisEp44Yu24aYaOtGY4FkyPNrIH\nn0Nz\r\n=34bv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWWaoKAclnUgrtuh34WUKxJfxYdAwveEerHV1wRp6zqAiEAq6JO3reph5sBE57MuIUDvvlOiIB+gK45q1p1wV2kLyQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2317-beta_1529343792726_0.6492976386612479"},"_hasShrinkwrap":false},"4.11.2318":{"name":"meetup-web-components","version":"4.11.2318","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"8c53e3fd97c818867cbefe504fa91bae4ad2656c","_id":"meetup-web-components@4.11.2318","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-h51XccKxPtNL+u0c2uJXToW46CH9Lkksewxq1Ve1Oo6HTY0EXyH05GlErO11QPFdL24zvtX71Kth2bfSg2Naiw==","shasum":"09b3250911f8ab0ab3bd9b8802da26057f895ed0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.11.2318.tgz","fileCount":585,"unpackedSize":6610389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbJ/VvCRA9TVsSAnZWagAAlNsP/iMBvsyn2+3CuQCvwYk8\naRYgxV8dSRwloHmWhFBq8Pw65KvcXIdXRDaCmR7apUCbh/84bbgVq6qOAXOh\nPtK9NZpOQXKhnkpwwL2wJtoLl9RKdkxmm1TUFsHYenGa6MG31LHYJonWMzr9\n6qsbJf9ttiLiBFXtzUTWQ9xPQVtwLt6lB0xeBuBUaAwoUNIFM4ZyURHQWErQ\nSAQNvA7u1T9oeNOYpFR/YwQJupGUaNHkChCJGc0FsP2pfU6UPEQms/v44NIy\nPRXIXEgC/eTsuL5UvlWSqMAU3oZEkUySKNMchBjqGB1Z2bzvrgzObw66cm/4\nZ36FZR8rbe1qFoE5GbhuXZDnstdJZqs/pvmuzV9473PwxAVSddQBA2bufWsJ\n1DQXSf8066JDlkBBw9fJfsPzQJWxJvatoiVuoWGNaWfpdm2Bj/eZMAYngl5M\nY6eMf3kqhqoCozSEwOKQjSh/H+Euu4p/syXVeVjMW03ty0FZR5q5S3H36R5l\n3bx5UR1M4MhZnycefTK7mPlbWdF+dIx9oLrFOUbIDwJPgBb9VYF81egh39xy\noxPnR1SA22mI1jdKMP0EndItM5KI8h6WM3pkj8x1K3UE7aNj7AvW4fiPzhTq\nf6DeNjDS77Tp2HpIDOyzG23ktfQYwTrDilvjwhBy3A2uOZ5deKaCRgIOyEZz\nx3z4\r\n=vnDi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtYEabKAabowTpC87o5iV1Vuz1PnG+6kHEuUx8UUq3ZAiAiiO1jXUB2v8XEWDpQIu1DLjjqxBX/Ssqvuuu8sjI1CQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.11.2318_1529345390473_0.15549562459714994"},"_hasShrinkwrap":false},"4.12.2319-beta":{"name":"meetup-web-components","version":"4.12.2319-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"49403b0db212d44161875a3f4ae26fb0629df91c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.12.2319-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-QXNOston629qdkv+XSkl0R08yyD7mCvscEkyAIpoV/loMKENhjd635pLmuW2eCIUWmOARrkq1m05ASZsSGaLvw==","shasum":"76d20c0330b350dd239309cd12ecf809987980ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2319-beta.tgz","fileCount":585,"unpackedSize":6598896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKAOaCRA9TVsSAnZWagAA4hsP/jN7+1RodbUOfijrR4au\nVYvNSc2qGnorjHBsuqjrbZ7M7DszSWmIHlLA6GK0BYJUe99Sik3dYOqs5fsf\naP4olwQkTmhnEeshHf62PTo5HWEjAscvG/R04ZQNFIdxieg8PCHPILF30AfF\nMicuGnyUq3lvqXO5YxW2mu9BzuFxtLxHhPdFWkPEMKINDjjRfx8YttIcu+ih\nQhnFM+MBn2oshA+umUK1qGRmajZ3iKX/Lt4ql76ROsj9kHyPqH1DqHmP3F7L\ne7IsgTbgZ7KQH9N3Mhr7U7ldx73HrbQBC0lLf/n1FtrxM6a2kELdbGU/luXi\n4gYD0mXkISBzdIWK78kvsB8GfkPE4+sS5KUwgCrXQLisjtEz+Hf5G5Dj9EtL\nNlDcm9ZbPz2m5A6vzQvGYLM/oLDHWTn67noMSKdRbEWzAK1fgDIV1gVltSNa\nsQ7/kj1o9S8G6DizeAsH8ycP2U5aS8b3i1hfnkNPE4r8q2O3xLcxUg5dWsA6\nONDOCUZd70d56FJAKmiQjs6zVvbkt72YzY57NwOebPT3hWzLydfP/92i6Knj\nj1UScy3xCnKoEc1IwF6Ith184YqMPtahUdps6ByswiUfQKVjDoGd2BKYWqR7\nvoZX20QbRLqiAIhCVnWJ63vYD+EVSt6Eqw79piDCr736MWDrOovbYxgCvx//\nH4J2\r\n=QbBY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtNdC7/OjJB/aKe2W39PRFmX34uN2rcjhXx5pmhYxgagIgKLqc5JkQqGiVAZHtEZFCEpLkUrrVc9Ylo0rL3T167No="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2319-beta_1529349017873_0.0007894162369472824"},"_hasShrinkwrap":false},"4.12.2320":{"name":"meetup-web-components","version":"4.12.2320","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"edb5f73c4047f459d87bd338447114d625bd45b3","_id":"meetup-web-components@4.12.2320","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6JRihcVLL6STDaHNLC5iXqe7rnZuBb4TAoCT4y2+n/xkn3WZYWXz0f8JwCGHKIf4it+xq3FZh73oke4ntWg4pg==","shasum":"14afa35810440379ddd9b68cf5ba211a4be87033","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2320.tgz","fileCount":585,"unpackedSize":6598891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKAfFCRA9TVsSAnZWagAAn5QP/3A7F5/QYRi+Jo10Tfqd\no7jAexygjU6V9FqVmYzV7nT/21ClvyBQhTnvkWn00O3hWeSWBiT203Atx0dK\nUF0EBw9ILx/wXiq/sx2JJdVnCKnc+/8rMjxRaSntZEXDC9Flzu9XaBGH6Pdr\nYr++QQaVhcB5cgTnM4Ed3pS2aA9WeTfBH6Tuu+EcO5kryGaREMpKaqR+wIjf\nZjTRsQml4MsGuWWl/KflxIWuZT40C0K98oMNNTgtidziRvY9rx3ERPq/UHIW\n30syiDCq5tVq4ZC7dlm+zeYH+zm3ATg6PuBO2LNvTz+ofdUuoqFJ1OrchgfG\na5RIQ9diAik1a8zV7l8TvT8Z2cK2eE13Ndq+5+9t3d/TolQmExcOAlGc8WQW\n2zIrkKFy/C1qjipIl7lsbYwTZQSwr42/90Oh4I+q7UKlAMJRZ5a7/GgmrfYQ\nYXmDt23bsdvN5cz7DSV3Uu7nB/Vcw78ByEjCYtBWj2warC6HWhI0WA5kev9S\ndJPZ5TCx3B5LwyqliDUuEiNavYPzfdSK+k6CsWyDss9R5DdnEUaqQM43Lbll\ntxECb92QM+ulNJ+PJ/cy+ldZ/ghoVZyPZShFJF+DfQLw33kD0KXevSC7oWnC\nIE5DdLaDFuGVydI0Z/u6d/bj0HBbou0B0rWZ+s8TI4Y7iTFss1Ds+CFjEWbv\nxA13\r\n=QYPq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX8vLT2EPd7l2IGEpIZU0HQ1PNZJTuvmaDo3tH7k4yFgIhAOyBU47oBLc//i2t3DLc/w6ouNcp3jXkNeEweSr7kRLF"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2320_1529350084893_0.3877506718273722"},"_hasShrinkwrap":false},"5.0.2321-beta":{"name":"meetup-web-components","version":"5.0.2321-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e9badb452132b6a9f12b64c05ae7450967d94712","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2321-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gGdzB+a3AbPDOnukTFflXSLhS4KA8K4XMQfK1qtost8l+4JKZayJoH2nx3Tc1K5IGXCIZDQj0Vpeq5l7eW3pWQ==","shasum":"cef49be8540a7597d1ab991c2e65e79cbb0b4804","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2321-beta.tgz","fileCount":590,"unpackedSize":6988724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKGcxCRA9TVsSAnZWagAAcbEP/2YX2fL8TluT2aoOMpBW\n4iMH11diSfJdAcpHS5U2GiZJBvg8Lzusljg8EwAa6b/Zj+n3ckzSLS/jqwHb\nJjo6pCok8o4eh6UOQ7CqXQmIu61PIksyi3k7Yscjflxaqvm8AyhEHXVx/73d\n4RA3YH8x3CRsc9S6fxxEYAmUvMUkcg4cB5pjK/m2Pap0Ulxb4fbL4yj1EFht\nGz7QyzWw6mbu4KB6Bft65Hi8hYoi1i5/XcDwu+ezAQ5pL2nEVeeNSNVbuap7\nWXnVDuE6oCI7vYEzpEOMvNSFNA4iqPc7pEmANey8SVUofII2pr9DcWKl48lg\npYUUL+CnV23QJ7Xj6k9GF/H5I6V5Hi71qC5iGzIU1m95ozm8/IRT09ZmGX/v\ng2vShXEiENu1MLWZQcsweCZn35nL9/jTTUhBlZgpqCnvf9wfKOOqnngLRddT\nShLE9m/SOWfdKayoJw3JSd8K+dOKxs66BG8QfSl9pZuH9CAaVU2a/C0M08m4\nLI/4EHuQl81U0FrfZ22UM47/p7z2s7+kvZKpS21DEtbzNuPL+VAgyvEYItrg\nVz30flE1qHRn5Kn7lPs/H3hhjs3oYkVLRJ+faR26c7OclhZGTN50QPfLArCZ\ntHn/ZhhNPdtI17HThNPdgCuGAyobFa3KhY8nTIqs4m7FMhaDK6b1DIKtAdxS\nS7BL\r\n=aJ9Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYeBptNZBvLAEDWrs2R+8xUs811C6KoVoJue64T7reuAiEAhD7qYH8XT02QKDI8//xe/yxN9hW8KhOsXn/jP4X1ty8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2321-beta_1529374513569_0.08512993351189602"},"_hasShrinkwrap":false},"5.0.2322-beta":{"name":"meetup-web-components","version":"5.0.2322-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"ca6a1b179baebcf53aeb877b83e2e08f697939a2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2322-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zZCQgLmn9pgHeuBqoa3YmK8Az2RSV+5b2GPkHbtOzDZGRoK8WswbQa0z8zYXoQrJ299TgsCuqsfhSWUilTf0WQ==","shasum":"42d46616f33ebcde889b885fe6fbbd8f263126a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2322-beta.tgz","fileCount":590,"unpackedSize":6988931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKGe6CRA9TVsSAnZWagAA/74P+wV8DprKVXM1mnBqdJQy\np0g+e2orhcTJ1sSOMcjO9SkbvgLViMT6+ecvvLu6qCzH/5ap3dsoQEWmxDKW\npYIzNvBJ6WzSNuM3yd6Icd5r/Bgxb90+ovxfD8+wWkTd6EbNYoJjdmjyFzvx\nRaTpmOOj508GWDePMTVMbL3NV90TiBpodkrQjq2LPrPnbTdJ8q37COrkmIFf\nAd3/Fe5T6feP7Qp6ekt2eSbdGErKPUHVo02AjFoLszyl691yuxfT1M2saqON\nUDF1icRA5lruskJ9K1VylvPkWaF9d2mpdA4Jf/pr3MGwKczjrHtUdhKrOG16\nD//d96ipm6KBcaGNhZ72HsKss7geo2HQYKnQCTqFukz6LfpRVwNy/Ei4AJSk\nTK3dUm1wR/N66uwVZ4xZHwVUI0FSln/D+Ra+Cdz17h//asY8gSf6L787L5f+\nO/GDk58DcQOMukOJThYuF1GaFGr3lpZqTOr/kLn7TaqP6fbBNuukHOeQ996W\nl0b5dcq9NfDnmnxT3cwy7foU4piAz6hi9OPdjpYUSDYpSnp3Khc3Y63RWyPb\nK01aRZ12lFZ3bOueox8zCgvNKGcarMepTP1AcIwclV5mak3Dh5Q4gAcA3mI/\n7puXEtGBddFV0rMYZGIJ97m5rkYq9e1Hv1pwgjkqhSWBLQiMSLio0MkvxYlg\ncP69\r\n=z/Ka\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVEcAvYM2JHeNL3X6SHeFC1kjklialE2qxRSGcvMEEwAIhAOv5D2v9cygAtNKUtptCKXjr86YyAOADVO0pz8p3IkDw"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2322-beta_1529374649674_0.9254353662154595"},"_hasShrinkwrap":false},"4.12.2323-beta":{"name":"meetup-web-components","version":"4.12.2323-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"08997b2d28648c319a729cbfe5169b308cd607e8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.12.2323-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JV+a36shsr1j9N61pQAnY67ZR30tIzPDouIo3a8Yb3PSP8kE3BuEaIryt58gSDFm0YFViyXBDWtgSEiNgqUdEQ==","shasum":"4dcef162d4aa5a12adedfea6fc49002233260886","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2323-beta.tgz","fileCount":577,"unpackedSize":6588082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKSYNCRA9TVsSAnZWagAAN3oP/3NSCUh5AF25gIKEEwbl\nKtlK/tyu5CeCBSKF9LOzTuInNN0+h7ls3QD37odL82CGlFy0A0+NscVkYIkU\nn0yUOgjl9/ZQdLfZSg1NhzJgsjswTt5ox9eg3Q0MXOLz/WtihJyj2PqMVUTG\n9IF1ky4bDQsR1ENI7BmM0w8MtWOLUNx7cx9N5+6dk8aPyAm16Er7+FXkZhhF\nZWWFghRBrvN6z7LKTecSfMnQzmNAybrqUg8iw6GxJP8Qk3chSKM9Ip7PoVue\ntJ3UuT5puUFhMrVTESU2Ob+9S7aKaNjtL+Wmfx9FuKMs2d2BNgYQ7K0gP8Ey\nUGpkgWNMBk6dMy5D4ZjgJFpS+Qb6XzSTvO7dgz7EpnoX9wDigGzCiJw7KIoz\nHyuCWAEK0qWYy14mV121KnDoEqz1c5w1+GTqez04xGZ5rMeJAIJGSbkuv/cR\nutQZgmGjRLNS7fZo5xUcdUidm9MxCgQXuHaxsAHzBsaGWLUD5eLoziKZm5di\nALc1vbYzeqYM5wqcccB2tKF322wZXxGnITc0MZQxpOCN6XiwzHisvbKlqF5z\naJBod9ufNpZvMcL0dF8B+XWQ+Jz6+5CSdp5V1oGtSzDmMddWsDSSw09nHbPn\nnxwyqXT6qFLwMAC/QE8unQUFtaYhgtgLhZ6cImqPmbTM8dALVPbKdoWRyP7x\nYtfs\r\n=PlDA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEheHj3mOZICCI7tn9xoWntD6IBeuUZlsapD8NjNy/UPAiEAmG+ABy0dHWrfR9dRui8BbdElHNTiEzDG05KXKFaQoKs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2323-beta_1529423372714_0.693536373957987"},"_hasShrinkwrap":false},"4.12.2324-beta":{"name":"meetup-web-components","version":"4.12.2324-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a3ee5d658d2cfe72172c581be51979881f03dc36","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.12.2324-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Pg7rmy6GzCp2kx7XM7/fjr5Kv8jiBWTe0QQ0tuOUmRrFYwk97G4JnlDYmth6uJYODJvLjSL3AS3DaBmHHUOk1g==","shasum":"e8910ba09dc5a08cd8697fe38caaab1cd39ff37b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2324-beta.tgz","fileCount":585,"unpackedSize":6596840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKTKBCRA9TVsSAnZWagAAbsMP/2fnNh6nQt/uJIO5/Zdd\npo58rylJFJm0qUtMJJz2dbd8tYJTuQje7STiojqzOdzL/TTwiuEYPuyVGJ15\n+dATVeuqi60DWUugtD3oHr1fHT7bHNTQDLrIiDTRIwDdJXg3oKEmPy44tRdI\n1Pr+zXc58BReLUJy+kkh8RwxZUW0cFEvKM/RTigaGP46GjkoRSg+X8VoeZhF\nALDMxIisf9m65yfUUCJnK2Hh9S77qojnS+Fz8ykxL5I2oV+NP2ToQlNp6i7s\nfJTa5MzQmbR6hrxiekfM9CXIW1xIEVE7lh0AU+J8EfDWOxrM+70e2YNXAx0d\nJGU9mP0Df9BvL0nyhwS5Vuta2N0b/za+h67wRBF8csK+S6cAO9TlQXvSj88w\n4TfQOfE18MKHN79jJ1zMvw5w7hWwl2ak5+PgPagBzRV0CZRVbzIF9Ikk6/GB\nRyE7A4JlYVenv+557w8G9Z+B/MsWHIQ4b8GHpZjrl8fbth14CV/hWkW7cpVt\nhFZ25+OTVZi2HVsMW0wMdh2WvVrhUOAQFdZU9Mzl8BRB1SJD83nRS0lcH2Mq\nNixm7Zk9V/jdLeWBZij3VayhQu9+8sh4k1+LtAiO5n6J/JeFsDqVCxgX7rPD\nCvhhPZDLycY6Sn9D+N07MJZwjLZVVMX5uTzT2cRP6F7oaE2WHdnTOqnLFzwG\nMiDr\r\n=Vs/e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0720IMdqushRoYrM0Q1GAXyo9MmDPMHW04bd6N5BP1AiAQHwoAdTYbYSOHWZp6W3P0E9Fw6gLTxDaA4SiZoZ/bLw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2324-beta_1529426560940_0.912670653137259"},"_hasShrinkwrap":false},"4.12.2325":{"name":"meetup-web-components","version":"4.12.2325","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","generate":"node src/utils/generate.js","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"5ae3055ebc400af34522b2ef20e6a65251b1109f","_id":"meetup-web-components@4.12.2325","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EwE24TcxEklOvcO/Fn45XEya8UR3PnTtpi+M7M3mx66IXdpZfvuHzbgO3q//CIcD8RLUbo0seEHXnrl0PCs1EA==","shasum":"a73f4fa5683f39ff5ebeee800b811bd8630b495f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2325.tgz","fileCount":585,"unpackedSize":6596835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKUKrCRA9TVsSAnZWagAAKfsP/i8FkBHwDt1ONIrm57Gv\ndaTlyH/N2vSXyD3LefA2I45N03LAmJapxrrVQVNKnE/uCQuiSbq0+EdZjsqw\nM24QIf0i9VFOnLmO8sP6NvIdZ0altOkFF8mcte/IlWTLwaSRrTk8InwhB95R\n5UW89cryh/JqdsIxgmGl5A6S2gMPU0QPs/Q6lnk5Jva7F4JOIOyQHfQ7xh4j\n3CMMSvdG+i0wVEyc0FDiJ1yM0azT0Qmz4zcOl22C/3lWpNoimXlKdcLntre9\nRlrRTpyBCEaaF1MLV8voDSZNap5NU8ygHlOdZfjfyGeN6k7rgX6BronjLyY1\nRXCzBb017x3sR8gUZP4kWKnydmD4xKav1u3WU5lHJJmiAGVDfHQOo4/W2iOu\nTMsk/yt+uKG9dBfCFTxa8Vk9fg0HuT7vVip2viq6Gk1+ArSBhRFsmed3h7pM\nRx0pg+mq24ecWG6au4lSnrOTA6IOlP0MJn7SS5u1d9m5wq8rrpip0GEbOGs5\nk42znWbT0uoEjrZWFAvx1B7nODGccyY00DxT+XgUEjN0p6lmpMz65Lnf38mQ\nAIdMT316jZesHHJuxEQ9Y3gN7fugq3E6ooYuFy1DQK3REAKuguVuMPlnWSvI\nPV//ZkXEcfzY99R/88bpZ+m2glA+aj9q1IABw6M9NIaDVIPuX2pFwlV5JtsI\nE6u0\r\n=OD1T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0IVy01hipfBsIcJi8N9qZxkArQiIhM9Vllg4jx1AJqwIgGdHG5hrlPh6YiBz4MLFsKdCO7BgYh1giIeF5Im6IbIo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2325_1529430699109_0.8706099627836545"},"_hasShrinkwrap":false},"4.12.2326":{"name":"meetup-web-components","version":"4.12.2326","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"8608c3d8e2c45298c0bbf0c8c5bdfa8d87968dcf","_id":"meetup-web-components@4.12.2326","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OfIYqh56L/X0gczoCs5ZX6T5hkTcp0e9G5DxXdRpZ0DW6zKUxNdiHAOb3wJ0cmKyYwA/nJSuhiAHOyscGBa2Fw==","shasum":"213721daba6142c2ea9a3e4fabd4b038fd16bd95","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.12.2326.tgz","fileCount":577,"unpackedSize":6586021,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKUQhCRA9TVsSAnZWagAAlQ4P/02m4B9ZLfsWa45sAEux\n4zjDHyuOeCHppAwWx0XstKPtnlJxAGjXq6SuY5cJtqOVLnDAHrvv55Ps6JG8\nPVF2ssPliVMbLEHsEWMJE/ElGE3FX5EC06Pg1Hr0tpTmUnF5/t4D8ZnpwDDV\nbVtAC2hAMGhs3JEDC5t2AYbeFwiWprWg7K2XsIKTO+b9V2nAVMKAvYdz9S7y\n8Bo7/EgpNk9AndQqrEu2kvQS2Dpc9hn9qN0Fp4erDzKb8SPGUQ4rwIQcl8/J\n1+JmLc3WAt5ZLlxPuIHQLtfqJ1vg4oC693YT3eaK+UopJ0VBhHVkUgNwdHAD\ncOkRw/iAAnaDOn7sGmgh3hcPUX2a2SsFw+2bP32k6st6DB1M5jr4MsVDDcrA\nGL3z82ZXZNYguXopUhPVgVAcu3RoLOa2cRc6gYKuLnshJTIy7EzZyDXHOrQE\n2RtpjEsnPpgZAyJcj36rvLyrMB5dXjuZkwpVd3Qm9mmAuLJC3KyVJbfxuXe7\nhprJo+eBZa6YRlbVjXnnLa4sauZGGcJT99rsIidvP0ee9y3BD2SCq/KlLyKe\nZDn2DbCwm0mdaFWV/7a7NJQg9DOtqvxx9zTlhooB+ACHK20tvrhic4JnpIYi\nS1XPvyZoZQh9dzz4wxCB9hNonJAhjpFs5Lmg9QDGlRbrmDAZA8WZ6IkR+9WE\ndY3Q\r\n=z2qV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsryKo6s8sED0BAi1Tf3xvplsdVMHpfsb9bZhQ991IyQIhAItWZQv10vtZYs6jJZZ+sEALOdgR96V+48UNb1BvvQDE"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.12.2326_1529431073719_0.3423009660469596"},"_hasShrinkwrap":false},"4.13.2327-beta":{"name":"meetup-web-components","version":"4.13.2327-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"41dea4099d0cf828d417d36f11680858360a3e4f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@4.13.2327-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+tMGUmvacCZHgtBb3pgc5MoLCvr+SkzBdTj0XEVVPfG2jsCwK68GsT6A89DPKfGuu2CJkF9WSjnAQ4lqRbi3UQ==","shasum":"988d7b14c8802542b43bf45441535944bfaebad2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-4.13.2327-beta.tgz","fileCount":577,"unpackedSize":6589070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKVmOCRA9TVsSAnZWagAAHKEQAJvERvIrtgzoHhNAcyOl\n87eUXvUyIsVOwM7oEeIUI0nMZq+0dfxqhcm0dj8mbn3FvXffhyzHx3RsNT8d\nWr6GmmIWfduEaFrGlQv0K9SwaTR6g6IG1F+S9803VsdHBHeBiA+bJDC7bY8t\nfgBMU/sm9OC9mSqYGyqAGd+QHAROEgbhCnrUhyrKpQL1Bj5PXCKLHCXB+lD4\nqghrXdh0+aeqsudhb3dyxEJTnt8W/+ZjSS9UCFC+OZTRshNCjV8sT/SOczAe\n2nsHQBjeEZMG8EEIlf9Nw9E3Qyk0vRCJAgxzCjVou2fS5cg6qZ8V6fUIE55Z\njC4x2/w1z/wJBdAUGc2TslTjbzb/DKnbwX/9n65GpY7jm9JAYrpC9nSofVsW\npzlaoc18G4rd4wS6pHHb+69jmv2dV9BiKMZRzyPqyD9FGJ0aA2GlXVr1PqtB\nXOxwpohC2YyvidogdQDgT8j9lQcv+TGMyduIi+ByIz1yix5CuHxyrQzQlTtR\n71I7jxqwEQ3sWSP9i3XqaMXEX/XGN7N4UdzVdcXr3E0vbMWiglZ2NlZBhZha\nFB7za01YoA33cMnqPE4dPIlbf5iTxVV5C7sCqHeCL9J8MMBul4Xtds4cn+IV\nGmrgOsLsK7grPVxguPkP+E2Qf7qsHqoGqC3K8YbXqirxjOjW0banu1B2hFTE\njfrD\r\n=DQ78\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnB/7558kFjCjLIuS7l6YETYlWofR8QTQjpWEgtzQPBwIhAP8sdGTmzv24A8efWeLactlWYWsj/LB3azhXpoFNB0Yz"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_4.13.2327-beta_1529436558251_0.24276522626573893"},"_hasShrinkwrap":false},"5.0.2328-beta":{"name":"meetup-web-components","version":"5.0.2328-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"bbc5051b4e717318dee02ffd8c7caf33ce81b6c1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2328-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cu1BKMGRsoUYGdNDO7c9VQhN+QawEwfPjaXFU2Wmd89h+GUdlzX4NMdyiQ9KQ6yVeD0hYXQiHSpjlY42e5OC5w==","shasum":"3c4e8a5ee323f6380cd09812e947308524962f8b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2328-beta.tgz","fileCount":582,"unpackedSize":6976001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKZRtCRA9TVsSAnZWagAAZrgP/iYUcmIm+YQEo/Y3e94/\nlT4XBhJu3OLD84aSg4iBLP4JALaDXLWDM6DiAv63px/ztLRPmXHR3Jk26x5U\nRdssuTLJlgK5ohFQprb5gizol+fOu+Lk2lFBFwQZWYT3az9IJ2lE3iADi1zw\nZdd35O3DUDcIOi0aZH6jRQhEuLRM0Ra9fV7ADvo1PrQ1aN+sRP4l42SIKkLl\nQ9ch4SldrLA35EfDQSVUnbRKzzDWgFJiYV5jpzAjqYloHRyxBya1lAoUeVRs\nL+nziYKe0GDhzHp19eqLWsT4gBTADY+tHTHYoJLKDfe4q07VwVrDtM4nrtFn\nwrye2Hq/Nn6XP3oYQvs3os8EZitHiEC4Bbe1DwR7yRxoY9rPcZnskcI8tE7p\nUGJinXrGkP+Y+flaGO50AIEpE9e7ewhPdNAFvO1jhYiGlrzLkV7+GChCX7dC\nkXFJgBNvHzYycEnqFJnAroy80gPSfHSivW8wUDbR50vn1KHUim4knPQAEciA\nx6xO4wX2zjvtW7sAXhNzKtds53sWBwIAizUoWsI9YS75hO+Vhtzp6PIYwlwg\nbH6QjsRHU/rNXCGem/2FWP+V/aOH0LXmfGH45cYmmlg2Ocm7+T+sCTd51adm\nCI4FoyBz5I4wWzfuwAUA+Cqx9dmtDEVJGdNHts/NGQPHPqsZDT58mhFs5j9q\nksdE\r\n=JYrI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAJK/Pm2HcRckaVUSpBjRPxmNnigHDXM7m1spccMFEUwAiEA63nKHzaUBL3OgpOOfG1YaCR3yroOUMEjbBkt/Ryp/kM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2328-beta_1529451628657_0.8464131633173679"},"_hasShrinkwrap":false},"5.0.2329":{"name":"meetup-web-components","version":"5.0.2329","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"f1922db3246c252498e419bf4d54579484a80dee","_id":"meetup-web-components@5.0.2329","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iDX6w9Tl7gAUa6Mj0DplhxntUlacLi+83rBiDok4LjRXOTGnXRNSKALxMELxT5vM1KMo4D7A5AIkLx0SJo89Gw==","shasum":"314a7333e1e332dec4099db0edbf779c771ca238","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2329.tgz","fileCount":582,"unpackedSize":6975996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKZUlCRA9TVsSAnZWagAAj3QP/i3m4bHM6Zv8j3y8vi62\nEiEKID+IUmZoRW9cBtdWVsHMzACAO7Oc0JpzTs76TX/RkIbPZ+zW4YgvTM/G\nx7UCrsCsdvdvt2Ohdzp9Vr3U/9Cd8228KYOxvy1s0auluZDypie6eL/5FJJ/\nSV/4vnzbTBjYIVii6NnN2OknKBRi6QTIMOt2ZXdCmso1hcwUQl5OhBYAH7sP\nvpkSykTKDd30EqD6LvRpQXSNiJrdbMrpDzHbLdIcOhK1uoJHtLIIYiwKOpXL\nxuNIBKYGKNC1XpYg0iKO1a1DKnKJccMpjK+j0T4lQCqJpFYkLJ13SVOr1ra/\nrKB+q5B07w71dde0Zv8deKIxJjT5elPKa6DD0VBHCYSG36hBNZ2znnNZ8yFY\nGGkTbM6M5gXZCwmIY3JTZ2bjM6MbTLmOeQU0kAy8/yc5vgLAkIqe0EO5KnoR\n8VN/edQEYP0iAkN7hTCnNg39ChDLp8Dy5N2wNHXfryFRdaOLtynsPplmZ3jp\ndijyHAFIqtvShvPM60LEOQprwbqSQyn002midszbriVVJ8yrLSZESHRB0Qe4\nw+RWfJG/SqGztEMm/QiPuYmlDprhO+jvKjToczYVRv5uVUen5K7cCU1pSoZH\nPP+pg3HlD6ISHUEWFs5m1w7OmES/8ZEZiOV5pX3en9Div9ClHa92S0TiVVT6\nUCjZ\r\n=VOSO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGv5pvYAIwDPOcVWPJs9Er/XNDxbu88hqZEBlnW5U2SFAiBEtfRxOipuM8J4qhM56uCDUzl0S/red0eMN+kL8R/sJA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2329_1529451813074_0.026025489789822442"},"_hasShrinkwrap":false},"5.0.2330-beta":{"name":"meetup-web-components","version":"5.0.2330-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"d8d59e5b0b233a2b79c4042ea955acbe59ac8d30","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2330-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gTCQNS/HRz15t67Dw/eEmEuPa9Cq8frZP89FOkjFQgQL6br0TfjL7s7bjZO+61SSwS09Nr3mK5d/kivEEmPh4g==","shasum":"d742f2486eeb1b2e6275eb5c1f56e1dca93c09b5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2330-beta.tgz","fileCount":582,"unpackedSize":6972593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbK/QFCRA9TVsSAnZWagAAnvoP/iFYUrEBBT7uPb/6YZ7a\nSNSqkAYn6yfli2o+2/0YP9Lvq3M3aRbwbX6xoYxXPJB5aqLFBa1u4GH6/Ax/\n6KYiZXFI1/Hv35MAyBxJNqpAbJReJ4GBkp5XYHind5t3IAg3zDqU19jXhtVp\n5lS/Zk52ilcxFYtR/PssEmRQxlzunehv56Uk3pC42vy0ebYsj0l+yesgKJr/\nj6IvtX2z8po3qZsuOD4c3Z8o8vgfph6/S23pNuJ92rPDCZhdNjg6Ru0Rget3\nU3/BoBiZj4ysGPLJLUzc3WyOnS/ord2v/CXL7CHmTrvmsPP7pzq9pA8cbKVi\nMFIlwfB8JxhK87sWZMyYwAEHKFT+NEr0HHlJDIh+sD7dhmc8X29DQp7Ula3z\nm8YpimmxQacZr4y2p8Z+QoPIFsPDUmnFxyuFrRA54c0Nn7AXpWs7P4kYonnj\n45Q43g8LRep7+w4JayHxYcMSw61Tn80Uoy0BVKN3X3B15JQHg9TW4k8GxKCt\niaAcEb1DiPRn7qFb607oVo3dTkmZ7WXHipqeRsaTG3GiKkZyaah32QdDAHSa\nmVm21t0ySEuzy10RPv9/vCU9GoLyWQJIxBvyDGs9kXv23PRKVtc/9NYcl3Gn\nRIJ0R8RTY6zMNBpYNz1Fq5/cJovlhVvC6pV/dNBh6s4XCGXWdfaL/szJ/LN5\naGkS\r\n=F8fx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVbbssst9TdSAPYP3Z0fH/VNzXiG19hiGwZsD0cTdK0AIhAOO8S3xiT5F/PPTLOYX/BuSH6NuCab/R09V/rtY2C3KO"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2330-beta_1529607172716_0.9929075882864011"},"_hasShrinkwrap":false},"5.0.2331-beta":{"name":"meetup-web-components","version":"5.0.2331-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"60e679d7c140fad655887d9258a474a972d3042b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2331-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0SOsZCo7ZjuoYXPBQnvA8N4DJRy4lcRaM/87RZhFPw8zbnT0+p3ssY/DyECPVpsjtVTwyzucAHy8v7ThDclPZQ==","shasum":"4fd9e05726ff9db9cda63b640c2d0443aa891e00","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2331-beta.tgz","fileCount":582,"unpackedSize":6976916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLC3OCRA9TVsSAnZWagAACFUP/Ajhth0lwxUmEWr9tyki\ntD4yhWlDqG+IaEWrPt5NOUIC0hHDOJdR6DqKpqny2VHFi3KGzIpuHmHiGqeS\nHgG6WxWHAFAF3mTQY+qTKY6Ua4LwnY/ZcRAKaA1XS2pqW4+B3M3J7oTXkfss\nPgziHa9PTPVdEN5AIPu2jtcK640QLsRlD+4f9B28auH1Ttb7AeagA9CAKarv\nV+cJKrisZb1SsW0cClyi8fMU+9WlucwWqPyzZQh6ZesN60VCnkzdXQ+Zlrbq\nWO9714sWDyiQkRLn+2GC7UOKLISXAe2E1CI3geoL0Rzl98L6WWanbrMhFEkB\nTXpYWmg+WN4VM90f/anc0vcJVNYZYkZTTsqPtoAzc8bIfGmRPN/YBDwkT0oR\nKDF6Ker73x/UhbnvIgfEgq4aGoWaZzLUswZBKQl2cWskl/UQKEiATSKdcnen\nbjoOMsmNxwLhUQ/CUJYS1tdNYeLN7YpiHgOOh8HVTuCp/AZQtpnueEwYxR9A\nf3ylM7mXeTSGf8RZSlm/3LdyaxQC+NQJb2REr8VS6FXxVA45mUO1mjo27ksg\n9Ug6CUVujkXbuwdvrFsk6SXkTZ+JddzyLTaep9HDHYSuwBG1vMlS10ZQyf/8\n9JcxxHegDhvI/UWPa3200jElmiHrxsGH41QzU1hxp62YK3ybhSUIS9aGcbZD\nTyoB\r\n=AZGk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGH3JSvuaQWQozfNUbiaOXrmmLBgc+1szv8+w+kxAI/fAiBKnIUAec4N8rhY/WNCKs4gmRXobVVp7wbwQ47z34LGag=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2331-beta_1529621966262_0.5299021828170327"},"_hasShrinkwrap":false},"5.0.2332":{"name":"meetup-web-components","version":"5.0.2332","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"902a1b25289810ac567ab60e64e5ad8aea350261","_id":"meetup-web-components@5.0.2332","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LUBj9UDXh4ceyDuOYH58AhoXv8YFO8oX9ErBii82+BCTT5+oqlWb3l4nYcp6DD5o5WisgnjsHpWK6+q+tJZxjA==","shasum":"c79ff1cba306a35f3bfb829a40f2cb7bab1e8b42","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2332.tgz","fileCount":582,"unpackedSize":6976167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLUybCRA9TVsSAnZWagAAb20QAIc7Va5WuFUyaJl8PGpx\nFvi7CpE47WlCzQJRmmh2Mjwg2m2Ex7wr+wHu5EEFbTvNrB4U6MtyuPCsc2W1\n7QF9bnhBDwJax6H3oINLVwtiKKJ7yMCVp91O1hXTVWKa+l+Mx3+/BSjZoGTv\nRittImbYkMsAG8Gbcl8Xc18CeNGa0DwruxWsoc/w/mtRBftZResfl3hGEXie\n35e5p1PB2JDBEO6/YooPYee0igQJVWLRpcMFFeNFCLD5zsFklsd7i2xYAvXx\nXwAsp8iJy99x9YCrHOH7HjwcpxIFetT0lY1E3eTEm1toWXIC+QkId9SiXiEI\nmO66ONiM3bSUvyNx6mqOY8jHKA8/kP5sg50IGlnwAOp85sO/itF/SZOapk1U\nAcSg0dtmU5CxJavlma+QMsSPmORV/AgVxSqm7L9tCZr3Y9PvUDYLvbRd3GSW\n9/ms/Mhvpbu5lxYW7OAz6Gj7UB5pSo3MdKXdEJ3eOauqQpkT5h081dphTnhF\n1xpBZBZfFC8MUh9VFkUFaA4Ar9v/0rI464aB0d57sl1QCy7boUT5L9LhJO0L\nS3vKUAiQlZtLUvqYu/J+PfGhj5x1qHuJH5i6m1tDlJTp4Vy8tRX8dVAg2Bem\n95pluKsaW/AqDE60wZiC3bx9BtI2el1RmctW42S48Bza1CATk5CXII3YP0mn\nLW0D\r\n=y2U6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLmSAQy04xJsysavmlZKI+uF2NjAgNH5oXRUyeFZ0/WQIgdG8Y5PZof4MbEI7ROuaxy6gIyLSeqLN+UIrhM2JO+us="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2332_1529695386832_0.7296481323026216"},"_hasShrinkwrap":false},"5.0.2333-beta":{"name":"meetup-web-components","version":"5.0.2333-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9a9a79b3ec0f9eef28c3ad3d7df5dde1974fb7d0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2333-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-83ejti20LbZwTGeZ1XqZZ4XEpK8GZsdmVgwJUxdR8bgLrIs63tj7MiUoSan6MFZimYLoEASWmbtyUiDdg28rmg==","shasum":"e41dd845f0f51eec3032f43b574defa14c327307","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2333-beta.tgz","fileCount":582,"unpackedSize":6975036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMQ4VCRA9TVsSAnZWagAAg8AP/3cpNBrUcJwDn6TLnU9w\nXtrXLJd+IvtmZXVihytcCzNecgopmWpwGo05NXJ8Ur5sq2CWvTHqRsJRMMqC\nYVP6SOgHhHXuTQgkgjjVl514GXmdI1NmBy7peOQSHjroogQXkw64HZ5CPyLa\nvX1u5+/U+OLu53w3mQGg5OEyw2b9JEfNQY7kxiY+UOM3RL5xpic8nCAOz/Rg\nxosXoE7CBN73b1MP2Oiexd4Dx6OXXmuryqEr8fzE++hZWc73IxE2CuJ7VKw8\n3Kowv+vOneVr127RvRi+DsIrOfAeU7tWmm8QSFCww16LXxq6HCQjUgoxlbWu\nVFkNkCELO5l0FezxKFfoIrD91aQFDuHE2flJpuaLKgK0uH2tplEyvYcmIisD\nXPuNmUVn+iWqA4dQeiuvUN/JDEE8RlSjLSgZnYMILHYYGG4uEztkVcBk/gLp\nTavlo/IKya7lSsal1xklBba24+C0gE63Me3aJUWYvjIsl9YjQPGDOPqUiTJ/\nYsxKRwphfuAebEDgUzCwAP3pl/VSFsKW3/Ek7ztNtpGM+esUElmVV3tmdMpS\nvtUvD851pv6aWwxu+r2bYnTMYPBzBR4vB/3z8J0u+jdMq9wGOQ4OWDqI7Ktc\nRLdge/DRnn958h98An/72XZZyedLQX74PwJs/FIDJw3kXa1K2GLt6bn8J6oq\n3ek/\r\n=Ae1N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5/kRHj+Deax8mMyX8nDFjy+0qAc+Fy+WsaTbM3zJ98AiBv8imo18xU/KnVLY1bHAzI3uAnLjK06FOnPgPSqm4Rlg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2333-beta_1529941524824_0.7187837407803048"},"_hasShrinkwrap":false},"5.0.2334":{"name":"meetup-web-components","version":"5.0.2334","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"ce00268d05c9c5b89bb5a0cbf3fab9d22fd7e906","_id":"meetup-web-components@5.0.2334","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DoQaIaFoHLGjNOlZ416XKcZPwQh+tFciDLueULPL6HzHWDIck6p0bCmgfJz2xZHoqjmgVSlpWmU6yfZExIv3Xg==","shasum":"c80e54bcd4f8d337e51a22c5a44ed25b2a656b83","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2334.tgz","fileCount":582,"unpackedSize":6977082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMSWsCRA9TVsSAnZWagAAD6IP+gKv2FQMT4pbJJMfOS/t\nKBP1M1OU1/lvKldOxAm+CNlL+PKBoyFumU/lLR9Bqf8CB4cR+K0JOkYdZQMh\nleYLIhlPEfVWElCUeRdlCj4LWOgQRciXGate8k4qJz+BGkFyukeZc0MyAnQJ\n8NfTA/YMzVdyZvSLcbBFC6V6htFOog0ZXJNPWybksIRWVTufGe8f0OtdTENY\nk/K6zkkEiCIOMU8tKMguYF2f343sSBBAk9suqWc+bKCBPVBAt83aZpncuHek\nijZESw16XJlDZGFI0gqxxZ4PyAdHrKUpnUfVndxlDDk+ryxr2WiRn7SyWWwm\nLpEIQ5rWG4l0MP6vc90xIVfQkA19y29YCYkDwmCktWAtkp/RjTDTKIeNIqdd\nhACRaIImVEXfd9LeAw1VaojkOJpTgzVpijPCCWP6elxU3YDBKA2sNUbHLT/F\nXJqCeXtS//p+JLUZ5QpLJCi/rMjzz0RjGlDHRVwBy05Thc5zNQxkuCNBcWCG\n+1ZYpRsoyj8tBXhsf5kz9+EExupK/aSaWR/Q/iGRm+J3feDkEqpWyGt9YWYp\nVa3aRZVQpMjjXLHYhBxZCC6PJWhRQCgdmp5dztL5b1hnyNLF5aGdFq3t9wT8\nkWp6/GOFxFbWx+59NnHBerJgA2SDGQmIpBiUXJyyCeXrd/0sqrlK03nS8Xrt\nLyKD\r\n=c/Ff\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSk40v+XagEPFfcFz7O1KaiDpgGtAQxK2XczBeawnjAgIhALPeCPxQnmT6mPbEIDgWTM733qdrdTIOXfP33o9pIJfg"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2334_1529947564109_0.394700921719622"},"_hasShrinkwrap":false},"5.0.2335":{"name":"meetup-web-components","version":"5.0.2335","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e5d1d49a9fea798a6e7790bbdb3962020be0fbb5","_id":"meetup-web-components@5.0.2335","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cIMQ1DuIXLj9LAE6Af/q0xiXvpxHZmAZAunx+v703chmxtRH6UkSbJw+c5zsWislb6HwcMhORtkvXBiOgPHgTw==","shasum":"e9be57cea4e700d6d96d5190ecf9abb97b62c2c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2335.tgz","fileCount":582,"unpackedSize":6975946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMUuCCRA9TVsSAnZWagAA63QQAILrI7iPn6jl5ibAiw+n\nHnHCCaCtsYNUlcBk/n9ewJR9S0I8O8DXQoIIZCx6S64kYfd6VGO5UGU/dEuO\nAPyitwLKB+DWOOsLJ4KU1YEhOFsXuxOH0c5VfmP+VQ/bEuFRe01KrgGJwxYS\nIrHrYH68nKgVJ0ZfSr7Nd7trrPKvZs79lttPLW3Bh1CAFZk4zCliotArJVeU\n0EYYrSd/56lfSXA7hpEGuvkmMsdlP2A+7CI0nA353VEl86I6Shq/XzN663BT\ns1mIlTfBOWVCC4dEMTDwTYDK7E4JNY/RSCdaW68MgaojNgN6J7vnu0ay1pOn\nB/z0fG7iEGIK0l2TQcTrh5gLzsi2FgdZt3XJJxwW7L/DLwxQjIk/oC2OA6w5\nOsejru6zGy0y6w8HndSb5VhDIAU1Ecm7Z9ZJt22q9QMnJJeCRFcoaD8XLY8b\nZYcSpLM9EzoKL+iL/FqYNmB90K7zeDdyv4cU02CXS9GGoFWHuno4VbGWyML5\nyiW/7dR82zNfQIXu6gP0J7vSvxpV308Ym1jJ5F5rmyioZEL75yJLNCMvy9xe\nq5TYRvbkfGDyvoXSdnVimrQqS3PyyK1qAaoz2Mp2WpAR49pqfhb0tGchz3bn\n8XQVL47ehVjrQztnM7iPWtvu3C9L7IlWOkxFcJ6ghfd99q8fkc9TFwp3om1E\nnXQc\r\n=M0aV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXu0IWgDG7nKmvvt9/jnC3/Pa6egQ+UFu58PQOTHqx5wIgelhERi2Nuss4BJhhJHXmVGtHHagRNAjn0Id8jY71S1k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2335_1529957250283_0.1375850933102567"},"_hasShrinkwrap":false},"5.0.2336-beta":{"name":"meetup-web-components","version":"5.0.2336-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"b42e8d0d9a5914a93c08c08a90922ad5bcf5d223","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2336-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IvHQaGX1+3royT5wYyISgohslergTjQ0mGv2Gq1Qckibc45i3x8KbZIMZBLzv3uQ2IkKgQQJYj9zjHLjE8Xb9w==","shasum":"b8a43c82329ce1c05473c5f60d623c3cd5851e9c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2336-beta.tgz","fileCount":582,"unpackedSize":6974322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMqMSCRA9TVsSAnZWagAADAcQAIXah8yX869AAerZLTVG\ngrug2aozbYN22sZYWrrhYGHDBBALX39PT8lzN2dsVWJh7/asjajZQ1oBfTf2\n8/YABsfY1jvtUfFyLVktkwKnqAfWyQhV5b4Sw4WUN4Ejn/LM/M412uzMIjXT\nx5+tx+/t8jGsfVepbvfPLgk1LDzT8kjtLkvPq2oVhuW7VyqWqWForUjGlst/\n89kWP9xU2/IXQh3VXjBLEGW8OvP/XHgTXxDZnpY0Nmt49Z+VeaXC62xLCk0l\nqOD9I7hHi67tcVqYFVJizsh8eMqMxFUBUHhJ4e0GQcDiplkPaGaJBMbT9lHQ\nfDX88rkrqUzbSUTfjdXubaCC0tn8bXrP8lsZpIukxywpAekLIWbrHNz/sQPy\nO0txA6jLHuVqdDelF5Qh9hcFczUxG6lvpG1dMlFZv41rhke4EokrTUCT0jQC\n3IBkLEsPitwbPVioNjHN06ku4zQsB/Wpy3U+QyO6TOvsAQVvaXwNdqqlhi8C\njWuwkh2cdfZZpB8kLOJqXQ0sstpJmRL3f99kXGIdm9XpLOkbZF2u38/3lkBs\nZKrMrKFjMyVAre/+JRFV2HUBl1kaGQ37c4rqFI4SgK64gPT3vEGR3FmIBai5\n9/0q3CNjX4TWfurLgjuEzQTEXZggDVAVQgiWwA8QwWUKgnKmuBQfQ7P18NL4\noTTF\r\n=OIdi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+D+gg0FjKFHk6KE1AOxyKCQ6a7+m3TFXZJzm8oxBIMgIhAMgyyWvFGNua7SO/Z7wmbiRCTuN97pS63ookW5qs+xeh"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2336-beta_1530045202264_0.3399054403014372"},"_hasShrinkwrap":false},"5.0.2337":{"name":"meetup-web-components","version":"5.0.2337","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"ba0b96cf5fd278eeb8e2ae7de4b7177f4ef03e40","_id":"meetup-web-components@5.0.2337","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RHWvepQQ+WvL8dBwkPULVoKsjAZ/VpgkyPCvjOhIZDDRyonKnI9PhtnQaQz8yEATnxVpTFPT7UcoAq9w0mXgUw==","shasum":"dfb285a865e54bcb81afa375792bb6a98217d6a2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2337.tgz","fileCount":582,"unpackedSize":6974317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMrQRCRA9TVsSAnZWagAA5GMP/3jXG/HwhyvRl03OWzlo\nAb+lux9zzs2WPJMGb8xY68yxZhtXIxSSSFFUhljk50rc98xZG2LydMyJA1/B\n0wOFTrWfHT1Glg4Pj2SE+9MXjwVildOvtKvTxTaWqhY1JDW++ubgqN+Mx00e\nJYDx7ts3LzDzdbDOIFGDgJpz/zwi3QtA2wx/N61XUpjx/N8m5TeZWaVFnhN+\nLWZzbIBzjR1gm0hg1TSSgeAlxUmFvskguq/9guTiWqXrJLUh2dr8DeyQQdo2\ni+zLQhtNbQzunPRTrZchurGW56rGpAflvH6DmfskavwvPz4ad+qQhfbKP2Uz\nEiL+3K7Xl8nCMiZwDtcGuiyWvTmh+uE2wA/oSXJQ3WI8WSx9tXXZZZW8rMcS\nG1w8tt1w+brC2T4UZzjDY0VU+GMWA31lXjRbAKgRgMfKT4ltQdgZcKUAkkbw\nhXcbukeIQG1N7hyIbB6UzSlLB49rf9vNwOVBsSEpdqmJATQZJDGCJQkdB11J\n6FXuliUuNVb601DtANq1+mOUUHDc6OpapbwU5lbjbN+Lrs/7uDs45wyLiIG6\nAMBe9SLaFSHxcVh+RT7oFdda4GoTAXZ9SElp4EYVyw3iABaqKpW4nyKXK846\nbjcdQeWC1XZsslXUkzr2werjXGELeBgJUYJXTh89oBWpGSxOmx6wgCpDeVAE\n7LqN\r\n=emjq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGK3+HrMit8ccbrfu9MMew07vhk4aChRthia0vVh8IKfAiEAxP6yIySfnqFbvqW/nw5kK6mp2n1BuPl3Rsb9Nm00Tic="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2337_1530049552997_0.9905897148727874"},"_hasShrinkwrap":false},"5.0.2339":{"name":"meetup-web-components","version":"5.0.2339","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"5b7f789acb0e31d4e54119c2a87f89cc93dc1270","_id":"meetup-web-components@5.0.2339","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-WtWP+fHp62txDYoSk8LA+cSC+rRpnFcZqOrq1euuvCYxXJV5zw+py/aO9qpTEsHqZLZAweexGuPz4iiPeP1cAQ==","shasum":"258cca96d21420c37eb9a28ba977916d335754b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2339.tgz","fileCount":582,"unpackedSize":6974470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbM63GCRA9TVsSAnZWagAAIU0P/0jMzrwjn60x7NwNoGAC\nmi4Asz+g5LZjihCZC6pei544oF2sjtAwwjRGzhNxdKBJVsIMHPzvghMbF6mJ\nKrNn2Ald0T+T6atYRn2qtF7DcwiMs5ab22Ub2zIC0cBGcRssLnn7OfDISpGn\nxu2zaI93hEd/85MA2ax7J2xezAIrzwgGNlgGsqOuH3ogl9/BlJYMRGz4ito/\nbFan1COaOZu0cHWCnc3Tte6yziRP9ox8Q/3X/E/vsCakFTNm2gFJwvsfchDb\npbCxxRdG231TB54wop02RDNJhxdVUPewserpGzGw3iasZbwDDVuLjMe9L92H\nRrKHo/Ah+sgBsqLvNFZAb8WY9h/R/9wq5KDXj0sLMNYE+l4h3PsC+Rsc74EM\nmTRFzJeHDGXlELn2X6C1O653YdxJtjh/JIcIKK6e6fx3sJ09CSQDLD2RxAV2\ngINhXQQzRyOx2RqMDwUzjewX6NK/2ID1s4LOHndsOM4C/z2tcbBlp8ErCorZ\nT9WPjA8Rh/KGKmazkZV6YkxY5ajy5d6Yf2XuPWmooQC0hcSuzqw+Cxrx8YjM\nTjGeJpULuxFSXDvvuxHdp7BFA1hbNjud8958Q1A/TxMp1Q1h5c3dV2LsMgg/\n2ntEBzVm8E8y8jVKBEvSUWoglsl5VZ10bCAn8++oUbb032RUNSr1Jv9T0WKc\nAa/d\r\n=ob1q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDOgLG1MX56xpNiIymRVILYgrRbOyZfdgzwc/Hdib3zdAiEAvUwVQ7Jx29xPFy6ixsCQ0IB6OXcTL0zUDL40JOJ07gE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2339_1530113478341_0.7441420202310327"},"_hasShrinkwrap":false},"5.0.2340-beta":{"name":"meetup-web-components","version":"5.0.2340-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"4beb61ec01d28502b2aff5e160c5a75285102f27","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2340-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-PfFwspqME7G+fOcB1Vnq6OZ9m2Xv+rm500ijLzpulZduZyf8O0XdJfHJNLZUeZHr/ts7q5CVAA0TtB8XnGQMzA==","shasum":"d35dca56c8af4a54e94c05fd32a59ad9a46a0e84","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2340-beta.tgz","fileCount":582,"unpackedSize":6974927,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNn0oCRA9TVsSAnZWagAAJ3sP+QHoVr15+exaHdZQGx+W\nhcp6kt+iqkctqsi137eQfryW7yT67LCTUuao+ZKFqFNREpuVeEZq0niUKKsx\nhq7Ud0e+DG5KFOvzpEpFgceIc70ab53SxS5B8eCRtm4VRL4/8K/S2NflxUdy\nm/dFhfSWqrfhDg1/jU9WjXiGeYz2vuzaX5XviimsArngcX3AXNE2nXvqeAnM\nbOg1wPjaRwW6bFI9U0wFKuV2Mie/lTFUs6h2hfsMoW8PcrhUJBTqSsH+mf2D\nQUius8ldag4Vs0BzbETJ0egcbL6rCNnzExtLzVrBgvWoXUTESBlRoZ3a+i91\nxO74Ba5817QfReZSsZ6w2A4AeSuJV53gjtAiky81ERdeu5H+gSBP8FB8PbTY\nXgDyACtKFGc6GVT+1WoH7vHS77Fc5bWu/TBxgdvArcVFAKd6OdxLp5Ue/0FT\n/pxwvpGS8VpNRdQ+7BWH7Ah1uQNI4T8CdB8LqTfNCRb3WE5Mb2Bk2pENIo8w\nvFSuqrVEcYunv+8VeBkfBt26N5GSijIdTtWNdhiQdsN6YRpr3MQyCrDCF1IA\nNhauNAfLJATD0Mg6MXOzF9PkhKQSGOCRvFtbHtepWWo10Nu5LXa+1P6YAXku\nh998dvQMy0niqPzxdPNNcYjcRrKlGh7v3ztLsnrl5XD3BKHnK8g4FqTkibWk\nztj5\r\n=4/Sg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9IVC25Ht+ShKjd8JQ52xp/iZ783DugQ1cqLga1QcRLgIhAJOs8PunAT6/dvE/lUhDz/1Iswbv6iSTGRxp483S+sl8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2340-beta_1530297640779_0.42812804446429253"},"_hasShrinkwrap":false},"5.0.2341-beta":{"name":"meetup-web-components","version":"5.0.2341-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"11c7726ad6e18fcfcb0019596adc6da01c028388","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2341-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bZtmS8nO4WhaYPgvrt9KpIKNm2BKLeeZsEpoyWwhvIvr1pjnzCHzcylIunFGHnycYqJMjK2ZIIg4pcHuUuV75A==","shasum":"ba425c16a2e7dd2267cbb924496f2bded027587c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2341-beta.tgz","fileCount":582,"unpackedSize":6975148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOmmMCRA9TVsSAnZWagAASwsP/3INk32fpp6XU/CZIDgM\nTSsM1+X4wYJLOScciOeKi8KagjkUAbsATY0UwlxRWc+KYR4ZPRpvIwViLbIn\nTudPG+hrVLo1X3vevqZP0gV1TQrTyNvREpKPjCUAW71k6h9IsIaOnNOT0Rq8\n7QlZIoDQuvg+vg+C7TH3RXbhLzPsn5dFstsvwIqMTYzkrwxDaciYXjjDR5nK\nF5nGI7qQvSGBloa30Q1SN0bG2zPBPw1NNg7XrZ5qp9q0l5BUMYflkFY7LKma\nYStfcGWf1gArpMm+vOWvb9M8T5uij3/MBbbQNLIIKBP2nabl/D2k8c4b79SR\n1O/+82dkbbiUPhmlz8dSy3qZZ/A2kvXJp4inqJo0C/WmXoDGRmhD9XzWpnis\nsncySm/dCxVccHOkDOF1outz08MgKeekyT64y2SdQovktABVI/oMAbgDA2Hz\nfSV800zLzpMN5boXmB+Mk/R6C2q35SzQ1L/zHCDXGfB2Wrb+s0oIdH7c1FAq\ncEodVcclckfN7JT2NfNu4EKa7BE9oPURXKDfsFIoD/4lq8OaDxs2U2Lst2W3\noEoxZLtqtb301lHpA5yNgLsDXpxP8AyxfxjGJwn3qzPR1VyLwnWoXq3ezVSS\nFdREvLWoJCdvl2zYMEca/1PxzyAbDzpBuYO4aiWxQYvdLn7SZg7aqiodoTa0\nW9AW\r\n=CfJK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8pSUYx+XiriC0eEbFi5LX85/9vb7ElFW+0n5/BKTc2AiAHZ4uGPLXbDYfUUS9lcH2HtH0o5S1ib5HqEwyxerJbAA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2341-beta_1530554763880_0.27119811234023694"},"_hasShrinkwrap":false},"5.0.2342-beta":{"name":"meetup-web-components","version":"5.0.2342-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"8c17dafd0c920499d660b3b35bd211c4d65effb2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2342-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tOIASvwHwS66rvjYC6Wb+WAdMHj42XDMTGDGplFlTumrefQNApyWSZDeSucjnR07MMIMb3wa0NMQBz2IYU1p6w==","shasum":"d25da58abe8121be9cd353748031e871bbf27746","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2342-beta.tgz","fileCount":582,"unpackedSize":6975277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO0nrCRA9TVsSAnZWagAAY4sQAIqf6ab9gH4cUAvBSUqL\nBDog0Xyyk1ojr7jAA1v9eA0sLUym0Yqv4r5zuf4+Vl3dYLiREtH5TTr2i5xk\n6tzlVaJGjtfz/AFR1j2livVYL89YEi2dRB1fjMml0cHHSfm71Jv9Yya2mdty\nN17D7QCpwJoxHVpsaDuxdg+jEcdVF01W0F5lHqJFzz+gzUD7rjCDMvyGmoLr\nEeTCDTEgzJJtc/+PPh4onhT+dKuwyW7BEaGwYEvREdLiNPTlH910uE5d+F8Y\nzGNSicsC3RxBtPzEOkvh/xnzt5rLVAxliKjyd2IR5IzkRfyR+ITPFP7+zWXk\nJ89ynjwMHPNk+4/wMycUFWfSMByDG9JqtunYNFTweEQcHWyi8drv1I4oHSsW\nfuoYHwYhgYrPGlABUygScUTd2kEFvVHtWBTd6jSH6Hj8txHWYvsAtDYoAVJI\neOBNn+/p5CL50uWod57xZvRtgO4/In2ddupYsMNzxJKtq9FooA83fhnhGMDL\nccTHXymAw+1si7JphXq1edxDSxw2qZy1oHS8DV4QqEkQRFBAkLdkDczLHGhn\nIQau3Q19J5jmaOyVJNLe15HlUffhB598lfWavaUmtnbubJVTG2P+Vqf0nY1s\nVeT/BaeDNeumuii54W4Hbz4+3HYJH+rrtnqlG/UhLvtcayXHRXBSJtjUdCWm\nvkly\r\n=ih/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaTlotEGTRqr2chSolzUJaLkDK1EJKoOqmHzYi4WpV8AiAYFhUqjU+2gMDkfo/KCfshZY8MP8aqbIev0GD0v1ppbg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2342-beta_1530612203670_0.3699847768285105"},"_hasShrinkwrap":false},"5.0.2343":{"name":"meetup-web-components","version":"5.0.2343","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6b96ce1b3c4d0bd0224dbc7f60e45ad899f61965","_id":"meetup-web-components@5.0.2343","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-S2Zk12115ef1RSbnI+aOidrlQI942GHagd7x21CBQDOt69B5R0mKCDUa2efsanFzzcAFyZ9gb92DdaXhtxmZxQ==","shasum":"c36cf788085482bd71f281553f388218376689bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2343.tgz","fileCount":582,"unpackedSize":6975272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO1r6CRA9TVsSAnZWagAAj/0P/03wAX0i7UBIB8KiElxK\nDhx2zIAik6/d7gZOZFQDzFo8dQ1stL22SrzQ9rjGV/uzHBvYDXVA1qAgyRbX\nvkrMWKxiE5V79kNSF0tUAnjmyIE1uhvq9s50dlscaUw9mruTlU2/YlIo2ElM\n1JACBglo1We7qPYHLS5ePzMJ4B+AcI1lgVNg6e+xeZyKK1Ze4ZO5QMC4kB57\nsavmVxPQ8kJ17jtaf8H0PA3hYDyKPHAYBgO0Akr03L5RzUdaHq8Zo6aHwMoo\ngjHnrETqvs4DI9nJCtBsvUq65G+wuORMYWaXEfeK/rDWzFjXbJOha8VMk4oB\nmp+xbBLXWIqpn4BNLaIQ4Y28vA+Iuo+2WvzS8d0TpVdx2O/W7+m39D2ilAIt\nsMi4q+yTr4rxXWSEiMMZuAJZPlW9OE3E0gE1/Jh5d/tdpDyFtV/J0WDqIHmp\n+2hKsYuZDhPt37llYewLQrvmnnfAYufMPXgEjzPh9hB1DRU+w02n0uhOWp3+\nsou12MBvqvJki61gse2ji6ez8aNqBbYIa3SA6gX9IaJwIUMtrFLNYLlmggjd\n4f+ACfdQekjG3n3jU07C2ApeMx3MHXaTT7DC/cylAkliqHVu8V9dw4ko61vl\njC9/ULGdgFzB3l2A0ECyf96Dz+BADWYKY6cvXJ2NQlFiNgzGt16h0E4iWw7y\nkZo9\r\n=717F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCC24HPKLlmVVKIRO+RRo9LJM7QSUOvnuiFXv/HyZP2igIhANf8+idamISu7g8ENMTmQH8TkCJ8g2eafCwBhNYev9g8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2343_1530616569790_0.20043019343919055"},"_hasShrinkwrap":false},"5.0.2344":{"name":"meetup-web-components","version":"5.0.2344","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a1c5aee95b51e294efd9aeb2a1251515b24ed98d","_id":"meetup-web-components@5.0.2344","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dhXK/84WKSZgyzgcGyu6mXnuAZcAFrmycyFAcR+EmCkVayLSfMWX0iLmFh5jodoK6NXleJN/uALinE0h0Yg9vg==","shasum":"46ede5a1eaa565bce551d04abbbbffedf0a4f1e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2344.tgz","fileCount":582,"unpackedSize":6975945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO4VqCRA9TVsSAnZWagAArMgP/2LdtQEhBPKCR+dpNiDU\n7g+hNQzUNqQadpZMzhDUmZB6VRdKFMcGoUW7lOdoqla4MHvoIy4a7PYtHgh3\nCO3eEBqxb8lsxRjMYceW0+cKGDa/03m8paom/30/1OzbXiR05iWzrSWC8ZvE\nTlUI/iVmJpBYAcFi37dC6Q+Q/k8c9lFmlGQ7sZ7CMm9hdnP1i8rk9EXOYKrT\nwQr3Ij9IbT8NNcY9DE+D0f5i7Uu70Wi9OOe9IN7y1JRCvKYKdhEZPsGYHY5d\nDsA2K3ClQHQ80aCCBolTg9kmS6hAPuf7Tkyx3uzWmYU15yOsntSSDrFIoEq6\npyIOIAJ1aeWy/OKNFN7q6pwI8kemzKiFT0EsAU5SnC7NXF3i7/fdk9xtcd8r\nUvmHddywQybYkc0Yl/E1Lm7O47tl+xJtVu7e3y5z8LLumxw+2uugxAr3Rv3w\nrfD3ABgqjKg/dBEnFqtihLNiALFnwNSdkaCoYoo8AurPPMMSzGIKuM6oETiB\nW23976LfX6m7kE2F8hPyssqPLXCkC5jfe0hiRKe6lHhSWvFx7WQv9llzLJBP\nBsKeF1NV7/JVic0QQjs5uFxPr7QKJHFSxmbSZbBS78qRm87cjcQokHbK1kJI\n2MfJTDY8CWns7uKp8Nskr3kP1iCALqNyFFWVT2ZH3NblqsA/TjYrFcrFhAhf\n+7WR\r\n=PmJC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkbpGkFVq59ftW6nuZuPcIKc2shQfi8gV1hccCk5eaXAIhAKpb7wEy9l7irs+0LbnbJmoPeHXtx+NLPXF1zIw2rQVV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2344_1530627434130_0.460364226113952"},"_hasShrinkwrap":false},"5.0.2345-beta":{"name":"meetup-web-components","version":"5.0.2345-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6500c70289d1afe282a53039d7bfe1bf4098e227","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2345-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xBqRZvpDaMaJo5M+/4nNlYfC44Vpp0CuQUh8qXzhRYdQVFnqnDWX8TM71mzf4emyRY90sFPmcktbzruqpCqGVw==","shasum":"828cc4857f4d05818af70228da406256e9114bd8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2345-beta.tgz","fileCount":582,"unpackedSize":6977917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO57/CRA9TVsSAnZWagAAI4oP/Rz00jJzdsEnR4MA1Iyu\nHX5ABoCf+isfdh2ciFTRC2HgjQN6TJNn1KTkNIuJYEzDUE0dI9Ffac5vc1UK\nIaih2GLsi4TgRnod4GJm/tLS5n+glO7wlm11pJoyqn9VEMqcMA9kVPPKTBCe\nHGpdir8OVqm6FxXnah6TeeaW2zNRemGD2U3/IlPT/Kc+kwDnWhJZqYMFsQ9U\nu1HoO6BHnxDQfFnj/RwzwyLGe/yWrO2GCWnVgp4GeITsRJmi51hCvQROWO5F\nMdz6c3E0A6pzjd6YQgnn5M9Th+c2fZt65ve+mXEeIdlVV7fLbIGF220qJizA\nJg6xvK1sr1b7MoGfYEPEkC63/aGx9kkj2wJnzT6WaqjaWmiDBt8sucRwzk9j\nwOCUk/SLlpORWKcpKfwXpP7hW8MXPX27UjeEit7/faaWiIam4Bh2Ez1nxIov\nlD0OurUjwla8YQ8d5adY9dj6M1Hx+rX87TWphvV2oCXV0ReN/HZ7lD3dbz8a\nkoLClaWR9gTlszzEOHIycxlDwUxzkqFQfgCvji6MYoHxXlkWECOUwwvq07Xb\nRs3dAgHpybSYcLKK3V6Lo88pkeZQnjtGM1alAveLXACYi3RKHoeZamxVZMiY\nlwFTmZBsqd85AqVoLjSdc7rGqjaZSzVUBXm7fuCRrWeMZcGBn+U7VntLJUXP\n5Ss3\r\n=oFqc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8TsmOkNFrWDtmF68SrmYYI3iatE+7/+oPTZ5n+wYvdAiAxsLhyD4z/6Nnl0Zlmep94PAUxn9zc3goG9tYxIow13Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2345-beta_1530633983808_0.09988304038645324"},"_hasShrinkwrap":false},"5.0.2346":{"name":"meetup-web-components","version":"5.0.2346","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^2.3.301","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^2.3","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1d04277a58e3f7337e993cfe1779f6e939ae8646","_id":"meetup-web-components@5.0.2346","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cSwukoF6liz/E0BrNIzfV0EMzE+2wr+89NWYge/+qGfEjmdojXnnrNyt7qZfAiJGPneZ+1B+7CoVQM0u9FjMPA==","shasum":"d5443b895461326277517adb816b797f2b016edd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2346.tgz","fileCount":582,"unpackedSize":6977912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO6OHCRA9TVsSAnZWagAAA9sP/2xw/uCDLxOTjBKUd8dH\nBrRHwCDoqlHvma+kldpAqcvemYZxgReQAls7zWT2pKGwo+YXbV7t6sJGAbVL\n6cfwe0DBUDYF+Bq5UMIAbdeRCDgCkDFu4JgHFSQaFHY0Qk98+RTmbh7ZkmCb\nvphRZ3e5EV+twgA89lSp49LSaMzluj2vJrWG2XKEY9IBYICY+JzYs17ymERf\nVjXvXuwME+PLeLyAaVPL+oyK6kpSD4gid7YXzKRYXCmDldudyStUCXMWIlkm\npcb9QP3IgiIQky/LbF1V06ybQ1A3pPdKLxSaVgwKijHTPXCfpehODWzZxEC1\ne7ysLamor33Y85reY+pixBLaRsP4C0jyCP/revOGEKNDOdN3i8o2WkPlP8CB\n8vg7ZaAH9jql9snUB/IbxzfC7trgqXl9u8jqzOdl8fcx1JiGv3WWfvLgRfh4\nUfVsd+hNMRGjP9t8PmgFHntb4DLomEtoyc22Nop4DDzMLYq5izCNufg7Bd7l\nllwlsIAwppQzRXreTMt/e2zTK4EsA4z+7GL9o0ydmgRs3j9NDNaZmVQuu2+/\nC/D5cggYdFvyPreGuM4T9OV9a3CPlcVwImbWqM+K/N4eRqRjJchrUlurp37P\noqp+vI1spSB2NPcQBY8k+1OPpE866UdIcz5MvvI9KDBY4fIO2c219y+jiQPf\nRrJk\r\n=/u6E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcBSUfHtrAiT9sOa1zmC0m5RG/NE2OuoEz59TOq20tfwIhAPrSetT0y15ZdSvB/j9AS1fsci+4jNvVdD347xLjaFCC"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2346_1530635143070_0.7187968238095994"},"_hasShrinkwrap":false},"5.0.2347-beta":{"name":"meetup-web-components","version":"5.0.2347-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"59bfd5e5dac33ac80baeef74bc593b3ff902b34e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2347-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-khCLzciFwr3606FaW/MA3I0X3+0PeEkvE3wIu8v3PP8bWH/XzJ7OjJM4+rl0C1iYunxwZJIzw9zeBvqYMW7+FQ==","shasum":"759a33d5ad84bac173f2ab1e53a89dc0a6929bbc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2347-beta.tgz","fileCount":582,"unpackedSize":6979621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbPk5/CRA9TVsSAnZWagAAI8kP/0JYwjxclOZfdaBN2MmM\nAjx13y4jKugFAgb0ucbKawFyC+cRgtZdwNkLciR0Kq1N8m9SmKvtKTbFeQJ1\npCFJ0sj5g1xfSqZOqXmyC+LoVwuaMqZCBL8xwDsYIU997QXEwL9iG5nmGbu9\nBxXzyEtG9AJcGn4tIeiK+9ZGD2YgcPkVpjh9B5XaHtCQ3wMYKuXMh/bzFtoK\n1vsDNMZ118GpfgIja/CLujMI0fO8sCQwS2eVN7NIaVNy5UsYUlLyMnTzdZ9P\nScViMXj4De6uppYez+9zKIJRWXgKNr5ppI8y6JHar1JgGSIQUejY5rIU58gQ\n0n8K3YcIobmqWJslVEn6JwaEVIMAVKs3OwDBE366g2a2dI6WvLrxiovPUa4u\neL0gTsBvW+IrozbhFLna/P5YLM7E0p0iXN/nx7Xn+tKh2wAhH3BTUNp8v06F\nyG+2nE+bFaSQx+o8ceVaqwLcUy6YY6hX7LEVKF+EiaXvhlh5DHaVjTJyJ6sR\n71AmbbIQAZrpZwIm5eGEUUYAwu8O6R7EN13k6Gk0ClFLI3zUYmEFsIBEmZ7P\nf+ITazkUgs+RFy4vZvmBHCHql0MMUPJdQjcLJzxX2bGx8Y5Xsd3c9Ec9GkYe\nfcMUIIgkqyAVHSGpdOnRuDqzz4qwqpjMz7Dkb1/8rGAajneOMG2X1bxP4nto\nBy9n\r\n=2Xhm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCM2+KgA1ub67RXykcwCC/8O9Y6J9AsynxP08cMFrVCAIhAILQ7vezGR5PjqeM3v58rdaxiKj6FFt7rW+jQ6kw+lSW"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2347-beta_1530809983569_0.4397612312231638"},"_hasShrinkwrap":false},"5.0.2348":{"name":"meetup-web-components","version":"5.0.2348","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"5c3747fa95b63713c97c18449c7e06de0f490a9e","_id":"meetup-web-components@5.0.2348","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iqXNFq1jmZHuTfvQkYBdhKAVw4VuOeg1+0ieTijI0s2ZJUeg4HlbBmCYDXV+p2IFMnLMdVl418h3JAcpBPciFg==","shasum":"a96dff652cd8c539ef1a9ed8b375c2dc7e9195b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2348.tgz","fileCount":582,"unpackedSize":6979616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbPlGiCRA9TVsSAnZWagAAaLoP/0euvBlb18kUZguPfEOt\nqtPY32PBHn58P2F7oeDEgUec2AfTLNBSN9RPAy1YbSyRo2hNfyJZKZGgF7/4\nBn16h7Z/PY/HvoFTXa8Zc6RDLp3ySA+ZTOpBfcn53AyQAfJAEg4Q8YtqDySR\nBEUndoAo0rF9YMtaQcn8GOs6VS/DCL0KoGew80BHKqyXI2R1sCIfgi+960Nm\ntwtfP/CI3b12heZr7FcvOUFzsW052G4j3xljcixYHacMqqvGDcg9AycAnGHJ\nvXeVWrO4lYalT6qwvzJzhJ+cDCAd0KB89qW0vuFq/iNCQUHvj4mib/zn3Pqj\nPqEht5ZSv0/Wi+reRCSv9/myyENo7KlHldUbhJNtQO2Sn/IdVUr631vZxkVY\nAYGJKQ+OwO/M1NCm5h/AOq7lTVxNAmkbSDY8temiMyOFIDh1xKx1m4ictjV1\nKn6Sa5zNBKf4IjdUIj9+tPdhnIqY4sS+UyKJ/exKigTqWsmc1VZYmrak/jKD\nN0CXeBCF3xCn/q7Ms7YYvvbYGeWK/Tnd/FjC2yAuZf1XFTadWbMXg3ItOLWA\n6JmUqvDDfezuIGxvwndk6H813zURXIKZFOSTMynH3OJRJsHkbgm0qFruj5Aa\n2ytSHGgJPrsD9/FuE8oz52z21gvnxcLKLroLD7cTW+TWDuWPnqg0SU1zsHGa\n98nc\r\n=r2jI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6rnzLFRvGEV/bHrZgmDPHOMZ3rBYmZ8ePv+D1GrQrGwIhAPDvieUt1VAio5ZXhXoZ9OLmOOPWBaM6BPLvRoCeMbQX"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2348_1530810786044_0.96192576751798"},"_hasShrinkwrap":false},"5.0.2349-beta":{"name":"meetup-web-components","version":"5.0.2349-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"fbf785ad3d3d6ccd797d0c6551311eb99d3e4833","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2349-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-33nyV5faE9wSmG4s2I6jWxbsjeWNn4k8msMra9Cc4mxwZ/vQeK451sQZUVimkn8Bmwy8iFROJk/ryo4mSDW3Ww==","shasum":"3e6edfa490a2cfadd6e5a31bcf469ca5796ad4d8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2349-beta.tgz","fileCount":582,"unpackedSize":6963149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbP7ggCRA9TVsSAnZWagAAeiIP/jhMy5hJgQU5MPufhD58\nzbVMzBy0ibPsOsqkFOOiNn8H4Xk4xxA+0oF1okNRb31ZnHSl9WHhzbDELf98\n/l9yCakNHlxG/wsIE6lPIcitJzjHTFOj5ZVG4D+Y/9bcx2dLl007r6f/qLyq\nFTVjMFOvWRNFVnbwTe/dkgndcLJbqL/140js6HDz/jSzTS71XqviDOil3hVS\n+vWZOeMIkIEsiEKiSH1fe5FMO4S8FK4ydU31QAfZu9z0aqInJGTnvW/C/00o\ndbAaY8T8lSDZSMyL0vnT3XL9UWd1GATYVUqUPyU+8W5Jr+VV8UBpjpxl+076\nZlHxre+0AVrrM7mDnVO/GWqLytB9B3iUlJdhwIeOiPOepXTkyKp/XRyu+u6g\nu7l+CsL9QlWEh+jserCeHWSy61Vyl+JJIA96gCaA2XiSwejTvaDbwJ8Qjrpn\nooiKocdH6zpjWjAQRb19u4qn8rNZ4vRsYzJlL71pCs3kegV+51KXqbeWUAZI\nEv5QbNTdZ5txta8HFK8RHkRGn5Y2DEX6UERhT7D5EEAx1hP9LhJXi3ZZT9Vi\nFw5P1Kp70ZrDWIWA/LJUsmumRX7Lsgi4i7QehLGuwLth7RL/KuTUQSRYtaW/\nQ9+wYJv4aueTNux3h9C87OUKNgBKrWLqhRHA+/LoSyrtmRPHlPUIlHXGGMgQ\nS/RO\r\n=QM7s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQ4p/D9IupwqPeOYjxr9w3d4bPed7OZbWC+AEI1VqhlwIhANm6o1SEad0xW/Tp7phNXBdlmHvLjVU2N7CUwVnxt+2N"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2349-beta_1530902560502_0.4077871057693092"},"_hasShrinkwrap":false},"5.0.2350-beta":{"name":"meetup-web-components","version":"5.0.2350-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"18e57fea318138037c1baedbd55067b983e0ba76","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2350-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-WGpwHZ9TmmNahZnuV/nBKOjcmek45CpHdXZNrAJw5sPZdeGraCuJeJpgFyeFw1yQC3jcBGZXFod2FzGohimGCg==","shasum":"7e29d70275d55f315bc767e1fefa8fd1bf9a8d8a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2350-beta.tgz","fileCount":582,"unpackedSize":6961186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbP8EMCRA9TVsSAnZWagAAg8QQAKGsMCaa0TH8rwqs3c1f\nDaOzKQ4IQrPyoeLaUTdlhPkNueQkr8L0+/f3AG/G8haJNPpOXRURRiG2NZg6\n1wp3o3KOc47nYuX4G0fbEUJyumS1SYbWBAHZgY1RvsCtfBl2SoNqmWUw502x\nWWy2LIyt/WqEFL3+HzgfDy5t1syPaKdRUv7G4bZjy8z4lQPpHl+P3wXD7jQO\nkzF6Pv8i2dpOokIVjxu7Oe5xh1+4IKPCKMu+j0FAMBZY04gDE4m9ZSFecffS\ni5iYT/67r8veybuA5kUsLKTT8jU64Ww36v+yeCoaG+FjS3EmLA/9Z190Tguu\ns2B8YZbfy7+IuPC+n663cRGJIb29eOQMJH1vx+NjlEDdUklGRofIe0etFgF+\nppbVNb37VyakOAk07jMepOY7zkGYoYKHdTFRej7uSmzmNHCZT9pDGXQSjcOj\nPAp3HuWzVbkdRf+JteuRQ1jo0w+4nSaw01jNZ0Era+jfNsKU283kQVbmJeH4\nOOl4r2cGgzIlk1ifFGAo87KyWX9gTuvpnCuhGcGnw8P294Tyf2aZDBfgJU/r\nxkEsClhXwP89kQqQyM2ihrnWzLAc6/n7k06CGHbgSHC5S3XI7CSS9kk9oIqw\nqp730ar6gTqyj2EftE9t9dgQWQf58wcVCZTybn5COtdGqLZ1ooiYTxmnKHE3\nbLpr\r\n=0osW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4gRBL4fHQ90maJ6N1qL5IZonVkuCExdTnp1FQc7S8vgIgaD31ojbTHEVlW7ARaLDXwcCireaDPGpCm5mQeebLhTg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2350-beta_1530904844658_0.8860584243756418"},"_hasShrinkwrap":false},"5.0.2351-beta":{"name":"meetup-web-components","version":"5.0.2351-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"bae7ff1e7eeb4ec916f06a20dd113cbb2ceda07c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2351-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zxMAkZlFK9HGB8LnpcpMs5neXkfrbi1uIUEwRyJy2quee+vtYG5U8p8SGKbDbKiYqAedb1Ws670AmUK27QeQ1A==","shasum":"8218a3e1e1e1e8ee0eb283b23a53119e6d7250c7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2351-beta.tgz","fileCount":582,"unpackedSize":6961250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbP8v6CRA9TVsSAnZWagAA4aMP/0E00K65nGiPTHeTXw6M\nwp+Dm+1+QNqecg01IkkOuhiqNMmMckVP+5rcZsCTCApFINu2+EjnaFHr57TP\n+psQnl3VL98fbVLtylf/9MlOGdxu7VPhjptgHKpwP+tdkYnLlo9KoPMai6mc\nuqy60ReCVyXdPpNY20MdXP+LF7ou39E+CBNE9GvXXh3HQzvIU2g/aSZCileE\n0tewYx4/PZfT2X3XubLlGnfFMU+/FBGZ82e9ygHG8aIB3e4TnP0iotZAzAwl\nc3TAcmVkMQ2KxTYLd00MFIqvVyHXYhWTZYHUhK+nRxjCiGEuzcmehh5o62CA\nAcey1/GujqEWIpcXNE77HncG0m2nN82yxIWOqfNarvPQzHDypLxOTlN4Uvm8\nObf42uo4od9JgiDeU7XdN20z9DSbf9NuLChaG+U+LSy2XHfkcrWQIP1v0CaK\nXLrxzgXdXs+u62GrJuqTxm9ZughKLRGp7pYTei5GQU/8j1s6+yErPvSI+7e6\nIEdMoNtu2nljnrZ+sbDhB8q0Mv4ue9bf+vgnY0bAKG/QWGPDHzdK+H98AucD\nfH7MuN4UIY0XCp7dVqAr6mMkeQF2a87jjevcGoQDHlj8oFs54l3nK1JyQqGA\nr+PLhPYIiTCo5GLyq+DUT8uBIhYJyl9Bxo+hps7TDAJXxf/GlTxgiQbSuItV\njmCp\r\n=2T6z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjHdGgf43ib63jGwzWtrWg/fLoR7Pci5dRn1n7oGseYQIgfZes00ee7kikio+UnzuhYzml7WnLl5Nc7zviBb1zWZ4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2351-beta_1530907642677_0.3516265912053709"},"_hasShrinkwrap":false},"5.0.2352-beta":{"name":"meetup-web-components","version":"5.0.2352-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"8e1f7e5d62a1ad43f3d84a43fd2afd33ebbfc21d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2352-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-h3I2tnG8e64PR5uyXYqIcZ1MynVnz7yrP2ShFbAqUl3Bpx5xXR24FsJDZVnNoOqN3j+YOf9T4PHAI8GwTG4baA==","shasum":"b8ff52430e7024427061d0bb96263515cb6531de","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2352-beta.tgz","fileCount":582,"unpackedSize":6982483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ3xnCRA9TVsSAnZWagAAedoP/2c1Fmf94QOXih6o8LJI\n68R/k3Rtgth85FkcpK8hogbS5jtOtd9+xXnXnQB8QFoz1hD6q4Ax32zb0dgk\nUlx9tiONWxsPxEgMuhY7bq7umQOJcT77jtpoi8IWzFzvL31efwwEzq0DZg01\njbuHgojAWr/0rA8wDdfXAqxUtBkVu7mz1sBXAsxtO6OIgtYZm0OXy7yNQkqY\nHJEmC7N9mxrKmQUwSSXrgcHw4aXC30xLh3Y75lGoMrmEiK88B0ZVOkXorCOW\nZwK1+VQvpmtx4tnkfc0pe6AThtF9KdvnBsroRAOb7sga8j2zJgY5O8fkGnWm\n1vbv8qmXtb2kHgjD9Fj9zwF3uEe563gnKUUchnp7NCU0wAUFj34X1GljTJpn\ngA8l0IdqGzWUuaCM3LUnKkHgqRuQYVC3w3amt1FTiindQzs9qVO26JO8ZOne\n19LmuFpCqSwnFDfn+OGLWIkICSONthf39K3cEKPFWOfPVW/Lp7DkcTGTP8DW\nqGw2YBiSaPJ+KTWF+hF6XTItMORkznoxM3m64+bSjEs889MzZc9WvNlptqYe\nhTpmOdmVDs2qcADNp2VkOntSdInpXY7EC322h2d/Vnh+SBut5Xdo7oXJ9mEG\na6GMd7K/IVPuXPNMcufeqNca+Q0yM8sCjQMh3K/cD5dia0USrfRerP1vs4xH\nvZKf\r\n=soP1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAmJCxeLPdKCACRZFfzwVgK1NHDmZimovyZb24KyXGCeAiEA9quogO7mt7bNICQgUX9BH6s6y/U/sT4eXRQUImD92F0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2352-beta_1531149415028_0.08094556009429188"},"_hasShrinkwrap":false},"5.0.2353":{"name":"meetup-web-components","version":"5.0.2353","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a0386de1dab2f7597a9a009cd1d16be1fa2cc4b2","_id":"meetup-web-components@5.0.2353","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6reWN7K/wcEsV73F57DjYRLtlvfW8nmt3/U39uY2a4KZ4/U4c/hYkLekmFV8tXGfHkfVoziLqEaHsuLCtpo/GQ==","shasum":"9c997542f07e23c38c859c6d0641a8a4e1acc120","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2353.tgz","fileCount":582,"unpackedSize":6982478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ38NCRA9TVsSAnZWagAAejoQAIZJWYBMTuRcnaDNY1FR\neD3pB1sgLVWuiyFVz4SwJEiPkgdD4zeAktJQ1iOoudNsmkhHfKtss+18JiUj\n82L9P7X+uCbH2T63WmkquqJ6rouKaFNzx+R0JRZn0yOp9W9P3emctqPsYKpG\nfNMWqo11Grm5yMPzsr+Y8ORjQ0YIb7GESdCfdRxfZNXmH6Ns83JSdjjiRf33\nQ6ftd9W+8MLgu7h1Gs0G+FjGQTiQySZBwZrYqyaBG4n4XcoWM5HpOXaB5K5H\nNYP5bMbPHIj1Fr9VuuQ+c2g8e5+lnQGEmOv4rqJcP6FsGVdWmFwOtks+PnT/\nLrpZMxriNQ5T2aDEgPUH7Ngy1VfovR+oxy45ms2kpCt/i75CaoTm3n73d1dF\n3xXzzaWt4d3E8IWhg6BJWinvihvs2mCu24zQkLo8ZtAlX5y9vnIXbINHrK/p\nUcU1NGSLv2Ts6WqFmPTRI3dOBp8zeCeD1jFsk/+Znd8zZXi4jXWNymCgL3ff\ntxpiR6NaljrkWvy2JvSFIOs3iZJLDv5qE+nto03uSyzWWzqA0+Ap0f2/+ozT\n9VqokohslkbSqCfjnBuq7tmdCPMl/Qln6nrJf2DtJ5BKyhWso/Eq+1KwleR1\nITyeVxb07grGY7VH2gMw7G28IHOy8uN+6vlYUPR0mbL8ZtUU/Lq/g1riWb21\nXe5+\r\n=EpNn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHPDON9I0E39itefnsPaVjPF+pTOw/mL1X1vw6+g8sioAiA/X5mYi2R7Yr/BemttvdsapG6kXKgmctp0jE1bP+SmVg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2353_1531150092812_0.13847255611479237"},"_hasShrinkwrap":false},"5.0.2354-beta":{"name":"meetup-web-components","version":"5.0.2354-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a55e6560e4ee4d793a8635edaad4ea0d0d4052e0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2354-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sk13mc2PYYw59Dq0YmO8vREwR5PuRse76G3CY3/VG7Gg6lmWOoFTXIsbAhmuzutYzNfdW85To3skN1kRUmOr/A==","shasum":"3be15b8386035703464e15419d8ae6ffff7ecd2f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2354-beta.tgz","fileCount":591,"unpackedSize":7052755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ7lOCRA9TVsSAnZWagAAWzYP/1GALzBcG0oxCVif4png\n3Q4wBlj9V5+NLSgCPr9zIFL3kp7cbmk7s2aRqjW22wPGyOzII1oxhzbScEHN\nejFTGWEKDqv9u7k4QY/LrmEZxmt7nHpcAlnYmINGoQgxKnd25NzR6vjcNHhw\nKWhOcERi0aKHH73ZpF3IEP0WEF6g79X2f5oxmv/VbnXszdlfhvGJ/bc7ovIX\n/8cfaXhRRpYJ4baVZg5nJ7TVIAtUj+zW5p0cPAwTKCzkmFa2U1rTDoGkwoTp\n4kkoZZ4DkbW0BxvK8hUc0zy+yhkcjkybshkH7bq2glbNcSCywRkkX+c7RAdj\n3SR5iEXMoCx/3fX4feKUy5SLKtHtmJubw7NGuRuMiTWKoYOmvlyqWi+u5nEb\nWmdje0uIULFYXsbRRfc7WuPbu9WI09eLleGt2X0aG4iWlnfsa3nX13swCBcG\nmtsbbXA2LGifB9v4YAm6NA49vab8FGGHC314VKG4CYSYxv0MHSUvonhBBavk\nbjO6j67tju8VhQz33FIeOY8olweZw4d7shYw8ThribmDbLRU63d+A4fcY41c\nGifoGqK95qHhWKh2OSnkXzgPV5estrz0aXylpIM+5P9m3K9rq6YqS3krITwa\nOFeoZsbZwavZhcmh+rJ9Sf9R8Gc66cFvEkp0pgWA6UaIPl2pKoSNrzxWWgLP\njhsa\r\n=//gD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwV3a4mO9M0fpI4nZTQnAjTFykv4y4WnRPJRUFZ7zFfAIhANGmSo5BRIkt7zzIXKh8HNt5n2z7vm93m5kAuJyZ3RPI"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2354-beta_1531165006587_0.4384576890417189"},"_hasShrinkwrap":false},"5.0.2355-beta":{"name":"meetup-web-components","version":"5.0.2355-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e24db7d75bb059f5028c4d1182cc7f774b92e07d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2355-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mnStdJ88tS7xNJLzbDtYvCoGaBCXFmx0g0r/Au9MMmiaVvwbWqkMlcSRu70CgEjI+1RYbYiUJRH2Qa3Nnp2DVA==","shasum":"4959d83422471a7cf2d549b980b55d41c628398c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2355-beta.tgz","fileCount":582,"unpackedSize":6987004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRLyTCRA9TVsSAnZWagAAZDwQAJUe1PettQZux2bJ9oZA\nttDASlTQgQjMaRUFTAV6Y55Sr2Jw506/aEGFm8WgfsYpUheJZluTfmNoUJkV\nKRsp2u4+9J9LTlO76DfXHwAWTXcttgr5tCacBXMvG9TSfF84FI9LHTvd62oH\nzYblJO7tQTqWP0iN02nwq5QxKhqF9fZ+OyefAxESqSXChh72xMv5r3ZrY67A\nBR0LWLU2iYDfy1/jaYHjK1b3MvNO66hMInQLN7Hx5gklsF4QEpxCKNNFbmZc\nrroVMxY54siLrd6KLDK7ZoZF0CalTAssUtUuqalJ/XCKVEIQMgW9EDDmFtTV\nOsPj2E1orLNTiCycOy9Fi8xl2SRiiAX4EE4S5qtF6810jP62mYoPAVwUCWoD\njNZnOrnpUT1AMgO64B0gjeDkNQEZ1HibCox9x+HP8GcIqNMXO+I4pIMW46Sr\nY6d8VoKcZ0O5CL09T2GFACLQtpwV/on5fbyWmh+/kCJlzRBF2Gqzq6Sa+3xA\ni0zzyf2pX3JkfOEZbFu/8E7m4dsK8VCooUyZStmcHHVhP16grRE4MeWUV2RL\niqE3QcDlZjYNk3Ju28NP2QX0ik2aZXW/0LHEYNTYZu8kMfZctsrXQTmFK1VB\ntTeFxFnwDJ2FQ3cvXy9QX+HWycSh/vJyXyoVV5dIIt5Bls0O7GmI97DoErri\nWK1B\r\n=wxUZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDospyX/SAa/QgEbQ9Q7rnAejPWU8PY/lUvxFKxjixDcAiBCLn64vggEo/lutD2s6VbIXSdioaUzKgTurrqvKGG3sg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2355-beta_1531231379355_0.7949195472492236"},"_hasShrinkwrap":false},"5.0.2356-beta":{"name":"meetup-web-components","version":"5.0.2356-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7cf8a55380bc10b5acfe63ede6f33a85c328787a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2356-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gFy7UzqCSelatYGN/2tf5hjD8NYZzrWMqAF+c7wiCXVFvnjxPc7gRnl1yDAAYQ1pIKsbk5cMQAdx3o32YdXV4Q==","shasum":"302611235151cc9e132fcb7463de803706ad4e32","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2356-beta.tgz","fileCount":582,"unpackedSize":6988053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRMQECRA9TVsSAnZWagAAGxMP/igKJIVdc0l4xrqIzZnA\nugTu1SyZVfVtJTdcetSvdk5aZbPGLRCEcJ7995e4T4oaOwm02H3c1PT9mOCq\npH4WdyMMBFtC9I4mhCaB9HKODCCS9AXKjtRz/FajOYUqwMIvDxurLvWJRB17\nV3oWTPHRL/zmXsiFGcwgDpwn02ht5hhhdleZP9GfNCW5afCmH+6dy1s6UZfg\ncm+rv40IYO9BmOjQ2rnW9fxxOsICdoSKFVwmcfzYGiPH7WjNyEKBtHIyacyu\nCiY6p/cMggGTlsBUe6ZOg2FOQJb7JZZjq4Y/VXQxEegtbrxlSsUnrCxdXnu/\nZ/73w7hisN1g6AG45i7JExNHJ83H1WkVC4U45oWX/2U4XcuimgdGHIoBUr0b\nJEY7TL4WyGUC40StqXvBwnYi9Zuau3ZV/Tv/bHkAw+3FhcASJMko7ukIWxXQ\n7otSHx7lTj/wB6Yc0fsUNk/qzF8W5CrdWRH6ZPJBGlV6WJT1Obnj/TFXks55\nW1emWERcnVecipblp15B0Y+97sUibJ7Ed7F2YJpKeMO+MrFEcHkzblaMMZb9\nmiKt199+/64FYJg1baRvYCRXFnaRtWAXr0TklVer3J1R9A6GZb4NEi1rR7ti\n5jLnZpoG5q1QbmYi+MeAIHCFIkevwJSLs8mpbKVOi4oAcL4ArUMfbI5yVwYU\n5m1B\r\n=ZluA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKKCA+vXcVrP+z8DW2IexBd7IsAwqBFODxLJMWUXjSqAiEA4vMev9VgisFpnpaJyBOaMwjRoGtO0rnMu0WQMA3rVl4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2356-beta_1531233284492_0.32792096755081035"},"_hasShrinkwrap":false},"5.0.2357-beta":{"name":"meetup-web-components","version":"5.0.2357-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"0c29b45785befe54c1c76070764bdaab86efec07","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2357-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-44Ri3cfYDyCJwRj6tAt/ZbZ6xs6rnzg7b2m17k9//jpayHQ6aWY75Wh1ndiExvLYa2g6MxL0jhpxJaNe3a7EbQ==","shasum":"4705c82143edd476b513fbfcac20a6a294859a1d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2357-beta.tgz","fileCount":582,"unpackedSize":6979832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRM8oCRA9TVsSAnZWagAArIUP/24vY53Dxa0KWLGocKjG\nV3oPWOTX1VQQ7rbsElWR/uMIsIn8C0Ae1w7Tqpb1PpokAslRsB2Le/P7ZhKJ\nViik52z5FfZuY5tXVqjWgQ8HAC9JleQdvQK2wNOOOHxwOj67jRqXK8GPLMG/\nuxmUCJCOs3CmON+WAtQuqD1PzHNMq+n1GAEXCVnrmga9JU1iBP6CayrB+Oky\nPgHjjcAFxg+VgmtLIQJF/snytNAeVGhgdgr0K/lhp/KHzZkrf6aNUunUy6AA\nIyDLQHUwtYhIXUrtVsW1c8vICyJeR5AFVPBfUuXTz+bukt0Ov293RXb19am3\nW+GEJqrmCZl0zSEYzBBpIyrCtMqnSdoT9DD9N0EX4VvWEQ2fZ6rddbOoVVM8\nOyJziyLgafcsMRsaEre5ZUHGX+LXCV7v+m921vCW5tsxBuNAp1npf70PViC9\nZCqJ6V8yJZpD3OriOsP+4MQdrYboAoUlvDTSN7RdnvWF5gUh+XQoSJRUCYMf\nFK4kWqLLpK7qrizTgbKWb7XTyCxce2DdonWex4+rmA2pUC3P1ZMGo4rnJsN5\n0wh72YXt6PlYL0yAY2a4lDAt0uPbkRWyIL51aZE6VDVPTlCNmjTkrR2pmMl7\nND2KC4q3ppnQa5h9tMOrpy/z3+jAO2ocQjoSkgA/Up3dj44XdJB4Z5uJelQB\nfyC5\r\n=zJCv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUqRN1P9bYgoCXv57Ha3Rue/wfnP41WyBtKoIzVFaImAIgFGdHxsL5W8VeIaGSJY3etBYeZmWjNrSOKgSiEaQbSEs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2357-beta_1531236135981_0.8257980812677088"},"_hasShrinkwrap":false},"5.0.2358-beta":{"name":"meetup-web-components","version":"5.0.2358-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7cc8087d00da7136031172757a2ce1c03a750c91","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2358-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jdGyl85l0s9QnlVHp1a5CfLSaY7ntaXRImPYc2VIyEBDehB8HMG/dYSNCSWx8V3lSDLqcCpRDP9SinrmCBBrwQ==","shasum":"490ab197c41cb10dcd244a9156112c8464b70fc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2358-beta.tgz","fileCount":582,"unpackedSize":6979644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRM+GCRA9TVsSAnZWagAA764QAIbwcBfoa/KdXTdILSFi\nwGgmvmky+Jqq1m37LRYEf8v6twdKMdLRAwKAgbGbgkUiWnqzKajVZS5CXL2Q\nVF8QB8P4XmhHFSzl+E/uiRB5gvHvS4zQR9BOFSbLOAtAkkmlCpwaxwfu9Yzo\nUs1K8UBkzxK7vI7uR8CDu9tJZX/bUTDt2SzpkcjDYMg5KQjWF13HWyWSUbQb\nI8LFIZ+03/In5865/ldl+0Pn/3gROczBAbpIruAq6cDTLHVn8BcpZFTmA5VG\nfIiKAW3p+TAtvbxtTrqZb7hmDsbO85VKcVX1EvE3hibunbvGqxJS/2Hfys16\nHDjIPEbaNhRjF+D6T6T8NXIkx9I7jEl2RZQLUIghJP6E62zxydrwcSxrUji3\nOlBDRTK4GeSHWrIbTUrl6JVszsp3Ii/pNppJP/U2e7KskRBDXtMEnlYSEXwk\nWx8he7/HlFhjB7O586dLatvq5Qg9b55dF8WWYxEvfhxo9tgs4YWBy7DkephN\nBdWUVQZOBMGp1N7HihyvPYN7uJLcj6X06eYhvCrKpQGPF3zju332SS8wGUgV\nm3JaJPby+YDAw+7q1a6wYMM4fLqXiqDhYy+U3lLq2SQy1vN8sZV+/YzmUCLv\n4t8hhWZ8hVm5cNpVZ/4bgJNrN3/064dogyCxC+1/8+7reRX+u/8MqrYy9NtP\na75H\r\n=cwyn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAEWS+DqDJi9zVJfubb0+VWtMi/hDJZA73nA5ekNhsWZAiEAsgaiKO2pIwqrw7rTU2AE7BbvSaaRrsJiqCBszZbs2ag="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2358-beta_1531236219656_0.024949127122551706"},"_hasShrinkwrap":false},"5.0.2359":{"name":"meetup-web-components","version":"5.0.2359","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"beb0b1c8788d6c230149b87f10162f990e781cd3","_id":"meetup-web-components@5.0.2359","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iddEXcb3qcqljKNE75a7oWOaGs+RpagA9AokiQQSRMRyCGz/DDcP+9dCXtSrS9Hfl6VXfFT6fne1Wbj/5hVWhg==","shasum":"cee674b833a370dece5c2f196a162e3eca96db6d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2359.tgz","fileCount":582,"unpackedSize":6979639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRNGoCRA9TVsSAnZWagAA2KIP/j5UGHzQubmnAYRCmEYf\nkNxBbWk8rRtFel9ous97KCqeQ5zFCxjvPQFE/12qr8lCrMMIVgU94AcDaebM\nF9LzxmUSeBzHFidLQh6rxXELeBLauK2Bc8P5KPZOCdcIfj1/kULZn/dKCuhW\nu9/KvOYg+3rR4xkmo8t1fK5GOO1E2eBQi2/xGpba4y6EA46d85qOJm3Ged7N\nPeSFMFM51Egc5Uzp/cLVXG48eK5we/r2DXuagB7wkKtgnM7yO7qCvsXDNAY/\nf07wUyup6FBJVQlyNY1J+AAwCn5k1EINu4gCfw7EIiP+O7XTFvuUui0UdcmF\nn5xJOIvmgamKaZIvAjPkliOyKxx051n9oTi4d86a8uRdawOVtcUitlBVsJC5\nU8+44C/2Pin5UmnTlm7F7kVpVr0T/h1wTx0HSaFs5TRhPlSAT0Kble4fwjtd\ntcDerpJGKpbR1EkdnJAOecblU2mKshZ/zNACN2bkE1kg5Du9nfDc21gyUX6P\n0iSP76GmOFTGyUn3+UJdlb1MzWfmSZGyLGYBsDQ6xzQgTZKYfcOU20TVRrWJ\nKfbtEcaOeOFsOIqS8/aL9e/mn49VGlackde2ICv3w2xeTi2s5N9qeXLr1U4Y\nalHqWwZ/xU/Ar0Kchev0S9vvguaFYdl4S3UOuzNUJIuexiFu2G9XK6pNP4kU\nU2MB\r\n=Fx7+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvmblHZ8pBeIA1/RmCNFZSB1KhyoU0P6MLnYwGUFPVNAiEAuM58grGgCo1tUxetaZi5Xt6GMnzPFMjzsjDpECt1PFE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2359_1531236776101_0.9476059195274538"},"_hasShrinkwrap":false},"5.0.2361-beta":{"name":"meetup-web-components","version":"5.0.2361-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"baedcf80fb49440dbb6c4c0bf0d08cf90a2a90bd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2361-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UXghBCwQRD1+5aKd4nhIB4yKjRDQ8Gfai4ohmNDZkqQAx9xoZ514TZKd/eKmozjD646ouAulxBVe/xwEFEOK+w==","shasum":"e907290851ab5cfb16684b8d19f60ac3c57d2295","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2361-beta.tgz","fileCount":591,"unpackedSize":7049621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRNYdCRA9TVsSAnZWagAABx0P/0S83PxQpAnFS2T5OpH8\np/NNAgQkX62+4cEUi1r1H3V9rFRYvsG0Dn2OULj4GNHuQf1dj9JDUmI8wu41\nAZj5iHZe9YXoKzMFYSaptmukEzTNUUymXFdXjBEeYfXUkaZoc8VSzhpT9Aca\nT2rnTcK4Zf44Q1N90CrlUZDSDiv9hdObrWEr9e68fSh+xKEA/d5vBDmhot/w\n+3qfTythmhmJIyLSDxuSj3SPrdJBnxacVRW1ikTT3BRMEkVxjexHYma/zR32\n2biV8Dka1zUazAKa7QjfW0kbVPY6ycUXgTHUyNEh8TFAblj5A6E8IbAZnd1N\nRuozQpCqddtm20fqKLNjsvprYufnM2OSmNWEeLNPrUb9ihBytjZujLJ+OYaq\nmyz/YNx4/V1meMikFnjKN/RT06jtXr2jfSHoybV4eMXsjbEFJGK8+aMUz6uC\nxxullfbpvVUFHoQHuSYYqp/vr3jPNXsrAYQ8KFhZrxFz9oMuRwfYxq0J4HG8\n8BXPIO0m4YNAJ1M4ZR23WcPa9I9MZRry5n7ODQmMfbOP5bnqAbgEw9NhNmfz\njjkGbU+Cw6dPrAM+skDkgK6Jo5Yxn2JKQXEPKhtLQLts8axg2n3sX/ohEog6\nYyEJ5DpZ6+JgXGEfpJAIkUfQOznwmVvOC0n794RMjQFHVwq6Px721+NOeANI\nas7n\r\n=Pwsj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKI3Hp2+NXCTsJXAP+H3VuRGtFg1JC9RdQxecl5l0P1wIhAM7MElN5T2ioqKkTlzC9gzZE2FIzY6oSDoTANFsH1L1m"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2361-beta_1531237916831_0.5826756464264269"},"_hasShrinkwrap":false},"5.0.2362-beta":{"name":"meetup-web-components","version":"5.0.2362-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6090e84881fc0ac3122a2242e473d231f6e06925","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2362-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4UDYR9dsgd5RmAh0ST3ffgTKPhNVrhUxb0KJKmC6gdRT3lx0KKBlG3gqGlsaL9zj60eNC3BGHWRpZ6rBIrlMmA==","shasum":"d1be918ca84f52f6bb23aaebb20213542c7e0329","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2362-beta.tgz","fileCount":591,"unpackedSize":7048883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRNjRCRA9TVsSAnZWagAA7skP/A1zFuOKCMYV2Sei/tD2\nL60itkIqIHSpiS1ubKIy4DAUlepBuWtGYM+hQuRnn0lkwaNPjZMLIhDv4OJQ\nhOy+Jt4kxGETKR5wLgz+DGzGSJZLBMuyAdfcFXEVzjk6p5kZoeiGxynMMxn2\n9nriYkYyH+zLc2PCSI2KejnWdujJx1QHDVJung74l552trc8sPg2vfzl9MxZ\nUEiXRBrjNoauRVw7zWC1DqgR6YNYJALa9DQ6l65p6lbvoV2qPDA201ghrluD\n1EbCq1xUh8yTNxxvQ9OyXYaMZejC9wTacqLLKvqx5T9ELdhGTbzj8CexwKco\nRxb7ADEtTFgY/uFjXyCpXfIBS5GWD6LWHhRGny2Sy7SrvpCNGmneHmPI6oTR\n5NqXsUVxD2oszj2BiPvCkJo5vE6NsgPIGuO4igi1im+9c4NuyDnO5vTbBGsp\nEvBIcKTCvlQAF2fT/r3Wytrnlt6ZSEvYFbNnOwt4iGhenRMvj7uO4jfoAGto\n1yJVrF7id6ahR2L82J9NRUnKW3gYSX0XFgjfD1UM0kClHSNACXE+nsN0Ao3l\neZLsvEEvstjQjlutSTTX3Azpwr4lrpj/3RBg+8pkmJljNKYpxk1Mvy03oFDz\nHLP6NUvX7HegFQt6vIS6/JqrTHJjiuFKzOOQpauyE/OtREG9VyPY/BtwSRBK\nQ/Nx\r\n=vusB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG0jD7VmwvXcgbtfqPn3uvPJNS6pJJHkLkGQ/y08BLazAiEAsp3iBJwC4U4vQt+LPDx2dX9tvN5SBwKKjpDtynaNCjY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2362-beta_1531238609106_0.4526951896785203"},"_hasShrinkwrap":false},"5.0.2363-beta":{"name":"meetup-web-components","version":"5.0.2363-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e6f217fe01a42d719799b7a65d2064fe4d9c9cae","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2363-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1LIVi6DJNWAt//iTVK6ns1sxBUqcij39A+N7c+p4wQ7JPPhjIGHx+XXw2nmMmYsvkPYad+O0/V3/87TUkTL2mA==","shasum":"69a55d575f70ae779872b8ba2066d29669157d01","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2363-beta.tgz","fileCount":591,"unpackedSize":7048873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRNkyCRA9TVsSAnZWagAAy44P/iJRJLYC77VVSAybaAtj\nU6Nuh0qZKRVnhK5J7s/Ye6BXzJi/MMABTiMPh+Qjpt9M/p0Gqs2yg+YoXrko\nszSaBryBzTqFsTuZSp7pbCa5XwusQwA398vVVy8TP3khyCAGttCy8Ir/ExK5\nfHJlEy88AL3s3lTeMfpTYx49SsmlGi4iug+Of8o6paqC5a3SlBXDdmovxzOi\nLYJeIqiuPqrQtKLZk5r1o5vlz2sR0N8rnbmE2mb67qwKIqTQ+kCWBH89mSTb\n52C7hi2hMjCzDwBLNMvIusaZDRch6A/VcJ1X8m6BvjhclST62ChtP9cbeykT\nLzVsjK5p67CpA3BA9A3uJdHZ8WXu0n3C8prv7RstyYM+MGxyG+JTrSDHQ23x\njyRrSTdirLOOv7rLWdeogRj6hmDphKLAeWC4THzJBy0er0nhTB5LlGV5P/mR\ngGXC0l8T/7577058/uS0Rmz1f6OD6iVTw9Ocw6a0BIW1nF8BHKQSe5NuVoKR\niB+UuHPLGSOsFhdk62Hqxwnc1df6pxv35Ojoc08APUvuK0xYXY/UfVIS/na3\nydq1YtNXZGMOxwr6hxoH/Z13wiOYDI0gbLbPOq+/lhkN0j9aTjj8KRnSLABx\nTt8k+CvpHsBzm+AMQOjgge5gNthssBfY1qfyBGk38GhU4ofX7rhHB0hvQNkc\nHIes\r\n=N4mA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBUUduy18nHEzI6OTmnIcW+K4nNv/GJUwV/QRSir+DssAiEA/UyghUC9/3t9OA02vkAiOa2A4hGTlDSuFPLlJaTq1UI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2363-beta_1531238706151_0.9317657585194117"},"_hasShrinkwrap":false},"5.0.2364-beta":{"name":"meetup-web-components","version":"5.0.2364-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"22a5e9bfe4ab288780095085c37326722d882f40","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2364-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OVwiQ4+29KFJJulsjbyRqrVffyxak6sp5rt3LQ2bU12F87tPZd/5LeE3aE2LjeFIZb9FczeNOe4mtb1T0KItKw==","shasum":"c3e6b7d5f59f30189595e713354faafcb4ca545a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2364-beta.tgz","fileCount":591,"unpackedSize":7048980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRSVuCRA9TVsSAnZWagAAlQwP/0JO93tH2MIZStEB34Y6\nW3OJ+UAfc2LH0wBFQ38qPxmVY6wqGcMyD116QdSLj3Rntaa5IkWAm9mcjbtu\nvKxvrGCu2n2wjtBIct6kTtTXwmczWDCVaJA2YHC158LZipmINCiHEUOG+WvT\n+U9AHhecZ5QSSHQsda8qUDsO3UKU2eYQGLOHVIuc16qDGSVo1H8ARAXiG+3m\nb/myKAh3gaugrGZc+H/EJV+PJUEr9OrPnlkiCJCTjPuJq+0t+Bhb9/uf0YCr\npxLXokalODdNxGrAg7G3CaPsUiX0CC6eNoGFXSeWMEyfYNLtZI9BLO27Y+jx\nYS6WzSmuSxbRFyO67igwyUWYs+q/BNKo1G32d/PYM/dKtQOSkBScXkBfmf3U\nQOiAP6yviTKctsMocDejwoLB/wAdhyPYGHPmVK6flRcpIYJlkBPdo0ncSdli\n7V8NVc/bEpX+x995qAeLtaHwGL/I1+xc4Eu/FitpF2nOFnWdNuk1tNs4sKKm\naHumX1vDqvyVjmxMdH1hfhJZDeENHArGtsx8gprHS8+2stMQmOFjVc6C7o4A\nFAL34Yja4j1ZQbiZHctiaeEAF+PgmepfB1YT2S6TWKiQP2tbHbO88W/vIXqb\nZD8gsnZ6aHSJmSR+Y5+mHWpPRFvbcgCCk1+XE4jndFiM6tWyb9iIHWC1FZjl\nwCYI\r\n=AojH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBIiXGRbXqeU9nDA7V8Ju9pxvBxJhO5SnK5fQiwSzNflAiEA82vxUIZnw3mYlH1jEkcogKz4kR6CXWYfsOPgUAe0cY8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2364-beta_1531258222481_0.7750895872025174"},"_hasShrinkwrap":false},"5.0.2366-beta":{"name":"meetup-web-components","version":"5.0.2366-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^3.0.312"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"3.1.381","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7bae27ff42e9084982e551ac07280ca750296a45","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2366-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IcjquuCsGIj79FK5sn2HA900cSp1aNm9vYg5fm+znUY2BtvZEmpBRa9JL2LCtdzQrdcWOv5YSE8cdULGPx0ekA==","shasum":"5d359fbe1d89a8ae729c36c76dc095efc0b5182f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2366-beta.tgz","fileCount":591,"unpackedSize":7049049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRhmOCRA9TVsSAnZWagAAqJYP/2b2pdrbido4EJEjU3u5\nxRcoP5Mu8ma8wTHJ+yNCW+YTBkE42YyZswnkNpLY8SkeFl+OkLp6IhqL+v2o\ne7ZH+NoEhvaNMctCw21sIezNxVBoqnnFzIz+CALyw6EuQuVtiLb123uRNNdF\no0c3Pxm19pyWy+QZIxhxlykbUITQboNd7G2iXcbCeTvtErXMLIisNTmo/QOF\nexy3kKyfcaZIUM1vNOgWMRge64Cnq6C53u+eRsnlGGZBwYl/3HF3nqWc30/8\nC6l2UZ/jt5WxBcowILFRQtoj4zRPKZ9qZzqPEyruwUnDpu++K9T1UTh90TSu\nTNFk/7smSI54iILNZ6PsUa1n4Rb2x1JyPZA3Cv8WLL43YbCj7uisDVjW4YXm\nxnjr1yCLA5FIELk7R8LQ+xsO/h3Yx28ckk4mLP4hmYJjIqiZZOIdGlfmznND\nVJNzqWfTaKcvQgZjhr9fNsbpCd2/e3dQ8zBgI6obDrJYNNOxfN17k1zRy5im\n0h+mWjkNbP3vUPm6R3Uoj9hTlTKVO0jk5yvzibWNRpjCJyzOjordnHUu/2uK\n9rZLMf7cvZJPG/7iFWoJtlmV3SvDRt3BPG3N9IKGCfIM+K2wFQW6dY21gLbX\n8gzOeaA26q34+2unAPsECF1CfQBmt0NW4wsa0R+5l9+WxuLN0kZs0bJgjprS\npSow\r\n=Qh8O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEoTfaoF5hLbkeAqlz+lyZmXGTXyoK8k9Y7dui31FqMiAiB1F7EpupENx+y2EqhFAYSPGWfQfSEPwWBtBKCVWWmV6g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2366-beta_1531320718080_0.08981142523564212"},"_hasShrinkwrap":false},"5.0.2367":{"name":"meetup-web-components","version":"5.0.2367","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"5fa11c8f1270765081c7255d97a28c6fa5bcf065","_id":"meetup-web-components@5.0.2367","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JmucI3It9DPlsH3DkbuCSatbqi6GgEqFrHsLGLwc8l6dgvQZifU48a91bBVw4gZVg8wJZFF1x7KOIcNCfP9T3A==","shasum":"647e7ec61ede95a4f8ff99a02301e1e16ebc2fe0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2367.tgz","fileCount":582,"unpackedSize":6961269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRjGiCRA9TVsSAnZWagAA5rIP/0SYyUV/ueq03MkF2zyA\nEB82ziBqglnWNYLh0d6xwkhlpOVsovL5PjvH9t539bOJYw/hwdBpJubeCAGH\nLfQdApq2lkPzljPFIjsrF3UDyMZrwSxHoCFqsbhzFXCkiiPhrtxSFoOjCTJB\nrFKwz+g3yDK9wWM5jDIBms8ZF5a6nY81DAznsHVAHspqva54w0sXTnk9SlDQ\n/DMOenqgRs+j38rRhM3Pg1keKSm4VFi+u8SF6AIbD08D+7EIYmQwruSwZuWN\nzYTWAGoB2BuqjkwaqMqZQa1IS1k6ugl/792zI77JoCOly1PVl8Sipa2gPwN+\nw4KmNHZybf4KEFTpW1+nEIMB0G9jMUGZdpTI+v+Xvj9Po7sMTgEKv2E/+u3j\nmWomYicb07JRkXGUPY+zVwLj1J2dplM/N2A5l9dnmXx1ivjuyczgeQHzAjgb\n7bWTf6xYu4HmWJQaxQjO5NUlEk1Gf86EJPRMHViEPx4WQtj5mlhyO3cC3o89\njHJ2r3covORXRu3G+RKnQtfKKIQR80h/TDvrl8NHH32rn0wMq2neyKhXt595\nDlDlYw1EzTIHhTGe9U/eXivgRpOWylPq7SL+2YigVoiRcW3tLg+AY1zbdJf9\nzZgBcgNcYxdbdIdZhvPqw67/0bAyoi0iab/qgL5tsRxqTiUQxv+8hVNSiXB+\nLAgN\r\n=Fyyb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENkIhCnhCHz+3cDNvfU4nDJ+CXHdsJ86ZHE/d1AJ+qgAiEArQkCXl/RNgu0IQAOotQ/yiKfafNx2n7f3FbpQUqgUm8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2367_1531326882200_0.588930859710489"},"_hasShrinkwrap":false},"5.0.2368":{"name":"meetup-web-components","version":"5.0.2368","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"3eb4d5812bac0c87e08b9a10230e1a115b1f424b","_id":"meetup-web-components@5.0.2368","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DWIW5qEdvoEXp3QhSxNc8NRQpqjEEvktsZr9yMa44pkEJFyda2+377DpyFPI4F9wHqmhYQrviWHdj9Fi8jE/vw==","shasum":"1b95dd8bf6ffe8b05931e8f4d4224cabd4d1132e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2368.tgz","fileCount":591,"unpackedSize":7030674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRlpSCRA9TVsSAnZWagAAcbAQAI77V2l0HqUUywQXovOf\nB27nXMe2MIgRatCrxd8JzwXAP5lO7WqaH1hAv+Gwp5hrENGYX6lay6vTFp5H\n+/YcrPdepXxScSVKf1zlWO7LomFs64QnzysrrQm0iMXitskrWzYFXyiC1tlm\nnoC/p8U64AIWBuY2SxB0FGpbJOKlYPXOGs28SQvwxxlslZehv8MfT+DMGzHg\nvpy4EA8OnPveBS5nHaj7VxrVkNSzZ9BSe38VQHUybsxkYfuP973p/z4BeOTq\nB2LQb+fPsdxDPrUmVE1kYU4gm3QRB9ybZ6CSQCex0b21dxSHKCP9BgZ2QVWl\n7SB+aEFYoRCSM2jGQrV4Sh8XXu9J7sFXcn+klpZsENPtC/yPOl2aHEqIBCUU\nippi5TXAN6IbSVsgV4tCSbJzlr1K1Ri0vnPj4Nhp00pwNaChRi9Wy3TJltP7\nA06a7DW1FHD9GCYcQKvDF0R1Fb1dhbqMhlBd8+n/LSE6cJKVPV0ZoqP5Wesc\nizucjVZqESMUX3jMHkwVM80gcmUiHhenmHiFssPTljGDzSqVG8HxfyiykZg4\nG73dRa5AG+4/9U3u0stSSIc0Bqn9ag05uAQWhXaFXvlwvuZzASDiw/v72M4q\n2OJWlaT9bNNUlwOOU1ojO3Tk0cz98JBqsrqn9pvtck86Ak8I4tcmPjbI299u\nKIVL\r\n=/KfB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHXdZDOK6Xd47V5mWPBFCavrVGN39QXnvCDrWXauxbdPAiAGt4xSsJ1hjEJ2IKRXJHF8DjWzzIP8F9+4KuzGaMHtAA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2368_1531337298397_0.5012275200990923"},"_hasShrinkwrap":false},"5.0.2369-beta":{"name":"meetup-web-components","version":"5.0.2369-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"4c1bd970c8eb6875b1aa1af4d1ef395ed83f4f62","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2369-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bU/t8ZK+ewYXIggbcUhwA/pWnu4PssdKvCxyhIxNiKFtT9GVCy9cDizEjZFGZqI9eQqwPnWCSJuqHFaghXZRnQ==","shasum":"00f67b0d3eda19dc57a7337a82697f98a83fffb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2369-beta.tgz","fileCount":591,"unpackedSize":7030727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRrerCRA9TVsSAnZWagAAHo0P/i+JKIij4vmJL7i8mmZQ\nbfunP2fltEgzKRyexAA6WBpdQS2wa+5qOD2NnOZOKy9VwTxhwkbJ66k3+a1p\n8v3aH9Qj3gdeq3iR0fVzmv/IlSW/4wRSxtNKgP3z+YEYQmn/WDR+61PXzOTt\nFQQI5l96gYH7G/S94gLliQ+tYKBuNsG5m1sgNVs2q/dF6Q0iEB/T/TcPGn+W\nsHuEr0+uFXEy7HeP7ROpdHOoKMiZzjtdAjLhozUuL5x/wf/dA5nvVfopDHHT\nQ3bpFQMGNx/yOcKyKyhLwW7rKQRLPO9vi3WO31shR0JYApKmq8IGq8WjL7yU\nr7Ous6WIw8430OWRg6n6/aPhPwFtFLTK41VIm9f84VB9y2A9UL0XH2+PLelB\nrFaHhl1a5GPvJ/A95UvkJCywP1CuR5hhgRqrYJveBfTkwnZOA//h7E2N0rBO\n7j5Ga1nO3ylOauMNTqH2R0gAsrUum6k/zLjdpVLCiKAd9nVkjPC9KMRJzFuK\nf9KSQZ/M3DTBIhLp9ZzgwdMY7LKnQhBwBrJneVcKV4mLz44O1P5+orsxs5db\n+3wvG/NMtoOZvJfbAZU6gXN57VzgNu6xx3UaX0Nt7wul3y4EPdU3ysfdZ+rZ\nQJmW0up3K861UIbDo9zdZlaDMLrA2yTtPrRa3k5GdHbszAPUYCwIlePd9tA5\njQHx\r\n=i44O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqsepbPfvjWz8N/sV05iJEmtEfB7z3W70xYqrdXWgKTAIgZhbnqbxyTofIKeGAalFjVHxofgZW3MYBYoPrPbt2fOE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2369-beta_1531361195155_0.10753308122778082"},"_hasShrinkwrap":false},"5.0.2370":{"name":"meetup-web-components","version":"5.0.2370","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"93dda029717b862a679bd5a0a0b72053907a4bd9","_id":"meetup-web-components@5.0.2370","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Y4IvhMYlElkqS+jTfLjLQSIwP9g8NegftaXEY1re3abV9j5OlCHSJ1/wKtM86tSi5EAXhlBN2w3UeH5bjwTSeA==","shasum":"b35b8042845d24bd0ac6aedddf571662dc835c8f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2370.tgz","fileCount":591,"unpackedSize":7030722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR3hBCRA9TVsSAnZWagAAi40P/izXmpFoLtDOhWqGFkKw\nGxQlNGP67krSy8w13QsTkbTu3S3n7zOKEKn1ZI7UMumokc1OVNJc96AHsV1e\nHzeq3k6xhi4anTLTK7+vEQUE5Ko8pYfL+82eZH4swBZ4FuPTRBwVMA6VbiBJ\n2fRoWcWpRbiDQRhHX5HY2rrefHF+NCworY2kTpVo+UD3+kLEybVRkIE7apYJ\n7xMo/gibTICq+1cCS/IBbzJ6o/hyRqzAG7IKaM2WixHX2HBXkEom49Rmm4g9\nSd3g0VsDQZNPScUnS5mpFTCDAqfZmSwG0HRPj0TNEjbmCv9PPc7D/9GGvo+2\nKyT29ctofgUYYFkNYKKaPZqx9ozAB5ipms/34WV1jb+5kqWBs/hFqhJVzK2H\nT31dZ1I89aMYPh1liuTuvvU512WZ4HcjbHHNEK7slJu/ld1Ov2ct5ukv76S0\n3T6zSqk3XlJdlfjdyhlOJgU9CnNLVzJvUZbqOkYutXFuFaTg0nnu1anMsbdZ\nWjkuozcvlovhPLTTnh3UbZLLFwHgY9aCvhAQs4oeV3PBhk3ZhBTgbKOZPQwz\nZ9aMfLV8aysOmNrPIu8nRqNM29aKdM27EjRNS97loDQayMHjcvCm+27QHHBK\n8ObMHX5pBUSlFRtbKyQt+UQ25635u9GRlhVJsD6UqR+Eh/g70JaT5m0JygrP\nyp+5\r\n=eit4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzpZ3y70IOQ1LpklIYr7zQ9xdvwgfeEkBX0gaTwtG9GAiBz50L0zN/HQGt2HXVmmxX+e808bVhjw8I5krMkg6t3Ow=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2370_1531410497264_0.22709174844485736"},"_hasShrinkwrap":false},"5.0.2371-beta":{"name":"meetup-web-components","version":"5.0.2371-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","bourbon":"4.2.3","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2921c297032d4384c35b8eb5402f74ee28b9f6c2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2371-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-omUxG6ILiV+g85Dw7MkTWoXZWj8anTsEhQ6Ngmwa+E0W4n2l6SpYuN3m1E1jRwBaqvSCr+vigsrzqpHc+v2KVw==","shasum":"a42cc19e81979816ad6e7e70b6d57bfaf9cad14c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2371-beta.tgz","fileCount":591,"unpackedSize":7030947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR5lOCRA9TVsSAnZWagAAyE0P/ihtn+Dw3H2Ys1/u2FG9\nNpLkwmfnmu0pS4e7ImLgA0JqbSFwL2lYVb615UCjAdd2Y4tQRXb9KV2xaqK5\nZowxtHElSW6+6oaOP39Uja+L/vCRDnBb8eXbI9zj6s/c2KM9IW8QY/46IbJM\nG3SshdsmuxJCLbLMYe+B/oB1oa/fPBm7+pZ2CYVg8SOzpgo3RhRXGNBMx9Jw\nXQfzjgZlVuN7fXVcqQpku13w+aQPtR8g+z5aGcnUtCoLRSuKZL11Hvv8hoRN\nWhTPlw8/1FW/xQYxs/qixaK1RFlqXtK48iEfBehcgmZAGB0esQzJbjEXGY1G\nmrifyNLbzq5f/PhQCSozdF/KfgX07t7rTdU1+3rTvEk5/5Lyr+ihWZupb7Zt\nQzlsWqnQeTnP8BoJrFHiUBsQRxtg3dAD1FSVkoqyKqMZ3jBO/SMDbL4akB58\n5yQXUW15KlRQo0Axt7f32iYxQHSyavi9y8a2aa9D9iz0OHOtVbmHnVj1n0aa\ngt2RLbUWEvq2tWZVZA52avVKPcaLJi1Xw3QplKSQF21/Hg5DkeLGYsKA32Hm\nWOkOMWYJyyxbT3phsZzHJ3k+uWrQm1JonkIiyL028hiDuEDvdVpDsT65ULOZ\nm2t4SUh9VEYAFpoIdOkLNFPmmacTfQEnphrYs08gacnHXKA1BniXNCq87URg\n/zx/\r\n=q6eR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7vFnvY0SEAmn2EWEORpT8FSiy8U4v76UI1dtEt4nFqQIhAK4JRLf9DaU5TK3H6YwhFo1W2oXys7d71I3/tJ66Nvjg"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2371-beta_1531418958388_0.10046359841889707"},"_hasShrinkwrap":false},"5.0.2372-beta":{"name":"meetup-web-components","version":"5.0.2372-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"49726b701f95a23c5ec8759c3ea2ce42f94158cf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2372-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZXEjAZ0zXPRQLApNDJNp5f9q7H+/DvdsibgSXi2KTKWVQfOeuWBItEEeSHR/0b8sFNJqechEq/ZC8wUZJrGGcw==","shasum":"fcdba5bec4e2020c47d80247e952388f8dce3f50","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2372-beta.tgz","fileCount":591,"unpackedSize":7030558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR7N3CRA9TVsSAnZWagAASLgP/2o3jqXUYYkqX/sltAam\nCuLi38bo+i6L+fSYsdJDlJswlAshL9vrqJqV7GJ178Ujsab7j3DvKToUNT2I\nVR/8mjlxCmDZLytDw9TCjYHl9a0WIUM2pluyS0y7nZ3WCxWhd+3kxYsKtKAu\nfhByBvyk1foFWHOLtfv++uIh6cJJhsJUpbtfCy5i9wA/GLghZ+fI/UCgOgnL\nZKOM4KuVpIDkw0PPQozikvuu1PNb9/IoR7oXLMJYixRZ7Gg1IQUvs5hNpyBn\nMIxLiJHxKvAmBfCrI0YUJ1gUiN1idSFSCr5kSCPolNowY++w4OSqWaMAo5nq\n+ZA7tgtzDUqPyFemTD8e4iIdvZWgFGyI4tjQuk33zr5YZ+TJ+Pk85C7DnySb\nyvpWL/QDwaof44tt70eqkMds38If24z1uv601P5/LpmNRjNZUjiTObgDoTFf\ngSEDztx67hkwIiXOumuVY7phX0tp311rVOvyuNiJWXplu5wPb87FCzrGCbF7\nOhb6NF7LYzoJFXr3JROXCc0EAv7hZbTwIuMfGN2EnpROA/r2jWglITbTfox2\nbMlkgexLRUSgJPwKImlazkCF3Tq9B2K6q8FovgydGLPSQqYqaxYaGZwTup2T\nrB2KNY91smGzAees4CVU52u13pifswPRv7FIEnJcwnbzQqpLd03BZW5OM/iw\ny80Q\r\n=AIEE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEJkv0WJ0ogtbXEBEeB81LePmqbpjWsqBeqhK9vzjFtnAiEAuCn05iQ7hgbjTG2mOhLfk67CLj1J5NwoXER0xmMEWU8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2372-beta_1531425655452_0.07350084608071583"},"_hasShrinkwrap":false},"5.0.2373":{"name":"meetup-web-components","version":"5.0.2373","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^4.2.404"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"4.2.404","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c32b55a88780ad22b54c43f4685a4ae0d550c077","_id":"meetup-web-components@5.0.2373","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EEU7Pihf1/Gh8AhlGIzOC/YsqHTt0jZWxB0cWJ4yLmmK7EC0hAQ7j8g3g+NlQhMp5k8vcpA5mhh+1lbSYIOmgA==","shasum":"e168dab875300f96973461d21909537df999a46f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2373.tgz","fileCount":591,"unpackedSize":7030553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR7S3CRA9TVsSAnZWagAAX6wQAJsBVEz086VMDlbSfaHW\nmg667y/Hw8+fe6Nuk9g3RWJ2It3SrosxE6L1Rmrj8EozSh5zZ8jWGa408WId\nvUFs3/gaeDkq2X+jPkL/6AtFiko5uGeU4PQ0++b2KvxcWBMkf2da5qCpMXeB\nD8aOmXp0tdi8aWFrNbXWacJlvba7FnDDkcphJvub8rjrnrVwP2Mk+L0m+QPj\ntzMPC178N382DoTjXl6964ZJri+eSQ/VqtwiaX8o/Mp98puUfKiN0NqwCW0o\nNTMOviYTsOickZvfgEkkJnZHr0m87AFzh6qHAIAbgMZ4IRH6BAIZ3ZdqbdSz\nu7xTnlcRXZ2MXtM9gve0CfVprX7n/EuJP0U3oUHG3sHDSDmcgaanbcwjQJPe\n7YNzBoqUpzcRDbM7RvberUFkFSSkP/B07HFkLWgHEXd2wcoj7V075DOJyah/\nauYCvmZEUf5+KgOVYHJ5+ePhBmcKpsvWUpZZwUtX9r8m8RwNSjv5VVshsz9/\n7FC+fqFiwPJ3llmTbrZXaDgxagZTlKau7FH7ObCQWJVDEiJUBZJT0mR6GIX7\nSq5j8RJhFgm33PQVDyuspSP5Hm6sDGknRdDG4XYgeh+V7auvLwlISUWYu4Sy\nsgFm1PCWJN/XLeeJAqoeqPISoxxDoijLULmzYN5dMVaE6vyetf4Nb/4ftD9m\ntyGE\r\n=HTGz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrXSrvCQE9eBDSTOc9WZG+JXQsgISdKr/RAneQJ/fKWAIgFia5uzWwCa2NoT4vQDPfEgdh56r+MSAT1WPLppY5cpE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2373_1531425975837_0.7748928526401422"},"_hasShrinkwrap":false},"5.0.2374-beta":{"name":"meetup-web-components","version":"5.0.2374-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.4208"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"55c37b8fd96d3845f9fa88dfe3ff1cef08849ec0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2374-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AMY8+9Jh0U2Weu4oFSJgGXLtcDzLXoZEqDen0RZm52SgvYrlhRAAIy0MIX4BOio9UMvnnYYVroKemtxX8iPDSQ==","shasum":"e49b310bbd1e1dda882ca77bcd9487f64a369f7b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2374-beta.tgz","fileCount":591,"unpackedSize":7029671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR+8yCRA9TVsSAnZWagAAC/IP/026BVKs3q1zNJbAkILU\nz/3E3AvMTHL4We5OGgV50BCuD8SHXe8p7aoZbkaSpaqZfhK2z4+L54uAMHsg\nhsLh/m/fwuJ86xuboNdKevaHbKVbjqPGV+KDOUuakBvR0Q42EoDE8aDeSnwo\n0+rbq+2K/P0kXNU3949ZJLFP6IJ6mPs2shXBvpWgilxmkBuqNtjvAT/6C+yJ\nul4xib1JcYFco82JkeInjb3xpFmDBbZWEoScRtoRkbdaJiXZDRfZFy47NiFb\nus5DzCmaFFSRNbmSiVDF9bIKLEfC/hCYrjbRbny18mpF2PwCR4y+CCtX0uzm\nxfBf2gy8ralUdUyoNIyMUGoogYYxdQmqZAqF4O3lQ3CpswewZ5C9sSCbDBFo\nurpDPR6iWDzRumMrR6yB/GxiP+UnjrvBfBno0p5xT3zkktDx95BryAtbvtmO\nGfisbUKQpZfzuLPxAyf3541dXU+H0dU8d1afAvCxBxsAbgJfODnI1KVPcg8z\nJ2A1wyF6rS9eLgp8GgO11eWrDCnRTlerssAoCzUOb2mGYVVpaRSnt9NYN+cn\nI6ZRJ5H0/0K+zdO0G4pAdn6H/mZX6jMl6C5D+0A3V9HTwSEpfsn3xiy2kGkq\nmx2ceFnqM2ZLlwho8pP47VocQmIGobJgvX15UyGkTN4I1vo5UmoLtqGFL/Ap\nbSnk\r\n=y/tD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOj0Kumvi8djY7h+FRBaAMJfUlJqckbTEbF4Mnh5z0AAiACnoJX8COxS5LC1GQI2MuCVdPZgB+7/yPGYpV5i3HBFQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2374-beta_1531440946451_0.7170942237203741"},"_hasShrinkwrap":false},"5.0.2375":{"name":"meetup-web-components","version":"5.0.2375","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.4208"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"07453623d17218fa87f19b57fbeeaa3529ff3caa","_id":"meetup-web-components@5.0.2375","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Tdh19nWwt4ZNkgGHfhBTJQmuZE3cfq+OpasTyyTzDANLsBEa2hM+6Oy3BcFI2UhGpi/v8cxPbrC1cclAxWrUQg==","shasum":"e71c8b463685d594dfcef625ed00a42697827c0f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2375.tgz","fileCount":591,"unpackedSize":7029666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR/IKCRA9TVsSAnZWagAAqbEP/1XBYPEqHMVmJKcHARNH\noU0HiYpM986GWNFzfYQVG26IqcJuTaVGD0O7+4h4z6JcqKvk3fJjMexoD8D5\nb0FiY8cdNEIYxtaGlofJJuS2Pj45vW/uJawlLGzxNkpTz3pg3dhh8AVHvVXg\np67bjEkYjM66UYM3WPFKm8/UXuxRswuN9CVLw87jaqtJZh8t+tkMFR03DmIJ\n/bIFNmt6p56Nu52AYFTHGzXCimtfqtOQdxoiDGbu5Rw+hjfkzo2b97fOPJsZ\nONRuLhCv0gUmesjY/8vvASom9WyQduPr39Hkpcmuo6JG7hkDzh0cHiT2aGxc\nSxhWMqlF7kni9v4XW+nikggqkXoPzeZslqsmow5FwtqjhyoHTsqGVRykvhBf\nBbghIBfF6Lfyall/zX82bjM6AId93CQEREc/GNkRvrqGKkSBuzF6pU4IR0Fq\nyQrA3AV/jOE82yaUCB3PSHZQ92Hg/CK/A7lQdkCDwvw9IdGZmbmvf4dG1tBv\n8VQ/gY8/K3odNZRmwtbEIYAr4ez8F72A6Gmh8dJybc/IyZRgt6ybdgECDFID\nhfFqGMy+26KDwx9cUFiWyzV/6DbKxonYZ5KpMP2idp3T8X/t8+j6/rKwLbND\nSIbVv/vs/aY0fA688aldLEBfbWsYUetEtj7BYczg5+ELSfn3k9R96+7GH5YQ\nxmXn\r\n=IdHy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOG7NB9vsBWVJQ2WOYO6NMCAvpW0f2pUNtkTyXK32d7AiEAwtHpHJuHWRJMV49LNETWtvDeut1Gtxbko/aQQg3VcmA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2375_1531441674701_0.5552824983439668"},"_hasShrinkwrap":false},"5.0.2377-beta":{"name":"meetup-web-components","version":"5.0.2377-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.4208"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"76b83d29766e36bb11230d6f5e393b71038d6afe","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2377-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8nunkyimT+JKpsNysQek9Dzssy7AMSE9xtwGh3RCeb8p5XIBZqpy3stvF/0HZwslQLzKkrgVgzFKAJqrrYr0vg==","shasum":"66b8ff3f1e65c0fe443139046e401634ad0cce76","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2377-beta.tgz","fileCount":599,"unpackedSize":7512760,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSB2yCRA9TVsSAnZWagAAjjAP/16HlxfDLJifKbqPIpFA\njLL7pXApoBUkwmos5RRakkzDCSjrvD3Yf6ERJyjBTn068MPmF8mT+J8C9H+l\nA05Opk5pA2jKAsqFKAXGZ8KxxkK5xcdnC70WeXIuI57PMiCXxy2eSOcUQFhQ\nWYQTec3sD3ZuWML72AFgiIM7lNv1hBDM5ahb+j2nlx4ue+YGP318p9J2qhSU\n0Xc+UAx6CZRLl0Xv0RCSYXMlaxy4MioEtEl9wrCnxkfEHvfTVVc8hltpQLUW\nlGkX6/kPPN8fuUTl2J3OFJvTXm3GC2ab6eWzxnTwRDLbtoppBsPPYhgo+S/U\njB0blOPIZYgCM3Q6QYF2m4+1OqJ3CsdEYBFzTSClHLjykTqpfo+4supveKiK\ndOd+0LMT05Iyptw7V7jez/R6j+L20WgVsqO70Czyo4tuk/yMy5Ue545Faquh\n/TuAxE5HYXb7gP5DhkdBT2LstzpS8mBj7JYBCeFvu5eZQBfnUY8O/fD/179H\n+wkLhD4wAgcDvFGxd6GHSQ7DYESQv7xvZq5xaoumREeBP7k5leB++x4KYptT\n+LXucGlNw9x0AauXlgMHHRmlctltFErpcbVAq25fa1dS5mjAu5vmlMmvU2o6\nuDpaAawa6/5ZlSlK8OJnyF1hlnj9ZJc4SAnKCFjraxx4MAA67yF3650zYg/k\nV/i3\r\n=+qWz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACDh5D45nhOHp2+reTVHAkODsTat6qw21nfXL/xNSjXAiEA+MDaBjJeEE/KTM0cdVb3Cz3rr2hoaycKpgiHRACkjUA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2377-beta_1531452850261_0.9513678331292306"},"_hasShrinkwrap":false},"5.0.2379-beta":{"name":"meetup-web-components","version":"5.0.2379-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.4208"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"d6d1c3447879fd3797a69d9d653a7eb30b236b38","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2379-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-PIwJBZizkcZsJap5SxG4oZG4NKEbd44rEVQYn8Jw2fOwE/cAagajoe1jBvvi3myhMxyu+HJbgzWrD5gP5Hl6KA==","shasum":"4fd12e294d340bfa1baef11c0dd526d1ecb31a17","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2379-beta.tgz","fileCount":599,"unpackedSize":7513892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSCRrCRA9TVsSAnZWagAACTYQAJOTKsHE4THaaDvew3md\nmBy/fqDB0LE8Z2b4VEUPfekdQ9PHAPOofbKBXHhmJM/YC9459hl4unwHItm7\n0HBSI01MOEK/mrldf8Gwoe1NnCYM6YnQkawTcYYUyKPMlixCvmpP+Hlx6efN\n7Zy/gTJ02DmvY8HPQN+58L9JAbKlDAiPNYmjZJzTODRY5TeXPasHnCHTpcma\nYJ43elI0wAALd6ILj7X0fUPa3HX/9Llg+ifWVBGBnOmNsGfFhs9ikxbGHk0w\nuUIxHzAJAXerWoCzNo8V+kRMkICez26E+qb2w7cqid1rfmXSYh6qDKcqrgSQ\nFn8n1/s2ROM/NIJWddKmiK+Uj+PJPKDIF/roJhtHERNS9M5idJYuWuvUF0p9\nkjRNH4HmI8Hs812lIoq3KWI3DTZHPNMvpFomOCdtuoDkwI8EUUfR1wQ4divN\nWAwaSDGJcwgw1kPxPqEAjhX8jF1Jwc/0SIDjN4fe6THqeuLU6zYvwN0pJJco\nbMh9XELIgjdi++T2vYilbZWq+Khw4jlXOrkNkIardDraebOwa43Jg3r/F66k\nKZAH05OyS9eqyXUUv3VzdGOjAu/p4x0H/F7o7KijTHx3OEXBAt3bXZPmXe07\nHf+1Yr4ErPPuD8aT2ZMY9BcJ4Vjxf+x3yYZrxZuW9iZpnuqEfKWGAXefOhIE\nbHin\r\n=QCQ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChSn3BFI8N4xoE8GA/XR6f1pBbHJCaORX4kjgEgsHP8wIhANcUnpV9+i89dwPfQNZBdn4yTHVn+BtQ3nxpI0MgOAVS"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2379-beta_1531454570905_0.7048376900140034"},"_hasShrinkwrap":false},"5.0.2378-beta":{"name":"meetup-web-components","version":"5.0.2378-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.4208"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1653709cc5f0ad3ae68182d5109e5ed297883e2e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2378-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hXGIab2qMXhJhevm77nRVZkHlCmFsXWfypOmW9jhwUACawWKnb8zWuL9jJjs81HVAISrg32bAPBjE1zEGlPLHw==","shasum":"cfce84989a592c4c2452335fa77412eebd55680a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2378-beta.tgz","fileCount":599,"unpackedSize":7513892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSCWRCRA9TVsSAnZWagAAciUQAKQl+bIhJNnm/X6JeSH6\npWtnKbDGOJ9U9H3GndDufxn0FH+SLLeTapl+aRb0aThZ066hijLZzm0+z/i7\nb1g2LVm7rMK/5MiK+mBHoPdLXgP5Dl7drEhJ/MX2Sh0me+XTCXZ/dy9UVMAo\nTWC3JJdI5v4oaBcL5E8GI6EeGIX95+w31zS3je4IPlKNYVWlXSby26IxlnGX\n51n+1Ox//w9SjmDYjJTqmXNOAHzuEqvU4ikTo3iqQ8Ya+pQxSOGrhTI5yeFD\niVdbbt405cCeoiqIuAioKk6Fvx+tlbOIm7Ob93cR3ziLGFFp18lLhKdax6le\n0Qs+md3AbJ3nSL6dxSFGtVy4U9+/fCnWZgeWGkq81AeA+AqZ6n/0tggKQdro\nI7gR+AjUuqN97ty+f1kHzFVwzGNoQueVBOeKBLM8lEWlpG8gADdWZz+qTqXQ\n/EjIMmsTQwXQaio6Qy66d7yp0I5W4h8AUCqzUFsdPYIALoXM4PJx3QUbdMLy\nUxAm+KqRY6UYEyZ2ff1gbIWvedALn2snqrv9lwxLSJ1dqEqNGL8tyGm3N5rC\nb1b6hHKXWFyWNsSPLbMrAOv7pl+j7iyJM2R2/xiHVxxVHnFb8QOCvUDt3I/v\nJZFw2KbXzoOI70Zvw0Tdt/OzOzoTP3QbUdVxNaXiYsOeSWk7sDfogmJrL10I\nO4hl\r\n=2lEh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAmdf8SLWvarvrCHc9hDFnqastKrqgRWU5ehhN6Zn12OAiBx3FsGPLszGyvEjo7o/2LC8P1YImTCGmoevwgf07cJ7g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2378-beta_1531454865595_0.12620771589200097"},"_hasShrinkwrap":false},"5.0.2381-beta":{"name":"meetup-web-components","version":"5.0.2381-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.4208"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"f90834d40334a6e6bda53956f673bc56492f2f2f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2381-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+v3oIvBod13tO/YZwGoXFKRxHDIAFiI8iN+fKUbRU1N7O6TtkLBeXItC5TYholugteOZu1BoEhzmqbVknewW6Q==","shasum":"02aba982f5a50dec83e279beba56ad7c6d0f62b8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2381-beta.tgz","fileCount":591,"unpackedSize":7031102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSLdMCRA9TVsSAnZWagAABYwP/1jK5MkT09P7hAlkzKju\nczQY3tW/P5vFt/877ppZeDdHF4A266Gzt2jeEfm1ZlG7BXKYX1+oe12DO4jp\nBtavw4Sujs8dp+sxVhU6QKpsm8HTPBFUiHa8c0M5hTwuIQdjEsuqbcdvcsGH\nLw8EVYxejpND0jIpVJhiw+gmcGS8tVC77JClMo/mtiV2Gl4jBvQVxkh8Ga+h\nLoqGQXDZJm3zR+zkC9qSgAa54Lb0AfwEnNU3E0keOoWbXhlOO5OR9U6mj3Uj\nKrrDggQPXePDTp30/9Cf73s8lJgX9trPT7O0Bw0/Cv9pSVG2cUtCGfpPI7Ds\nf3DxtdJ+yb98jkWxH7VxGlIh2tqyJYujoSifFDvwfdesVsOcMlbRr7rhamno\nQgIda6SowkSKmBLXnKKZP1fsMzorXGnmICP2zfbx680Tfw6ixMAp5IXwQPf+\ngLx+iae6Fc4Q6+3rQOYBh4FrVFD0DU1X1R75R4/Eyzq08Vp0xp96AMJzbd7a\nReLU/t4GAmXMiXNTrZ0oEUXfoakBPGdIaK2Ouxthen5DOtrPKiabXJffYcE/\nHzZZlt92CTk0yc3eCKZDzQT5Y/rZBhjJlTZBRxZj8JF4nxWHVdsoPEc/kkXM\nDFzzkO5RDe6eefRV38TYNThbicq0gxVcooeoRZ3CEwzI6QGENwvkUSbCJHQs\ndcnw\r\n=Andr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnPxrCNbW6XJcprfd0qAM+8WaQU3Q2I4kyjGxUhL+hrQIgQKk5mgjuLBNXV2T8gN9DUCsAykPtMXMDq7ghIQJG/sA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2381-beta_1531492171110_0.8451001236480189"},"_hasShrinkwrap":false},"5.0.2382-beta":{"name":"meetup-web-components","version":"5.0.2382-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"77c2eea4f8129d88fdb239b128aaf66832836433","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2382-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZkZ9CAR2Lsyo//LRMgFj5Vjky16uIraa71ih48kqhiHrz60BhLHIzWNvt8787587rxrKw0FqTwsCpYicKiHfdA==","shasum":"9c8bb9250dbb69cd4fe2bfb5516a00328506195d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2382-beta.tgz","fileCount":591,"unpackedSize":7029670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSM1WCRA9TVsSAnZWagAADEoP/0sKZ+kQZQInxaHZwLlY\nmeoemQOkBXAGBHO0up+5n9Xl2ZazvJCAQ00Bk+mUVoAqWD/u6QMdalXV2XmA\nlD+ZOuYhNRVKm2EiNLhTGtPh5vM0ak/OK/i+6ZcVzHhMoFdGGqckas1+2eMw\nT4/at1gQF6LxMDoSKXFmKmQzPxWy7SIO2mCHTpWBzANLUDlCZjm7L7bwxEj6\n8A2pUzB+vsWHGSYmizJNbOt4dDsAoNMYpPArkdWjfuOAGwKARDpDVDcEblaa\ndGuZG4jR+wpE0nZcKWyzP58uYL3aXN2lve0kX69zuQugzjNCKyF0X2Z/a1j9\nsKCm+nU0p+eKXTWmmSm8PGmgv30ZXVRC34VQ+BlKJCQig4ZvtzOgPXXSNFIh\nFKeOnseULEofrwBBAxQLfmEeH9N1FutELTReZFOtbv1efTID5gTIJi6SibHT\n6cuK5o04ypHliGjkPcbs+BnuCTPd71lXjHT4mihlawEQIqf2DbKnp3SLhw7x\nYltO4/QCXWDS3o5jTStqmk2lg788129TFJbrv/J2wWT7W83IsBsoKTtq+5g2\npnMrq7OwDkYi3pC0BPE3cEgyQ0FDHUVT1J6ue6GaIV3RJaQPyMt9TTgMstML\ncgAyjzODx6+Sd2ZVwviSyKBLEo1iZ1QFfZaRkDRb1MYOCKggqGCY+3FQNAzb\n6sA4\r\n=1bhg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnheBh9LJnMIu6OVXE1pgYb4VguR2tswVG00krkXrXbAIgcKxgEE2UgpzCwubzInXBcmTnee3laecDM9i6wzSjTFk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2382-beta_1531497813897_0.7134229143837625"},"_hasShrinkwrap":false},"5.0.2383":{"name":"meetup-web-components","version":"5.0.2383","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"35bd0353663c62ec673e64232da7dc5afe10e3ac","_id":"meetup-web-components@5.0.2383","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CajUjLxw7cL8h3ijO5GTJnghOJCkk4TFrE/LXUcewI01Z4+AfvVKwQE+IwKy9o8g2jzWX3P6NGl+8TOA/7PHmQ==","shasum":"1e6c8226268a70145fdd84758f0af3ce15eaadcb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2383.tgz","fileCount":591,"unpackedSize":7029665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSM6FCRA9TVsSAnZWagAAmlsP/ijLdfa5JNT9Flcr5IpB\n+5q/EjRVDe/LRraKRIt4kP7ydzxtJ8FNkLBGKkii3NRx/edY5vQ84zoTya8I\n+dLMVWOVxhelN13FHNgF/rufKpIAdTAvNr8Yo2SxlYIDX0xpuQRMo304e1zA\n0KxsuDo6nJBrh/OcMJtTgea0QlndxfoTrrt3a0Ptp/HmCRdLm2jytHPY2+RD\nQViRF6cOswupgk1FkAdcaAd7Ibc3z/QRrvzBxFpDV6mFQ3+z/R6v29gEzjzX\nCG/zMlqKb8LUauU0RdK41g73mOkWt/Zc+81u96HAr04d0pCYdGqdV4JKIfCf\ngU5XYdhGztUFBLX16+Tnwnai5+uktPakVaYqu3H7cphXXe4jDEC2GOOcs2qX\nistnZ3eKJaT4yYOOquwyLY0Yqdg8tRfnuYIzBDBkMC61JLiYDRd+qYSEsyYk\nEvKPbd+CoIfngP/DvoeVCms+3wEGIDxvfqmTGYmTPDZdNJeT5NyYN/6bTX5I\nDpvb7uDXXpMt/6E3J1aJALpZHWA1/uhEMJiT5w6g0SN44I26/NEXukSWRwgF\npYWnCbvu3NYDlxHf+tsNLqlLGy8tuWO61HQmG2LGOH7Jrel7iSAkksPV2ra7\nYf6bL6w7kuDk0dO1Wlqlir8TirKG1wdu940LCmCu776P+1hT6RJD4gzghUAm\njTLW\r\n=mJ2T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBIDMJz9HS5SLDo86wOJ2JPVMod60y3Fq6GUx+IA/IT0AiEArf6AGSE4glVXRE8cO7oy3qdWjUBIs6Do6eUVDMF4vMw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2383_1531498117829_0.8120487340555858"},"_hasShrinkwrap":false},"5.0.2384-beta":{"name":"meetup-web-components","version":"5.0.2384-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"fd78d6a9b1e57d655db4fb94aa3d2ec015b4c00f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2384-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ta3CZ/KCgAb5PtAOOkDfxnL1lFg4b+3oM0HZI+Oyvlu1s3VZgVEToI5etD4OylIJhv+4ZPBkQ9C4s+ryThTuUg==","shasum":"f02d132fb16e77d7249e06128eec3340e79316c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2384-beta.tgz","fileCount":591,"unpackedSize":7031101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSQ6ACRA9TVsSAnZWagAAbq4P/jh0m0RTII1Z3vL2OaKO\nHW3h8xbSH9vft637KW/H//Jhfhy3NGBQ9zWPnK/ra37ezAyiZslBqu+XZ3aV\nuGC9NO6ECrqzJAPGrjs5CJdAWSiKOLHng+bTj8EqRIYDTI3XcD6NKjXiPxTv\nBdR6+qyrIjMwW+fuL2AAlGyJWKQIXjRhJYZuKcH8Bo9hwwvyf3CDSVPPS0rh\nTe7Pa1SzuOEziTho6OOAA03gfk0wN1/mjdYAWf20WD+YCHB4yaRrMU/z2ckf\npzBmGcp4Bv+FcJQm1wXEEW1tGpPhQIX8RS2FO22xNfe7sccq2tZmdhFX/YbL\nry2tqBfe2ri5Gvs1H/8ZCdGV54g3m6LDGbG9y+tVCVzBi0Ut31TnRteWC4Tj\n2zkwajnDAAQMMSIldZHfes5xtE9QnqkYqUPQ4fBv7KHDkMyPo3VsxHfEuLHj\nYZAcBdTgY7daVE3EqwepAXgq9086V20zaZ5XW0v8jC6yoIkK/1EbluqrGDh2\ntFV/GmsaCwnrmNDGBvOfO0sK7/O5mt4mqytFgg5cL6Yx1eXWszw+zIl0uQCr\n28Ja1DNtAHU/dLCttjHa56JA+L4BIt1WDwOqTKUSZk8R+G7D5+A2gFUld31C\nOQMe99HcBwpQQIW5e6Sdrt7NMBAgjZEjNT0nc6sDCd8JxRPeEI2E33JcLnky\n5P11\r\n=6pSj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWSAmZLKaGjIsl5UGC4167vZfWMR78Ee4eR/MAoq+gLAiEAiAmk+kzo/yQgemgN3tNgMCcsHNEyGKxyVuhyMPyRZ2k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2384-beta_1531514495855_0.3775996111425226"},"_hasShrinkwrap":false},"5.0.2385-beta":{"name":"meetup-web-components","version":"5.0.2385-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"21552fdcaee39f42764eb6a3e559543ea17ef61f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2385-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/6Ix4bj5NnHp9crxwEvb7ymJPUVVr7UFKhqrhfLTH9tnsgMYbn9+2SQOcqfqJfXBNI+ObeaPIP4YWmgMUl7dTw==","shasum":"bb64638e48c720d05618fbad06a3354a955d53b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2385-beta.tgz","fileCount":591,"unpackedSize":7031101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSRW6CRA9TVsSAnZWagAAx4AP/jwMy1ijSL3oofBymw/R\nEkqHIhBuXLBW5kJHIHzuaExlPO9weH5bMx4SG6Q7LaBO8bdNQe2Ls6MfDnSe\n58Y1WsdaTcrSgfG0ERT0QLk/f/jO57XGjMIU+9HObHaL027LZ4VdHO2wQygk\nNUhAN9a/kAsU3z7Vv6ZK95mFowU0IHndJKT/gGws8Knl8Zx989+DPiKl9Air\nFFMWliDZMVmV97eQBzTyLLDPkZXQIQl9gn44CarCzPisJDxAqqEAoTuwqRZl\nLOMeqHmQH7N/cv1J2kqcK/LJ842bYQ9p6vXY3+wkDJUorT5FkNksTgEipGFp\nW4CS4EkibWrTQL7NvHi/9wGMBqVq0n2l431oV2uzJOmHIzyCisi3eKApp2Uz\nPm6AL00+wJB/Z6uMf+tGs77ly9vjRnuuVNqqNBx1v+KCogmKWzfjeXcnr7j+\nnJabc5Gcc8eqfn7ZRXg0x6bTFf/y8wEjx+Ci5ocpWuqaTe663Jc0JwLU4zKc\nF9TWZj6xGbJ9npn/IY3kBj6qcTjVi0C5dlMP18brlWJKyEcqY+QqhQDC0L50\nH+lDAzuBU/M5AgWYa3SrsnuouJSzB002XTYsNrEZg7N4UwoVpZs+qnBGGmC4\nKWNgiDgu+bYi+onKkOJARaR6gDhr5kP4MjS6p0u7iTN441WWpPda7EQ1z1j/\n0fd8\r\n=YUcK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiTs2Jwh6HtpBWPK7gKe0SuXIykke+HWPpnTf6bgkIlwIgCmBbxhfyo+qzXHwl1NOIQci3aM1CoCg/0ivFeHhqInE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2385-beta_1531516346511_0.04686596967309553"},"_hasShrinkwrap":false},"5.0.2386-beta":{"name":"meetup-web-components","version":"5.0.2386-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"132c072e0ad701b77cd94db0055886478b3401a5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2386-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VFejQodVRlW5rZ8iLbRyV7wWrI2IHXC8bQMZ/22tDDyT09i98RQ0qEXdMT2s6IunVkLO/h2aNAqfkmGgiKZ4ZA==","shasum":"694a5c2f0626c8a89bd3b63e1a0186ce49311a32","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2386-beta.tgz","fileCount":591,"unpackedSize":7030147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbS+XLCRA9TVsSAnZWagAATQYQAJnd8+4B+YNAAoj4nS3j\nCD6wcL4GKmKCmxuT4PJUEaY0SdSSUEWUdld8cIXd/7OmCngaQYI7tFYickeO\nrWQu4W4EfSNiO40JNQkqvw3/FnljOjwEVu7ibFITMsdYnWRc5meipY930LP8\nmiDLMDhyKMdA+IaLFS5Rq+EkbMyQoAtSO0Cv9QwupHFBgNsPkh8ytV2j/zrK\nIXV8i2Vcm0LN2vnXJeLIg1c97pbgcjJMmScw5kS3oiIrLAzVYKkGBXTDpcej\n1sy5MrGhLjhHaKyLdwnDRl43luVwVs20TqQDBKxYFbMqjGM/qRFZVbwDoaHb\n7CGeZhOBhq5PBU0pCZO0cY637vb1H7LkvCW+wwmek5DVzSBh64Li1qpOc+ud\nIdi0V1tQi3TrwHjxxc5La3vZ3lh63AW9vVczh0XMvtq+e6mbvQ9ySEV3Hwrb\nB4NUCe00CdbE6NqZb66Krt4UMsN4iZWa4ibyRZK24m/fIap2OHMIw5W+YXtZ\nB9oWRytMRSpoy4TkV9DzzXixayTIRiscF3p1wGpDTHg4mIUSR2jey9/NOZbw\nK4Viqc+MtqRjWY/TmrouuA7ht4OxxfxlxD/FWwZg1aVonmhrdpeYxp4TlQpc\nCN92bjAa1zqrXrucdu7HssBMAgdOrVUxRSD9axHcx3XMo6hNTYMnV/8R1hap\niVuY\r\n=NI92\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFiQwkJ3a9QuhqCM97xhV5B83Nw/2NfRhfX2y4+pBpIHAiBiodaM8Bj8/ISNnAZVRvqVN1UMeV1F/PdjRxWFQ+qOnw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2386-beta_1531700683313_0.8042059191933564"},"_hasShrinkwrap":false},"5.0.2387-beta":{"name":"meetup-web-components","version":"5.0.2387-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.3","@storybook/addon-info":"3.4.3","@storybook/addon-knobs":"3.4.3","@storybook/addon-notes":"3.4.3","@storybook/addons":"3.4.3","@storybook/react":"3.4.3","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"7.2.3","babel-jest":"19.0.0","babel-loader":"7.1.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"2.6.1"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"990804a9c60bf3da28bb62f5e326639532ef8882","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2387-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vtCK6YcmQ8panjqMIwD0luszesJMEPIyMhoapjI0bvAK6oTLSeZNauv+ULD9s83S5JHlR5FuG2YNmxzu24FN9g==","shasum":"4a82a4d18ee96deec53525854fd4992674b3c3de","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2387-beta.tgz","fileCount":591,"unpackedSize":7031101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTKIqCRA9TVsSAnZWagAAKKYP/R/n1XpENH6FPDuKbGES\nJVUD0MXbUuCO9sOVbkUdRD/pA6tmfcruUvR3ylscoPOvpzMFdvdHFRps/wmg\nkaoegVfledMM/iQK3oQWEWUp0DbvnZM0BGbHvAIDB7qGoskMrVO4bw4nqzTa\nWGlGmgkWW263lcnaZ+veSdHsMRLHw6cP04h/xbjv1diuOWSuXHQHNDu9TDjg\nYFM2VaVCenpdzwkm9Oa8Ffh+L39BhONDu21062/gusOER+/zYaCangAGeGae\nKFbxZkYzw+IrhedPjCb01oyUdp2U8yaXW6zpELx6kz06dl6YCOjIeYljU+w7\np64RNv2aZkRz93Uz8USVtJIO/h+yZDV1cQaMcxN6JbNuc42yVmazphdzt3E7\nf4bezliAGL8JPioYM8Vhd5Z3PGiqoJ3essqIzYPOctZJmeIUJVvtxlPEzfUO\nDebRKcjpVCPhTrLDJc5M4WU6kYG689GdqsOQaqxQIFwe7sj3hVYyMtKOY6Qy\n11E0Ay00i4zBvWYML0y/sSdlAcXlqPi51pMhIPdlhSwkBG5SpszWHZer9938\nS2YaZQf0Hcb154lZL2rKghBWYUHXCuNN9Eb05yQy/wrTzQ/d+pmdBzcRrF/b\nwEkNywULexd838jtvSfO2b57euZhoUqLCOCRgt90Ld4P+Y6Ok6yCeTxEEg2P\n7RBH\r\n=T/iD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBcXwGC411G8hw3QQbU5wu1WPnOJLkUUB4RstuZ8E61AIhAJ1Inw30u1zo7y2Qrs7BS+lm7bZJlyONrAHvUEz+sMYK"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2387-beta_1531748905998_0.23552021190958694"},"_hasShrinkwrap":false},"5.0.2388":{"name":"meetup-web-components","version":"5.0.2388","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1817687b08dea9a4aad4b3c99f9f00d334d95e8c","_id":"meetup-web-components@5.0.2388","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RCmVoSGThJNUQw1xXGwLWeZG+Vw2FJc9tjs9IvXgLsM+4jEHHFX26MAB5QwAcb0AApW+Bw3maDdyW9JYs7p4aA==","shasum":"088fa3191e6d4d878c7e0478229964406aab0837","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2388.tgz","fileCount":599,"unpackedSize":7513886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTKp+CRA9TVsSAnZWagAAEKcQAKQiCUZgQGfaihBjweSX\n6MSKRIkLzJICPLZ4PKzOQN1usRXCuHSLKbs1XjEWl8YRYcXeEZks6NK8PxO3\n8iOubmZkQ2n6nbROGlp6KhWshbCabF1iCaKFFzATo4+nRDNDoPHaKTkuZaTZ\nTzwJ6Fi2dJFk0z+p3Pdt6zYvcoieBUIcxw9Kd99K0CmWXnfhHosRSk0GYIXk\nGTFXO7/i5np7eFx++sBF8Xof4PQehk9+PPvG7frO0HD4EszDC3qoz2m9syqw\nHvMktxP9MiKYPJYmublTJjN7TO4uZSXOL9N3XegGVaKtzSXBX8JIVPkoWuVz\nIi2u+7oIgTnHoO5/QtfRcJXBL68H9/PA/U6BfdAjLAGS14X+GqaIlbkM1awm\n/1+Y+d5RnRysN2Mwq73Sa8NmJJuoQcmejggiT9BHeTVNQKAieqf1pG5LEA97\nzqLSkR5DIR8e2+gcudge1In0E4DG3LGtNJmVqYFFY6786KRNXhwRhCdNMOIY\nxHfdDapCByx/iw5p5fpI3mTUPsT4j1+kK3kBXwfYrAmtvYSlaWHWN2wHKW4r\ndLpqvvQRa3Apzg+4mJWd/3wYqmvSv83i2N/rlRv0gj3gzGRSxxmhOGGs0SZ0\ne0ZLwJ8FplMq42ZHPNmz7ak3hUXm3pENhqbBqiwx55vMozfH8cko6tcgLp7G\npbvp\r\n=Z517\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOtG/Wki5En4yQf+Fz8ED9wxMOsks15k9YAJKbbjirTwIgevWzV39wtB+lACJGvMhHsYp37gi4RbxwPWyWeSxUe5Y="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2388_1531751037815_0.818538772338921"},"_hasShrinkwrap":false},"5.0.2389":{"name":"meetup-web-components","version":"5.0.2389","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"3668d2946b7362d1ef3faa139e2df6e1305d47ef","_id":"meetup-web-components@5.0.2389","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qiEp5q7E8+0jdM2KV1pQxPfrcNO9COyTBKt2R9IPiJ6M53el+JqWvQLYwYD767uyz5YX4okhy2gy+R5sZoygQg==","shasum":"4fe401213f4823c792ea0c47465b9bd9e0331854","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2389.tgz","fileCount":599,"unpackedSize":7515275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTK85CRA9TVsSAnZWagAAiKsQAI0rZaTFqKHBBF8lP224\ngm/xa8fvtMjYFv1Km+GRLAbGsFxUp91kwjyxfKjACjPx9K2lFVYRL8LoSXWH\njxB4afhvYKjWe9VFrvROnDCVjxikDfXBJh0A+jzM24pXoacWBMzQ3wXbIY01\nnbX/ihBP9xU/qCNdxCVbOZzNs0+/MEDBH8QL8W62zPA6amzxGZc7Wzrh4lR/\ncEnt3U26hRsqz/SErfRyPaRr0p7Az8c7BGJTVbPzbWE/ZttRlWinsTeZGj50\nDFEnLeZUPM9Qno4Ya1qLih7+f7w/Tjp+T7Fxgrig3qmFVJQsEGUJXriFWMzd\nCf82iEhPAz1YyZD+px8NXk8JsS0xcwHQ0qYgCaOlpXxjgjE+1gaEWmFd7FbI\nWnNxXlS2PQ/9zVGii316BGnG5ualfyEOvErKBaFD+t7eX8RFEgDv5o4HH6by\nyESgi6X98YywcLp9pcyFmFR7YqjGzeprtKFpUtTDf53C1aXtTzgtMaB/z26K\nuUe2tzpfs8K8+yfFH5sRjf2DekCTEeRkFayrf4BdkGoA6WD21+ZB+Hnxd/jf\n6bjDEOjzw/cRADNiTlnmHGdmB7qiMmemRHSjMF4xMq8S/hhO4os8Jf1WvG1+\nZ5oCKxhK1qvII5fxJXqq4kjk6r4vZlehm/GLn7J5cjDUpn5az9quk+eGhasj\nde3z\r\n=7+lf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEgSiDXUCCc6PWGKD75gOoygnS0//R4Kpqri5Mvdq5YrAiEAuj90E7RZzLwWmn5IDJfEqzolVZS+kzh9BOStF/0zhgM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2389_1531752249785_0.36483641032030767"},"_hasShrinkwrap":false},"5.0.2390":{"name":"meetup-web-components","version":"5.0.2390","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"450b69209d9c939fc499ac79d557d519fba4a7cf","_id":"meetup-web-components@5.0.2390","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sd3B3xCF3VusBBsGL8Ie00NGnj5KyKKD80CRWR4O7HLupnufsb7Xr/qjSPcMKoOyVoNByWlbeh14D9O1Af3lrg==","shasum":"5223caeeda943806d81612548c4c194792e462bc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2390.tgz","fileCount":599,"unpackedSize":7515745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTLbnCRA9TVsSAnZWagAA9WQP/RWx2omAtPwN5eKn4AfB\nCepwLI75HPlJM81kkQ05uRtihAgWOKb/ucuYf7nSAz/zNpHONMKAe9HsxmV4\nlvaxgN4mP+B0ndt5Tm57v6l1AojSjGvN2ieYHqyw3t5GDFRQGtv9O1H083P0\nAxTgah1kiVMipNva4MuSbM6wI/fo73vm81wbKUNeRbdLek6m/kNjuc74Ab1T\nJpzRgxUiYBnA6pSe5uUDS9JObi7jTYM44ENyvNMx7Itwxxy+zw464ekzY2tI\n2EQS0qmWMPR3nHR7SUGQO/kZUxMuTuFv3kmx2cHC3DuMZKG9mfQtU3kef1ov\nZ7rQCLVEfnfII5+1ee/mLIGSUKr8/Yz91dCvsiQAwmb0MN8IaVBxnoTJI/73\ntYU2tKrWZj/1vhqlvhDWIDuz7s7y4c+2bD66usZbxYw5KbmrRZ0QeM44lL4u\n+FtpN58ekAmvH29op+HjIYmOQzP+Gf78sYppkzViU0jkQ9U9kSfy4RE+Tbhu\nAEINmW1jKLnie5GRYQJncCurAHsKQpH7d+QKEgzUop+WeVooD+8vsK0vusy2\nqHDku3omsYF8/glvkSRvKCcBzB8tV16b3h50HYMYqQPQSMTXFBRFH1+Q6NCV\nVsjyGpiJo1Nub7QVUI4kIllZpXeImoxsDogFP1YSPzAJeEZ/fafM1xeGvnJD\nqmkU\r\n=nmjx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpOkhCfRu2CCqt2NP1CpaMedexGyWNQdEeB2ZPmQQqGwIgQYlyTI9mpvuElCAgMcHXBtBMV9yIvt6i2DHo5K8qbjk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2390_1531754215621_0.2871378252330232"},"_hasShrinkwrap":false},"5.0.2391-beta":{"name":"meetup-web-components","version":"5.0.2391-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"570b41885370994e8010a610c102baa851b1f222","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2391-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2vu98mw0aLKWmJH9upn9Vc8T+zz3pD6evxXWnneUB5SNWljJwDO6iWug+zFWgleaKk70Hjv8jrIVcezaLHmTTA==","shasum":"1ee32a562c2e78a593735be8f936151e46a454cc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2391-beta.tgz","fileCount":599,"unpackedSize":7515702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTQwdCRA9TVsSAnZWagAAZzEQAISVH6RStABRpyf1eBzT\nerw7s5kICqmDphQrq4RdUHFYMnuX/BnusJbATZJsdVrwQX0y0fQMgENJK/RV\ngK3jC9tCKuoAMB6DRc6QLWwBSlG7XK2cziE2kRAxZsClFTlKkexd/WHPj9tG\nuSR3p1afoQqmXx5+Ht/+rGYmiIUbXmUi/5tjb7oynccKevYcaSOXjVyAh4V4\nzfTNwgsP6VXk/kOVa29kIU3NWNWPwbGD7npvUkqD7xmgM8C+O9r8dvOdiFU1\nF1AgE8KonzijHsrTrUhTzbgdRs6lh76ETaooNSrW/72iAdKPNGuTIBenJywF\nb8OK4oIhrUbkdDT4bFO5sX++vpShJCDYvARghJlV1zvdNS2f7xf15IbP7wyX\nVYuRa3DS52BAddfB1nhrcoAW2QmEsq1DIgrbZ7dcDm06KJM4ovIm3oTMgcU5\nDhZwyKdMlSkC+rCnQb/fNan2HTaMZQeSsYFECFL6sJqKX+FodRIba6p8nCro\nIg3UCwy5OlUWBKOO8PX5GI04/OtwN8fOABcN4h3rbnbVorGIg0+iSjZCml7U\nOFqa2cTYKyBAaUxJ/YvKojQNQaMhgTVOJbu8gCVRheYoe1rIVQ3y4nT/GQul\n1JZlfvPHfCAboBCizry5mkq1+9W9F7LQ1zbI30EcdVIlBkdhCoBm1ZIVk+2G\nhXFX\r\n=Bwj9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBLPy54nqiQRqQphq2NuKPllbwJNGj5Zv/g+KwdaOfejAiEA16hY1/L+BszSWhu+MvWVlTYZTaQ/l0hAdKm/ZwnrfO4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2391-beta_1531776029225_0.9420009947361894"},"_hasShrinkwrap":false},"5.0.2392":{"name":"meetup-web-components","version":"5.0.2392","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"1175f6be8f6622b4130cc09cb62d0d3b198b2c93","_id":"meetup-web-components@5.0.2392","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RysrogZ2ecniCHzdUnlwyCHFeq7UGo1ef1l7UFu0NOWDqdjjo5OZszcQp5hMjDWhwy4sM4ofyc5+ZFO5HB/GYQ==","shasum":"d16ef53ca2b99cdc19489d4a6aec53d6c6f5b913","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2392.tgz","fileCount":599,"unpackedSize":7515697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTQ1XCRA9TVsSAnZWagAAro8P/2/agMfZAlxEg5JpwDWP\n9C16OMN45/GHHQsDp1B4FWuGCaRgdWVwJb2b4yeNNwo7X/o3Lxu/aws7aA4O\n36gR8J3Ma/Gh22EeOBvMvXGfdJ4uEm0TvJyOR2MJxc2fWSYwUAIg2+WS8mPi\nwB+wLYl67fL0KFwSi3P5I3v/WtBOKm4AX/fDJ1WXAXVobfzfcjDpeqHLFi3z\n0o048iadLRcCOXWa/q2c/ZY/9cesUgUc2hXUh6kYz+PsHn+KK+y3kUKmmMWp\nB2cEPwiFuUOfvZWHnO/sgzz023TlMFQTuT2X+PKnNzUmIHOiBSmbbCa+39M3\nmnVt+K8oYM5GhJ6sxnsO7QR6um5nOUyPs4qZanqsfwEdNvBEDC+R3IYW8aW4\nARAjcbLOUmLY6GGXpfYsimrh6ayAof8umKZEArfpxnwivw0sQ1IF7GFtxg8f\nUMgUI/UbuRb1NMlF722SzaMW1+tcBx3ZRJdV53XPMGaev5IW9BFUBTVi7Ky8\nCdd6U0HAOwhmVr++3ybxy4S/WB4hJvRF6M9wTVWVfTB8xg3qISPNatfO3MyC\n2OwJLCigbzHaDg4F2t7Q85hs3zdJhRz+rNmm7ihWRtFj/l0lrS1hWk2GJuYo\nSJvGHqF8daypXU7h6LiwdiQwLKBJzC/GZGOz5QFc8iyEk/vCo/zKVhAuKH8K\n412c\r\n=0au3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD267ZHrZhIKY2YMhaHvYupjBcDvFdulLK54OD0rBYjxAIhAO0U1RDKCxSU7ICmbNfC5vgco6/qn+QP7Wa7s8xQmiop"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2392_1531776343178_0.6723180949167162"},"_hasShrinkwrap":false},"5.1.2395-beta":{"name":"meetup-web-components","version":"5.1.2395-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"65436f98f6da7a5a7cdd1dcad1246daa4e65de4a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2395-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-//jj13k44tGhLfvjRCTStHEvjk9E2WL4pwTSgJtGXP0HUOIUgY6L4b2L8N8Zh1EMFH+LNJaYYA3m3PNmMuQ9og==","shasum":"944fd6bda5b6c9ab072cf67d4d9ab9a4a806f94e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2395-beta.tgz","fileCount":605,"unpackedSize":7519621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTTduCRA9TVsSAnZWagAAP+gP/RzMtXzX/Gt1fXg2muva\nO1XeZ6vP4WjT0mUsLo2XaRfHMh67aXF65JfbUvu7HSpUxk1Nm4JHPVz6YLG3\n89wEMT+hvxKwiIki3L/m1LZ/NrSoICjPDuXICRZXXZgMETwuARt/q5a3mir1\nAKjf8sBu+0sNoMri3PqircLyGN4/5mqVLNXVSfeEM81W2sqiFgvNbT+0Y31/\namHSBoVSA6tQsK5VH7Lhna+Rqeiw+qx+tz6XQ6YNcHn2bXjod1aM2ImgcHfZ\n3eMuifM9Hp4Cv4KhOnXL6r1QDxhCbFWKgO2Vo+TBSIYqt8FJEb788SurYW16\nrL6KpYVJUoRzM3rFppBmSemYbyxGJmU7O1XM+RK2HQHGGfWJ4BHcPIDBrtxf\n+Pq18YpmMZjL5xR3mZehrLqdYjSt911vJRLXxCEnfUCbeCHeQ9fLf/5nzyhJ\nBT4suaU2EH6ep+NO6b0OkvwErdOnizNhwym0N55W7Ov9BzdNUhis2AySjBxd\nUZL8cmE5GkDi7bCWzmFsj4Mq5dJQpIEBmgSkfNyn7OlEGfXZkxmEyLsNJQep\ngnEF6WLMymF34KiSpdzsx+vtVZeb+GJ0o13+IuKO/JyRl8WOYNhxirLIlaTs\nVC1Uls4om2L/LB0q87vyY+Vce2WsaMta40JC09JC9uMhhQrL6WJp7FHhRl4R\n/0xh\r\n=J7eF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHldywUCc6XD2cXEb7842BBVVZzTk19sMMKeOkG8GtQwAiEA1vTZkYxF+5+qWdBtlQeRKxEdlRlzekNvbPiEwyQI3Zk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2395-beta_1531787118260_0.9403037820145108"},"_hasShrinkwrap":false},"5.1.2398-beta":{"name":"meetup-web-components","version":"5.1.2398-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"b1f359fe94e4ba8bbfd618a0d17a3cdee1f6f7da","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2398-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7aghyOo+9j5IWom5VJYoA1/aw5vyJ2bFmwBCQUw/V5v1/2v+8TZ9SDmFRkIXufwakIH+lYlQSF5m6QPkAB3h+A==","shasum":"7d5d0cd202c319457b3d8f4e7fcdc74bd8bbba92","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2398-beta.tgz","fileCount":604,"unpackedSize":7513869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTmWhCRA9TVsSAnZWagAAntwP/30dTPLy59uIEzkdvqdJ\nK8INhlUdUGtDDOqVJfFpo1XQX43xBNPoUTQ/Z6SiSDHqBGbci2YNTppul/2w\nNQzkwNNiTGoQOprtAAOPCtPEfmTKAJJCQ1pSperwBD2am95yyRxaKaSLiUgm\nJ3HtHytJO6rjTybWTK9J0feNadCYOIz7eLqI+xIONYmdbt6HBd/DXdeNBCyW\ntbF04MNgRBObkbP86PVkcaTwWRwaGU5L79y/qEkhHH8E1EvQM/2/LHJpdgSl\nj07L/A5xdI7u56BgcXXoZseDnEMrGYWt0sx8NCoa7WT3aYgtxMrrPDX5s8kS\nubSzPONwiTGvncOSpghobcIOM8Ka5OGSMcdD/GGmMsDJKTIWcf4UTPytBsn+\nPQ7fFQjlHfxm74j363WmGOetgAulsZgXlQ5Q/kNsiuhFnacEumI4nWeO+q3G\nSjAmy6JQxvhFUbJEXozHewasP9RBGLPs2a9ffLEEEowK3pvSZAT5skbk7yXe\n0aFjRKl7n0phV5MSETzAFNaQXNBqkg3JotEI5jtm0wpgp9o2H1Og2uExW4gi\nhmG4jqpug+hdISNIRkEOJpgy9pGVlxBYac4cWaeuUq8ttGszAU6QQBpyymes\nhCs2dIAJawOfi3DwMHbdWJh75MxX6FzaX51HDXF7z448FPmkk0qRKU49yJp/\npGOt\r\n=cIsT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFUyuhyMOXkP6oFlZO6QOHIIOtotksLiIxbHXYGivezoAiB1/ieTOhHT3/u/R7ecQEkqYZM0dqIyq7XhPVRyLgw0aQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2398-beta_1531864480931_0.9833681827063512"},"_hasShrinkwrap":false},"5.0.2401-beta":{"name":"meetup-web-components","version":"5.0.2401-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c9f53d0a888ef7178b0081e962f1765f9dddb01f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2401-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DMOEwR2GVOeQgHVJMmxL7RbMq9kv7xWjZsXHliJ9hqBUfx06NFNTh+GarGO1EtsBNexWr7u13TOyQrkuqXfrag==","shasum":"a1dac20ca0873dc9420676a34bd3c3211a7b9f8c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2401-beta.tgz","fileCount":599,"unpackedSize":7724555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT1WDCRA9TVsSAnZWagAApAcP/29C+DE6CKe2PHfKuzd7\nPdyU8Ow3XEFN7qumqB2xqBIPJmbSxPY/SRV6U+CDbDCiltAocrZhFzeJ76fu\nW3+FrJP7NIDbNvIcHrY+IC/bI5qGCdQUC8jePD7pR0RknA8lqU/Rj6qfJqL/\n6cAWX7bVRGaSDO76ClGCSvAPtEbOB72jQ1CrDl7KgYhr/XCTm65bLzb+iCWM\nbSIObnEbZbSkkjAZFE6d+G4wG12/abojmM2h1oAAgILWgBTzoWV6KnhJJoeb\nwuQV+dgV1q5J55tHWJicyZTHWeAYZwvJPhwaoZOFPkz349Rhr9qoNTkmBFNx\noe84n0wBzyf6aisxUl7+pG/XF8e8pcqDBxGoEIke63csVXkhUhdfBQzr3u9R\n0Bt9MfxrI3ggp+NWe+Y8usH33G7+fi5ugwrI0thX8WW7Zw8epAfYDHRKA3ZS\n3LdIaye7GavQiI4BJpn63Wa0TGPty8FnTMwT6DYj52AKWn+V63RhRqA9GfyX\ncCLob4FN7TlwC8Ob4v5aucVIm2TCMnnyMAFhrfBiMrFRUvdYSXzuozceJnbd\nhp/f+/TNuky/xIrv4h03YJQZZOHj5zxmnfKdZjR2KHGOcKRLn66RmbwRiLmM\nGAlmkLR278iju8QeFdTEBW3xumeQKuRCaTLQad0bjBmuDWaK/h0hS7oLC9bs\nMgci\r\n=YTj3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBq9jT6s5tUGkiW1nYqa6VV9F8/1gpubjTgtXEjjyy4bAiEAzXwO95GXznxuknqIvgyr33eKwFUhhQ2ICGMBO9Qrjsc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2401-beta_1531925890555_0.3888528539292606"},"_hasShrinkwrap":false},"5.0.2402-beta":{"name":"meetup-web-components","version":"5.0.2402-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2f6df1510c3c8fd8c00d7cec5abd362e96c68d18","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2402-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6FIOUurYqpRsjz6KjZ2EORUOQ3MygRUJrtuj+2ifuOrMPPWYVxdX4d/g2/bk/TBxxx0GvbgesNPfwFTRRHyXbA==","shasum":"e48dae2885d80152d0e1ad53fc8e6a847e765299","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2402-beta.tgz","fileCount":599,"unpackedSize":7724523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT1XxCRA9TVsSAnZWagAAKeUP+QBTk6Cyw8QhwZ12MrlR\nfjowAMwIEPSM9UAdQcuu3rSyjqK7KBaLPC5OLhpSZzNvlvCpTl026UzXx5TY\nUUP79SIDl2BlmQqOLdc1Gc1CJf6jzFWSuwtEbCdlgg+pZfbuVEAlT9QcdpTr\nny5iOhbIPL6C3lMkuLLHahP64BwOPGWsvvuymg+qe88awnPd3e4NCuBTJSFq\nsNSDogqI1V6nrCJ83a7RXChOjzTs4Tllz8atomhdvap7YGDDkXLASZqQo8AA\nsEmsEOxeo6LNw/D5MkWERctiaLmUwTqkcgyA0yLjNWYamgihN/rkp6KAd6er\nVr4SyIjuNKPhAcFzVL6N15pP2UTSefaUkRypCF4GIXzw7HFQ2E3gxDErWicP\nKr38O+fR9nbmb+L81hKWTqR1U8sPZAw/zh85DN4oybLs7y478sZB4lHbXvXS\naHdppreda6u93fsEtGoy9IV2IWUO1pV96A+dL7CMBOv1NtxlDkaRhWpUMO2H\nsGQS0SyHBD4mjCM1gJLH833t0sXX9aX4W6HC/kX/9ssqWMQKv8Ki7W8oUVy+\nMcMHyCa0YZOPwa+/Xc/Y21QEVJfjQtfb6etIJl9vNRL4PzapqiMl8wB/cGwo\nMKk5i8Q/i5dCa6IXuPAMb+9EPKspV0GZxcZypQNaK0km0nnkeE8NHSOd4bl2\nrjYR\r\n=CrX2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVeTAOLtjTvrCZKezl6e2Cde+/sqjdzEx9jlLtkVQr8QIhAPJh0xWhSFFqetuRsTvXOTCTHdfTWojPbmJcg/g0LjF8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2402-beta_1531925984928_0.9716969345649482"},"_hasShrinkwrap":false},"5.0.2404-beta":{"name":"meetup-web-components","version":"5.0.2404-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e7fab080e06d59da680eb0ff40b32a861e395f84","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2404-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Rdd9CTkOXm8y5J+CDOhSZhVfEZENuShzBHqbPDaXk686Ijz0zzCZpUA0S9Mxj4z4x6ywIRn1B6HiuZdS43IShg==","shasum":"c2f8cc130adf078cb024342728403da0a58aa0ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2404-beta.tgz","fileCount":599,"unpackedSize":7519206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT4tvCRA9TVsSAnZWagAA5YAP/3IT6A1W5C0kZsSy3jJ3\nUOivZcJBE1oSINdbA7+TKyefzTcW6qVnfS24QXbKUQiqfHSnk/KLDC6pgzh+\nDs8L+sF9ORKJGmxteukOGCvOnS6JJgUNe815cXlsP8Eb1pxzSPn+tVry6jXO\nt1E04sacWyXGQoLcMHbXy+r5AFCoATO4oz47snjulaKTjd2Tt3g3+SCF+GEi\nMxF+tWTBsv48RbWr9XENhAC+lM7oK2gMPFE4YtmjDKbDA0JTy4ikwI0oEhoF\nRxsl+FKw5lGnMzoMHJ+KqsVvQ50ZPrqDLd7zZ1vkGxuZ2HzTOa8nAuG+Lgpd\n/W7WpdN8FrwXEui+hxNJzoDszGnqdEjR3yXADFmiFV4nVexrlf/y+TPCk8Em\nCqGSWsT7RPrLEYmhHchVjP4tauJ2Ujz4lytDGGG7u0cikoeWzZyPQvN8qXO6\ndF3wr76IUi72DZTjtkrA7v7RII5QxvhnnKoaqOqNpQGl/Td2D3W24w+7nAa1\nICUgYp/CcwyKouNe0/ADuCO/5cu1PZQ48/Th1DDsWeKW3JllXUJBrQYQWP7D\nzoegJeZHWLSY5SmmO9JhujKPoSFqdaEcO1CZCyRuVw5aC2Pc/lA+CBQe6/Qi\nQ//XR6ld0oIczxBW7VEeoqsES6urSy30J/gF6pLIO/+u1cEFcTpfh3V0Pbmc\nrhGu\r\n=q0SQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEvPDMBtwJWTUIXcHeYSQasyPNjAG8ZATpndj/hF0rEoAiAyipUD8C6vCMsPPtcECvyvviEyF4eU999ciWtu3kmG7w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2404-beta_1531939695196_0.5053597673307033"},"_hasShrinkwrap":false},"5.0.2405-beta":{"name":"meetup-web-components","version":"5.0.2405-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"773b407ddd22bf46371d6abedd7d98e9f14195ca","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2405-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vrngf8GwyBxvoHV9oHz+jTejOcK61S3Yvgj1lc7yKe1Y85Ehyww0Qa+Xv23vQrMPxdHXZcChmXutvuqAZuzYaw==","shasum":"302ed96a306646d20dd4472cfa74c502c85ce684","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2405-beta.tgz","fileCount":599,"unpackedSize":7519217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT48UCRA9TVsSAnZWagAA0qAQAJLctuZHB84kwKxmJGrG\n3VQql1Cjohpj8HJtz9SATY8+QhnfeB96mJLcIsbNp5IAvzoAQe1/dhGkqptD\nbqJjTapkHyIFWV5UJWPIQXiHExlbKTNR+jPYWRqDC+tJTcI/IjzltvsUbdn5\n+FiRaQkis5FXTtY2+aR8kNBdlgihjH2DBiOOk5Y+3leIlah5r1w9LHQnGL3s\nqAPrRItzzYQOCMkAgf8FhjVZyEVetXiHqXTcHP+ji5UEk+T6m3XMBJLK0omO\nXZOh1ev5PPtCfB2NSaXEtjlgHgwbddiDOU7HP0g+9rthBFNrfkqt+ZteTR1i\ndKdrzbilyAbcMk0U5dZ5kSYHJMPBdPJC9aN1mWl/s2XNSDyKsOesdnP+cMzn\nhj/fuiB0gTN90nPChsYQn3mMwq+OEXgkC4MqByvbeSysdX1QWYYzIkNQ4KGf\nyZBskb/tw7Dfi/ffKSfOCpvCGnJVQNVNy9TL2f7IqRg4mutJkyuTfO4uXN0m\nrsNlT+nxr9NKOnFu1ANA7lIBhqOOqk7aWj1fjcbhT6g0gT4OrCeoQvNpO7vr\npdWkYXY5ADKq1Ssz99g0QFw/9uM4di7S9Ly/H6TC/g24M5yL8j7TPbmuaa/E\nbd88SweuSfGzUHrAAeqEZ8C8pi2kDvkF9baJ4OXrNXzhBlnuB59hhke0io4c\niWqu\r\n=zKEU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlsozcbRx+hAxVuIrwmcHBtq+q38J8XR964ZUMaUhnzgIgXfOjSM4arV/IJFqbRY4p4tqtRy7PCsQgJNH87OhtXrw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2405-beta_1531940619747_0.6514388513298335"},"_hasShrinkwrap":false},"5.0.2406-beta":{"name":"meetup-web-components","version":"5.0.2406-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"567284de6259a811fb9711d50d450955a44f83ff","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2406-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cfWnE0VPRIzgCqFNw+s9g+4usj5sRHxXiwbtO0dgV2xkPqInryCq0OTVLF2DbJUs5ewwBtNYEHRrAAPaBKtxcQ==","shasum":"958a9ba9442149ae0a31dd65ce03a889ede6105c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2406-beta.tgz","fileCount":599,"unpackedSize":7521039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT51uCRA9TVsSAnZWagAA7QMP/0C+e12KS/FdmhhMIjmw\n91LkW0OKfjhY8hdTHo1FGreSkH71JfnJMy288jx1+nHDlrm+fzQmNBfuTbv6\n07oYNu/817ioKD2gDt0zQ/W+cveCHn8pqlIbszYeQ0QyJuU/lg6jF85NnPsQ\npkA5TfBexG6OUyPcHEHX1EI3chf1UdlfgCGZgYLrZbjaFPk6y37sTeVL1SGA\nDhUOjrjgmoKDAZ20Ugkob0faxY774yHBLWrKnpS8SP7eZex587FASwga8yGL\nKWIrCYN6MLaTxf9CxKp052UVaa7I4ZnvoVzYpWOSQwN7zYTbvqV2BZ6N/fKy\n6t7DyIjGYhxsbqoxBC1ePsuPbRY4XR0gQWdkpNyXWX84ST2mx0J4dEKpUjs/\nJGoB5qkjLkmrAwPtOMEwXZx51fOx0TgZrBC8Y5CU/T97uZUloZnMe3HKwKHO\nQ7t9KI0eyGf2Pk7O5oiLhaxvLokfuTBHal2Ls1fnCldaMDtYH30adl/rBX/R\nCMSj4QJfBqW1nYt77eTCaGS3uboz56lsyXha+0hc1s6Be44klGt9tFT+XS8d\nZ+m3rBONmkh2DcSayJR+LsRy0C1GkZCjoPVgIuKv+zzYBcYDctiWlzn9KTcR\nvcxfBtj9gS1VSK4geLcw2LBhdyeKO1LKMJnTdalFB/c80AyBTc87grE5y2BE\nmQ/7\r\n=fyHH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+vMWwiaPRrlDuMVY9mhxUtffLWPjgViBhhQ34BlJ2yQIhAKdCjrWjBjcqXuAbxzgCl6svYommaVUFLejVHPg2cYKV"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2406-beta_1531944292225_0.2221173399254266"},"_hasShrinkwrap":false},"5.0.2407-beta":{"name":"meetup-web-components","version":"5.0.2407-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"550cfb25a9ceb205ddb9e0477be046ada5c242a0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2407-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-SZCN9C7an5g8hPJGDcAXheS3SWZxs8dJv8V7PzfPc3Vhr9cWi3GSsjl8ag6KHgUJFgDrS8pBRwp6kWS6z5R48A==","shasum":"496745923656b73032e4bed0e78302392eea2fc3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2407-beta.tgz","fileCount":599,"unpackedSize":7521262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT55OCRA9TVsSAnZWagAAVYsP/3+7uVmNdi7V59M9+v52\nk5YZmhLYfNm3YlfllJCMyc+TBWcXKbsgfyPf/P6nlsIkwDvYMGWcdI4fHG+L\nVuA8rtCRFFnrkXQHNi0vX8Fx+kgXTRYA13vHM9mrsvWCmTIUw1GvdwyPdcPX\noY02l39fjGCiePGiSDFGYe+6XZ+U4atw+P3+ApFzgNtmQgKPKPqgRzWYxzQL\nq+F8O9157liBIGpDkP/ZR9mRIPKzXmtracbl2YYbkI7oaZYNnfw3hjfFW856\ndV8IskGIAGHhCovCbNqUqHjTwHwA6n9jwuH+HJkpEASHZu+qXqK8WP+7TRK6\nUm3dADCu43G/xAtaUAUkYCsew5kVYahELzxGM8xEqOx+0Vtvmh1eDo+pOQsk\nUPkmWQQGNcjX2UZMHBia7KqDWBHJ/diUmXZQrwTJ3bKSja2c5iIcpiLaaNas\nHibwwKJlMwFPlgDEeSDKVaOB79Zd759VYxSzfXb7iMKeQKPdQb9oPEKzwQY4\nQ6BhjoeGzQ+sbwENxkM9VFsdK+V/qMdZLGyDFba+BhUHPLj0N0Yda2uSNhCb\n+Ks3d62zX9wR0wOVLhdq+HdkkfY9VZAnPIWLcRuyclSMyNqzEJovG0tKPIcY\n+ASLWhqAozImqD7AtnkYrMDdLyUY3QIZ+GBmItWHT5nykCWD1PN8TANjAaRq\n7cnj\r\n=w/7H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqvtTRRpk62fO8Eq8vg+ZVSvXKudYDNKupkTM5xEVsKQIgMrFVIkgN2lJ21OVMm+5gJqks79b0/VkIEg1HNG1YUVc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2407-beta_1531944517669_0.1016649808293617"},"_hasShrinkwrap":false},"5.0.2408-beta":{"name":"meetup-web-components","version":"5.0.2408-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"82998d16e281f33b173382d1cf8d89f6dfca615a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2408-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xzHleJBDzlmfeX3K/WLXubGg5QKA+78k3LYUxTjFyXUY8FKtVoLxtq4FFF06BDgxtamkUxeYhuL8kfEnfRHwMA==","shasum":"97aaa8e7dfe10d1d72c9219a25fe0a5c70994e3e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2408-beta.tgz","fileCount":599,"unpackedSize":7521540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT6YVCRA9TVsSAnZWagAA0c4P/iktH65KSlzq6rj1hXqc\n6ZtQURe16+Kz0ho04ralRL2RkulcAi42BAmEbc4tvKlUQQuyxVIt5KPkrChJ\nXq2dg5DKuw86sbcbFjYcy49ec5SjNxete/nD94wCydKdqBEUrYiCpjhO+ydE\ncmghFFXe7pAyeiVQgVyIZXnF8R0ovxamdBHQLdGeIR6vPu7PTi/Q6zb21sL0\nAYSPeDHkJJhBa+dTf54v50zPgrvxmbqdLq5/FQQw+bFFKxwz6GBK6672xU1/\n80rIb/qEOa0bA1inhp2BrBn+w8kCyJzTbFxSHTezmGh/+texfle3RPx9rAnV\nWLms28LoYIeeQWyoc73xR0F0yIynCTrYmARZ/ovw+2nkGkze2FNdwyIG4kEY\n4rpZRak4cTM8ikpXWtDhU1ZxlqhlpkigAPIc4XgBySiTrm07zSobcofha+/B\nPbi4myHF7ldeYZLhlwre6A+IqX/xxfBmNvXv1bK/swP9peOJl7X2tugj5jzT\nCjfpc722la26WRwms996BqXcS5ppBlguV97+ex6HW24ixfo6PuGOhh0BTo31\nFP9iYIv3v6+qEtpAjhZk6FCE8XXbItwIlp0cXMEFrXLOM87dglQx+CR0dH+X\npSObO54BCEvpLlqDJdbdrE5farTmcY/+o8fZIuzzZDG0GDmJ8uLg/zG0xHBo\nXAes\r\n=yqp1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmRIL462++UrhtRVeHDUCzKwByGIJe9LRWAcmPg2yWfwIhAL9TaXkHVLTyYx2y9L8+JwaZ91X8kVvvFLC2RbhvdvPy"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2408-beta_1531946516882_0.6132434155647206"},"_hasShrinkwrap":false},"5.0.2409-beta":{"name":"meetup-web-components","version":"5.0.2409-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c29c49ee192220f80270fda6f780cd56ee1fa04a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2409-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lAgqtpurbM+Y5e8gHDDHlOmALk6J3pSRi4U07E3+hUUHBS5oqDrYMDnAvwY+rEFGz9sBKRw7kPUQuwGWc+S36w==","shasum":"b0aa03c82aaf0f260d30051c9637c72dd6deb610","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2409-beta.tgz","fileCount":599,"unpackedSize":7521540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT6YxCRA9TVsSAnZWagAAjNQP/2A+uNy1vtIRx6jTrer+\nTOFI1sJ5f7tqT/zPtS4w2nOrG0ZnHe+MfxIt/n86Fi+tcTBydMEF5HOv3vK9\nUIjeLJDHyt20T2fjTw6qkQDQBtNfAsGsiWg+9ypd7Rbk3Ut7Nc3TIgl0KkEA\nyHURKk+d30ZgM5k+tf30APfBOttnplK/yiZ6ezSa8KKrxXe8xD77+AQnT+ft\nvW5Ex7TK1tNUAGEb6QBLS2CERZRjHnx14Puj1D4jFu8/P38/O/KFUlAXV4vK\nYVcdJF7ejGQVQ3hr9kl2tDo/p2VHrYhFbBO55GV1xMxK5Rey9iUXUU9XQ+Nc\nODpAnToFwmVodGW0ELT6lhlAhMLAVVjKEuWTZ71J2duDsZbGiUQmXc/KNMVX\n2E4ZpA+7ELiTeCw/1T2hJSUgr08W/BDURkhhXQe1fw/pSQ++QCxrrTd+7KLW\nxv187lPfpMdocB3o/Xu0ooyPS8oLOK/iwE40Cf08O1qWHdvj0IqwDt7+qnzm\n2T88fsuhL9jpK8j1Ras5kq4qlTn7Jvapx9PsfE8hfHMepEN/zI9ZjA3ncGmq\nZ6i1QltNSTyrSRrW7XsWtWuSllWWMUs1wjy38WUMRVe1745K+qCE6H99Upqf\nhjqhR3ElETELubwcWRBDx7bhSmg0e13HdYAS7vT1rlS2GtB0X1LQFtdKiOYc\n7C53\r\n=7t41\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOReCqsAS6nDaUVFWR7BAKfXUYaRcuHLuF7rTuqxIPigIhAJIMmaxGSnO0FuqfKBHVGzdoULwzg5FGQ7gxI5YCBdlt"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2409-beta_1531946545754_0.5676724345742017"},"_hasShrinkwrap":false},"5.0.2410-beta":{"name":"meetup-web-components","version":"5.0.2410-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a4adfc90505389465e5adc2d7e12d3e154f7a12b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2410-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6wlI6LfTRoZMKQNegMjTegN+zlu0m+rf5YdbUmpfGsS90apbcgyj0IJS5w4vkgJLWQ7B7saPoyCaAYgdW0y0oQ==","shasum":"edb6ad36f95eb22f4f16c6179365aa866828e8cc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2410-beta.tgz","fileCount":599,"unpackedSize":7521951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT6eFCRA9TVsSAnZWagAAYToP/ipONR4pRzEp7aD9GcKN\nDkkbO311WteEdO0QZV4m2dH/6pvKFE63uNJHjfO+H1qEZLEiuXcNvZPROx8r\npjvSHxnj0dhm13j4cnZ5l+mDqaBG9pv7r2QGS5rhsIXgIfPr44d+1EBL817D\nsW2HMxz15dNz5rvCPKRR2+6D04w369czPlCf2qSdUODcRPxLU+i3yaCKELvC\nJGiuaPGKfEm5cKkARO+XstOP2z3sgPcFLFeT14JDJmqw89S84sEi1dlu3+Sb\n83YIHnCmvpvnCayoEFVT/rVDjTscGkD5Zh+M3e2ACQrp7iBEHZ4LeLMHLD9F\ncv3M2Ce7M+n4zRyKSi5KP07eH2rWqSAecxG9qKcxa5tIzboZXN3cIu3V/LYY\nXanJqZsiO4phOTCyN2hJwNKV7U8KqGuPJPP+Q4uzzV7ghpp37INPOABusZHe\nRZwmlaPcYxdr0ftfvRHV7hJQLOaJexMz7O4X7xdEWfuX3D1SZZe/oIRL/adY\n3cc1gXpzEJJypbWZNrY+wIoiSCc94yG1uXlUhrOcTQk9DK6YAACqavvE2Kko\nCJYEr9HLr9seMdDk9qsgF1CTl3gXoL1yr+L4gRpaN6fp2G8NoFXV7Exl9f9n\nG6cbwvx+s+vIzeP8isQfAM6GfWqtyfsQo1gLSQG9i48jo741JAZGyi13pxpz\n4F2w\r\n=N1z7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC32YImZ/U6D56sfpZLGLPVnyOhGBayGPfJk7+i2CPBsAiB60qf28taCoM/lkyTKHMSF7Dcw5jS7i2nxu6/MPStHOA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2410-beta_1531946885507_0.6768734683067057"},"_hasShrinkwrap":false},"5.0.2411-beta":{"name":"meetup-web-components","version":"5.0.2411-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"afae9c49a8ae595d3fa42992c0217f980d49c3d8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2411-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jzg2eChS4hA6D9J9mlB9rUvV6pQd77ugUA0zqeuF7Go6jNSR2DOsZPH2bVU6oyfsJJ0Tgj1CP1IEBEmuFvgeKA==","shasum":"62ab8cee31ca7982176c10db12b2eb600a30b403","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2411-beta.tgz","fileCount":599,"unpackedSize":7522828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT6r0CRA9TVsSAnZWagAAk6kQAJzclOkQkn9ofrQe+e8F\nkMd1mXfDR4xNO2D5S+5gC3eNrncMX/CoO4HqNiIs05SdmWe2eOUYeO8hcW6f\nJAvpA7wj0bX+iVqXkUk3KFs4pQP2QE5dayR5xW0EN7EhL6qEiTsOawUY5b6i\nuQDGn61vl8P/Diy6oFMhUfbqUUNCvfmLfzxRDZB7mCQdW8wAaJOiTNMS+PIE\nGjXbHxx0CASG1JilkovfCZOy15qKxtZZlTGfp10kAJvTOCz9tvVpBrz+L03x\nTO51OGOPlfz5hw5j6ZDAvXkucBMqvqSLflC9flUxJwLu2Q+Dlv1SFEJroFvy\nmKmnx8i9L+gE9uHPjyjt/JL6TI5iA9RofJffyLqCeXEVZSDNDdaH7lpmwBly\nbxaIUfeRmTvn5upRkGtR3K/FVl42Mi62qdNgLz3QjpM8LH7cDodxdsvE6508\nRAkhq0THRfLBdNFd2OvfDFczVjoyY4116QGOsPOa8s/TFxBrROS6gGpkgT4D\nVviNB1u8GlgUhLbwNuVEB+6/SsYggU/92TlDLz357q3ip/x/pILT+WhW/ajL\neac8txsbSFHUj7fp2HdIA1SU2yS06eNcOgw3j/PbhNQ6WkXftipKHLWYnBhR\nk6z3o75QqOJUMny4/o0ObRqCYJsAiMCkoAElakezQhaVSL/POHNBAcA94qVj\ngy3o\r\n=OMqB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCc7FNB25j+Xe4f8mBu2/jnLBxaNUTkFoMCLJYg8tBEIAIgAM3ZfMWN5qRgZ+00ucPUuOBbepBaUOfT1h/EsCq1fdY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2411-beta_1531947764544_0.3297333460774492"},"_hasShrinkwrap":false},"5.0.2412-beta":{"name":"meetup-web-components","version":"5.0.2412-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6b56b2d806c1d2b25d8e404d1a9dbe32a2935a15","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2412-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kuJ6HKaafx/AqEZK/WvMUvAyxTbhNovRfmP35SelljQKgNoJ+KnKhyb6MwZvNollfzOfDAOddYTDp36IfQZCQg==","shasum":"c3384b6945ea4662cddf45dd65d596ca4cde301b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2412-beta.tgz","fileCount":599,"unpackedSize":7523063,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT7PRCRA9TVsSAnZWagAAi6kP/jw1/nxThB8wLG/gureA\nd0ghMJDZ7SiD9HUwYjioOghn2BoI0xjduxZwCUMUS3cShXuhfINIwvIyQM02\ny6w+5NE+En0JcNOf+q1HiQEqW2tCO/efFfOCarImNIYKTLSGPXcShTUY7EvL\n9i9f7lcAVgcoTzYa4bAzm95soSQpwVx4AvSwUX8nfpRtw3rcnJgW6PN7OdLd\n3UBiNUuNmWHV2G00fsQBp8BxiSXoXgYFXZWjk9V1NzpUFDzFysDbIOk8n6j6\nLGIO/Ft5tWoo/JSB0x7g5p+a98ZYQwpkvg0N6FjpT54rV75FVXL/u7XOBqIH\nkCHNkzkKwa61WMelVdyAW5hYc+j2pjhftDU3i2e9XlEj36Tg9n7mycJaJq91\nzRzgqge64V6mzxuGC4XgetxVC/E8/lv2XUNkVUYhtEIuNlGqYY+yV/Qtwaf1\ndCIz+QcWOL8dryV5/5b7eSq1NeP/LtpeRc+4YcYNvCyhokiZzNVN7VI0I6s8\nAc6PNR6U4J98tl52sElmE4ss/KAbzVk1KAaSdaMjPCLctxVvdGHKffQMcwCA\n3ZUNXH+aHhqhV/HJ2e3IoDtNafzqoMVfgByl9wz6+KW9sDJ2rtsaIy83dlFh\nph2gCOVI1QSnGnFPO5uWUJLuR+cjfn7DU1bw93mIyeBPVw3oxKuAJzoXTiXg\nya8k\r\n=fORj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCjMP/d+uAxMD2HSYCVUStwyeZx5a624i/81DMh+XHJAiAY7ElaFCdnLqrCqQoy64k/x/b74ER+UBGiyRq9Liu+6w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2412-beta_1531950033454_0.3226103493387651"},"_hasShrinkwrap":false},"5.0.2414-beta":{"name":"meetup-web-components","version":"5.0.2414-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-preset-env":"1.6.0","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.1.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.126-beta","swarm-icons":"^3.4","swarm-sasstools":"5.0.413-beta","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"386fef671db41d6e82c8d0dfe8a539695ae671b2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.0.2414-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kmY2Iaqd8IsfF502thTv4TGMpBE3Yi5Miy5iJpkExC9R6n29+uQjWE0Cb5Dn9iB/w9nlRcGb2ILa8G9BXAGM6A==","shasum":"ed85a2ee0c0d190206ac080fee406e53fb17f285","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.0.2414-beta.tgz","fileCount":599,"unpackedSize":7517706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT7ZICRA9TVsSAnZWagAA5E0P/1zFWuUAz2IskpVxW546\nz+QQaocsT28uF/a5kswC8Vd3pOfghPxMXY3NC/QUIUz7b005vP5ucKJEVtY9\n2QQIBgtJmz3UWh073z1h3C/MdzOUr20CixhIxUWG9fVfFTl5yAeLDvCIVyy3\nMD3GFaGFnlCeczIxnN8H6X0utFIouj3RwpSj4D/hEUkrI/sx+/Z4YUHHAY2E\n/P4ZfdS17TwWS2NpyMq8bAe9LaT1SU4oHhv8NcEyyNof6W3UDVo6MWgyyqEK\nnznlKkDUgR9axdjLurlWxAF9ZF4zPQJkFzOrtGoFN7vCu/0cPVZ0QzL+xrwf\n/gWyW2UouoTpqOboRfZ/WxKdVBowdJ7QAs+IxCmYnhCN1p9QmGmuZ+dwzCLg\ng8N+Vyep19Y9VzQaCDkCbqIp7LJ+pAf8sP0G7bhD/rOWOgkKQz1gbsUWD8qn\nVE0jKfyG0GFIE48GxEVYoIt2Oc6qM9t/v8XbF33RwQUyVV43Zzw1bzJEY3Bg\npMZxxfsPjZQVhS+ZsKju0LDVH6/VZxIDiibLRPyjzIAdqp/m1dvNuQcRyUZA\n28mi2nsJSDq2WiLmRW0ctiPCmwrZNTLdMKEXQ9hip5QAWUnmE2KmCcX2YGjS\najMhq4V55LmH8fLBUnVhjAzQ4FVbAdgAtAeFJMOLhuT+5Qn6WMbI8shIza1W\ns6tj\r\n=OWCN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICA1r/XCymhMW2QCKM7oYl+gOwVt8DOxGOZm0xw8V6PQAiBAKclL1Gx0PvaUSLXjoFjh3g56WGFXQ5+PpftOBKVm2Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.0.2414-beta_1531950664186_0.12061860424469928"},"_hasShrinkwrap":false},"5.1.2416-beta":{"name":"meetup-web-components","version":"5.1.2416-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"3579d3bc5fdab4004919420e329db7ab8908afae","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2416-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-B7Qigim3FzN9PlHKOrGu5Gt+54eB8gBSitKAZPj/hsSWr/WD45aqYD37FW66TB8Y+Vg51IqTkya7HQNbfY4X5w==","shasum":"3b2fdd8402d210269a69a709dc05af08bdf0ceb1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2416-beta.tgz","fileCount":604,"unpackedSize":7513919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT86kCRA9TVsSAnZWagAAeokP+QGoxEZDdA5rsHCIsAYI\nMZDj1XP8hs3vm7/KCpQpIft3LXA492GWLQSA/tsO30VHUOOJHLTcpQO4Uhqd\ngQ03FrmnG0gW8WOMRkUQ5MvUAJZpUT0JqmajQ7wU27Q7IiYBqYZZ1dwkTXEW\nBqD/mEZRp08sPbTACxQ4hW3nX6WxnsDQIiPWJIk2Ou1pMVdBxlA4faPt5d7+\nVo2VzbzCgY+CjA/GiiESIJnlv1cbr2NFIw954QDiYbhIiwJWll9OILe2mCNI\nK7x2ZPoXtNyCMtAULphj2mZJ1dR55t1VGGYsVG3N2/o1Red4G/A8MmAtcCnS\ne26N05f0hHuh5qb2p+Q4jVgqLucMeSAoTZVXAb5+iexUFj7Rgkt4bJTywqHb\nF7VbJLzJh+Bi/wBN8IUJ+ZAcOrhhdr4uatpegB1aqzhZb9iyApq5XZgK+UCZ\nXDMav1JKh+PcpNZ/oUEakt9xWK1gN4IZOxmSWu6d6UJ+jX3kFQkvSWa1WuEJ\n4EKu2VhOCm6dK9IBf6Lox81pk1LOsIIKcumnXdxY052On3osU3gWA5BHyF52\n+EivilPg4d4aWNfSoqXWSj+cRsr/Jw0XkYbAjiZZYM0Q5FMqXCNRyfhKTtQ3\n8oGD8fFCwp1qhrXjPqZXhEZa8/8+OyD9IwrN2Q4aaxQiDpcwjPNk3XBfZ1Z+\nc4OU\r\n=JTxj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGGRIFNwW+qWQqYas11lMvqFDx9FP7QwEsLGFz9ZHj+1AiBLOWV4vs9vP5bOQyXIoPdSvMgCKfc/qg5npqFtnA7EAQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2416-beta_1531956900273_0.961956035691715"},"_hasShrinkwrap":false},"5.1.2417":{"name":"meetup-web-components","version":"5.1.2417","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"862f68ea705c4f91a0e4444573403536a6849880","_id":"meetup-web-components@5.1.2417","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-f35KI3bl/eUjGUeSj00W69mmFW6zod7flR7+LqI0O0zCTHiKntfjn4+CMW3XnuIuHyNj7RyLOvNi9Zt8/NgbeQ==","shasum":"a2402d9d1ba3fcb7c2c19858b2b794976121b8c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2417.tgz","fileCount":604,"unpackedSize":7513914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT8+eCRA9TVsSAnZWagAA0TwP/jo7yAxWm58brK2V3eUf\ngVgBqFGj0tOCoMjFgMCegfgL73OCGKWo0sj1Ce2bWhThsXAKOSMp7a4e3mfT\nKUZEdVg+AVcANpVhxgn9uy3aogcHXT/5Zpl8bNjo9TuHM1euZV1QfL74dUQJ\nVKB5WgKMwZO1BUxtJCQn7I4bAF+L05XzY9mr5eoY41EVgZpKec/pQ0JkT6iV\nQhWtoOtdc9uTmFlgZ9Hnr9F6UKJLH0RLt0r514OshPpnmkkacrcHpdOlWM+Z\nzV/7EndKfaKcJITFwnBmnPFs5sK5iFw8O4/9ixH4ZSufscQzXCB6CMNxHXrZ\nIW2KJofJL4psoSQqtv7E+ERnJEmfHvdrv/OLkPNe8iwa1w48cG67qTyy4TY5\n/lyB66WCNtqxf6JrW7pW1rSylsltLn9AYEZchcY7cbMe+F/h/wtdBY46RDdi\nVtmJLno464hlyZt2crx9w4ADbtcyxOktxAVRW7m1+pbNVVBFDxGCC0Y8jRWv\nMBvSXve/hZwQ+Cl88u+ewKoSyux2vNiI2ylGZdPNLJ9VK5V/4i9G5b0cfvcr\ntmNL98lrcIkxoi31YypOKpwaDv6FUmXOO3otmjjC5dQU2kF9GF/yEu7OSTec\n3MMXJaHj+P7L5vDeEJdtN/5SlHMjx+l18uqCsl8OyjhZTtrguzDn7ynyfepF\nUoit\r\n=B4XV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH7xPYh5q9j1WBaENvIJ1CR9OcNIX4fMSlUgjFtXJXjaAiEA9nVlzIyERmUxtzKA7PTv/7Ig8dJchgI9Ly03Q5amalY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2417_1531957150704_0.5337193749853977"},"_hasShrinkwrap":false},"5.2.2418-beta":{"name":"meetup-web-components","version":"5.2.2418-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"721d7ff74d665cc828d9dc2d72ad34e470592ec1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2418-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-toxCouL1hQ9q4Lpfym4bpyYqWoiWu2Eimtl9sOPAAlEx2RawwVYbQ1NRDueOpOgKKpfqJzwXMldKNE9052aYaQ==","shasum":"d45c1ce582e376a5d56e0baac871c08dec367299","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2418-beta.tgz","fileCount":615,"unpackedSize":7531232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT9TFCRA9TVsSAnZWagAA0AkP/iRC2M0fBrRP3m9VZvQK\nb6y1UHeJF16yzYpSkJhbIanSTbQkh1db+cxs3ngkAXBb7QRhz9GHqRgSm1jB\nP3Gz4Jr6PH7WKzJbcL80tVcQi55T6pr8j1hNnrA4G5uv56TrqcuABa0yvp+p\nVq0Ykd2VfYvUo8WMezGCljr31H/AwkBoCpoJGL6Bvn7VzrBycUp5O6Btu94R\npWl6wIyMnoD+pJTT9tLQAbiJ1f/RIHDrvNuaEGXPnqfMusY3y7jVr+rkqaeX\nMdp8LuHpxabP7V59I5tu1/2ALr2fVIkwODAhc+Q7ovFdxI98/HWUCzEt54vY\nYqa9ViaW7KWBBJ9jyQzXmZNut2juvRbRKckYKRx8rJB3RzmfQLt66dqoBI/3\n0EbeZy6n4eFi99KmP8QRgOhbikzWreKdcYuOad9nwHvlOF71WkCUR36lKM1H\nOfdVKy4T9bLA+uTovULBZCFDdPW1rYkahDrou7O8Dsi/VcIsCTy1x5FAMl8a\nMlwbNGvUy713J7AmffUObGKcLkmh6LchCvOr8ramu0g0EsY5mDekv2MnnYzJ\nKyhr1CVXT8VNu3I02xav/Ve9E6IQMx9Vq003Y1Jnf2dl5QAba4YSvtiG9MIM\n0yQbeQxUi0qQDRZ/XbDnCiHLZn7KlTEgm96ZtPAk5E1yE71awM+r7SAPu/Nt\ngKqr\r\n=KXgO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3/7Ls42NzT5vs6FGnNdf3xa3ij3leyBmr9vENpOhowAiAobRAneTjZNTWoxfwflKCnouSqVZsthlsWAQZz1m6+NQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2418-beta_1531958469187_0.9063792648617663"},"_hasShrinkwrap":false},"5.2.2419-beta":{"name":"meetup-web-components","version":"5.2.2419-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"b952cddfe80dd32c4d32f35ae4556a122bd6e0ca","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2419-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2MTdhPygLsC2dx4tFx6T5olWF21oX4T5XjIIK5cTDSYTf6YL5XSCN7+vJk4KxcyzpYSfrdnXC548P6NxVBsKHw==","shasum":"caca3df45a6a2a5e54c33ee63b1dab4f906b331e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2419-beta.tgz","fileCount":614,"unpackedSize":7522341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT9X0CRA9TVsSAnZWagAABgIP/iWU00PaX6y2+i8qocBz\nHz2LfpUlW4QZgZ9rri7SHG9o9BPHhYHAIqNYLO39bA5eN8gIOYHgyj+JtPEu\nwLlswRhKzxIVXH0tbKbsRUOGmyczInEWSJTZA8K86omz0KXsXLUjtdgwY8PT\novkI5/2g5bLLZbGExqtyxm1aFFKc+bD2Vm3/nb+/UhtYSqPErMVTqYEI9G8W\n9/q19FjZ5dH7s3g9jxYcksX5rvjsuN4NvWAPZNnRKTMnrzhXSETwhARoirz9\nF1iw+u+g3LvxYJ0ZORNjQp0NZjgVudCGr4ApQ36M88jlKjMmBmrdVW4kJseV\nI0zZjdcs91vdN4HqIVygYkeAmyVIRjt2n/c9bBOWk4FZ4f8xchbmq3srLlrK\njSIR7GBdiTjpXicTkwnOXwhmKIMcBvfvrC5pmm1KDX29etAaoyQBA9iZDztz\nqBVnm0c7a5WJ64PBSyLu61diXb2aFGN7TtW8uI67MVzNkJ/fSWOHytOBlhqc\nnacPhzNFonEDK3vpLU+JY6tnA6YrwHor83YYMdrdjWbTqftS9SydX0XmQNaU\n+zCsRdjOj4TU5JobpqEsNH6gDqgfh5SHFznu1HVuG475kRvea/FPh+wkOjrc\nmx5F36AtAqn7IXNDDdtO342c0yhAZOqkBQnRGBuRhksnJ+6U/62OzVxEQEUZ\nBiP8\r\n=g1xr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB3kkpRXows2OzUH0Oj8H73O6I9i+Pxd1mX7qvtBtZpYAiEAwL2cn/wxQooTUVhklTtGUOWzcpvVvn6E9+/DDOkdBRA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2419-beta_1531958772464_0.3110227105939112"},"_hasShrinkwrap":false},"5.1.2420-beta":{"name":"meetup-web-components","version":"5.1.2420-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.126-beta","swarm-icons":"^3.4","swarm-sasstools":"5.0.413-beta","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a12b96d0806af7ba5775d4fd3981b319f7d826e9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2420-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RJkrg9c1mJsMHsPBPV5/2/OkL2cWwTiWT6XrYM+zLZIWGPUcNAvOzZZzMb6sc9ntXLLFfE2vj7HBe8PbpUE/BQ==","shasum":"5f09c63517e17e2dd651a5984caf124eed01f377","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2420-beta.tgz","fileCount":604,"unpackedSize":7523284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUKu8CRA9TVsSAnZWagAALv4P/0UbJpqDiVWXrAfeP3bN\n/TEh31ZNcOH1z6yntu3+jy0uYjJbwIsvwRpC9SN3kgve4NSKV3AmUyiuPnto\n09yHYqrkA3Ol+tSoQR9/80X/BIRALwOFxSzLuUUe5Cwn2crko73PFqnQDxio\nXHy3GAHQrzPSLxCROc4qcVbY5S/HAp2WzuLExge5swoU0DzRtWvhDIt+J8ps\nDPOHmCj8dQDGp/wyUDoEyGLmPcixCZPC1xG1E842bahcoRtI7dx2/a27IGMu\nfntiNT1KYnE1s8kzKFFyXkLm36IdniULr3re8ehOsCvexvrdzBs9a6Dz4rvP\nfqTefsS3qUD5WTTudFProO3qur0ZRcyyQvB/ze1KTCW15z43eFx2s5fm5C61\n46iOdkBGBzrJr65SqqpXuGqNdwPrmw3biIkEKFThYuUME8e1F/r232EDMjmo\nxMASlF0wmbdaJxW1CEdMWFS5aUNlaBTjQ91Egg+RIdwD385irS4/uZEqm5Tp\ngFYuonaaLFrRPYefZv9JOvy/uqI4C3iQFw4fVrfEPOexfcXzveQGzL7I+AEZ\nQsPNxJ1iEGN+f+724r3m4nPiflbLdDoJZ1ER7Y4uLfB9lxcftA0YGfag/97e\n8wfyJNY5EEH1Wov3Jz2BQEfTDZVqU/H4gfkspmxnRTzx/MjvOrrWG6m3zZLH\nUwb2\r\n=Fsbd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvfogKudB3jyu060+osG+W4HH9wZxwneCWnqoIRXtgggIhAIUwGlMeBETKV9aF5tQhKk53t0cSb0Hn4/5B7HGgb5yb"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2420-beta_1532013492244_0.5496519872600856"},"_hasShrinkwrap":false},"5.1.2421-beta":{"name":"meetup-web-components","version":"5.1.2421-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"607d084447ff5436da3cfee5201f42ec76f4ca63","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2421-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-MMqrwiCNWmX1BXMuimxJu58kgqgsYAQn6YHEo9NcRUVGA4nJL2/Rb1/eDS6vfm7xEMDz8V+vUwrYeUn6CRuFAA==","shasum":"b34cef14d5646d2df725fe6eb3dd0b1c9ef36614","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2421-beta.tgz","fileCount":605,"unpackedSize":7731900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUM6CCRA9TVsSAnZWagAAIKMP/juQTmrSNzT9FhVv8QEo\nAyFlGKy6d7XocH8du3aM9I5losGuKMXgbnCTH+u3j8ENhWA8gWxzU8kxhrRU\nmKzWqYMTqE3dHMYCrzvzB7zUjgGHQ0GE68T6trjWoD3grlx7sZ0ECfr8nHIk\nteLEPz8YOlmOfGSdh1wLf3gyH7N3QLKwX+2+bgy63SxQxe4ppSKeMfoBqgmY\nePVTxKsoadQQh3rX1OkQJIByN/7clog69e5yyxVtLcHqgSLDZmz/vvxzvLr4\n2bu9u3iq7t1ThH6AbOfwH+yXEwlJgyFEdF70kPBbnVRpUx/IpCg9hh42iIvE\niINerMWUbQKncGMgs1DLl6xjQzKUu7idCGXeyK1HsJfn/FUUrXHSaUr1Kywh\n/FxVNIRJFL4AQd1HpUKz3h1F1ZvTyxZu1U52W5PiZu7g3Z2/uHaNJwjgjCFM\nmT7Pn0tdY683zDHJqJOlrEkOBIoH1FPV9K99Hi240lX18jUgJtGcalpOGJC7\nd/2ApdU5IB1deZ24AqNeyIm9Fc5hMVeHbW3tLgb8Nm3FJbe/0Yip8Lem3ogb\nrUllAm9ltk3EWUCvHlozSCFSd9k/qvlsHoH5B/PB9GXx+Pozj0a7zk5IyN1s\n1uw86BqC+noEW8QwjgNsclq49e9mMRxrpXGdVbpR9zaKPIQciloEIOh+Akiw\nmGj0\r\n=3fRZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSeLWFmSrnBTBhETnu+LE55FSib36PzzrMZ0UGTc6TqgIhAOupvuw9z6g8dZ/olftEdi9cQ6pa7HVPPkn6dmTFzaOk"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2421-beta_1532022402521_0.41478285627332645"},"_hasShrinkwrap":false},"5.1.2422-beta":{"name":"meetup-web-components","version":"5.1.2422-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a9b2e14920125739d6f66bcfef47521b86f241fc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2422-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-kW77A/0mryIgKSg5TYzTypFNW/rN6uwRfuyjhnYxmY3Eo2gXIdzr5/rS24X17/T5+YfrumFYG3R8gLYxq3uzWw==","shasum":"523ec42ba65a0f212d56459de5bd4dc13951e7ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2422-beta.tgz","fileCount":605,"unpackedSize":7733136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUNIjCRA9TVsSAnZWagAAFlsP/ReyjvPTyobWOtkLhqGL\nM5WuxTAtunVJJMSAiUs84f7dBziTvsZorzEL5pCdidVofhNYjSR+EjDwQyUn\ngwmLbe2Q/JmrqbKAWqlhJqeRftCr5l7X5crAE4XwrDZuwaedMCgI0OlbM08v\n9cgreIwyG1/FulXqIKUVDGkQ+B6RgdTMOZmc+xLxuDlCWwfpATWv6nBnlnAH\nx+9j24I1+QLYM8I9F4TYpxiW+nhAcfKmSmhdDJHukhvXBMqhPw5ZpqaaXYAw\npUQewymzQbfy7og+kig+vJ8KKSZXWOgYk8dtujdesX1Om48drMEXBk1Oj9BM\n+8jEhG4bmFtRwrXuA6pqHhsN+N5Qpx2ThoPSTWXiJbK2Aj+Rpp4gx54ijI7z\nWRUkITZMEvVTr3ySPH3OuJBOa9JH7UipvhugcJrNXaIGGOu3bqVoCBFR1sqz\nwF0ZMIGQUMVR1n0VIExdw+1b2hytsqzV7c+gZs/XoLTFEssUX+V3WEeOfV3J\nxFQe6Jzh4dMb/BkBjNdTRiZ75m0efMF+RZb8APtFD03zdk/1udvNZ4iHc3+a\nq2Apaur6pS4EfvVu1jFQjsCtG0IRpCZvbADvaDtFSguX99ywYIwOcAHsjClY\nWieOs1Ehg2A+Hc9WN+wtT5SiYuB2UqVriyjVoKRIirddav5tc3z+XDrXDtCM\n6m8s\r\n=qcZi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFupiel1NUQGcsQIQV/bFPiMS2HzUS9iJmSPEjfJ1X2UAiEAsPqF3/gBXrRbB89WPe20YDMJXwc2mMXtA3QOAvFnskE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2422-beta_1532023330846_0.12112979003543112"},"_hasShrinkwrap":false},"5.1.2423":{"name":"meetup-web-components","version":"5.1.2423","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6aa97dbcc6ac8f33356c4cde04cffccdd5468ead","_id":"meetup-web-components@5.1.2423","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zVAuioOquUdrMSf146IJ96bKlwv2r/Fo5JHV6LLlFnrr9dc0zKjOXRL/ljja9b+UBcSocVld4hLU5/Cb72dlmQ==","shasum":"e5d5ef6f893cac4d6738e6c21efef4de42a1cfed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2423.tgz","fileCount":605,"unpackedSize":7733131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUS7qCRA9TVsSAnZWagAAirQP/2Lq97oYhvO6EzhCGtLL\nWVCBjbWv2svlNfjJ1eP6U/+kyki4zHKM/kODWqfhaggYAMMSXHHcl96JURN6\n5AvjjIAvoPK6S1UYPh3QCrUHbgQ/Mf/Svuva++BQh1TRfyYLpIobd2rpY1IU\nfzJfGFi7vqxHkrgRswmO/6xl+XJ6iz7j/bL1JTnPOzReqKSc22M1UsTxfp1J\nQvURicjDbYVEn0xK/HMgjFTh2qaHpJ0FzYm8ZS9AQQrMANJBlTRK7RkC/D+5\nnoO/sEY8vYH1PZwRngeBCyrCHJE9Iiq25+Cs1dwJCUcAh0hSrhARjxQw7jEf\nyPFZP9qkFoVn1k4GGPy8oag+CwVScMaqi4wMkeZ8M+0QPKCswaE598cnquEa\nsdkDYvKuY7+0yh0vXKTMWg6sTpPBgbkT2nVP5Xvp9Y/jI1QAuroW1ASDylT6\nIlxf8MDe8g6wnR+rOL8xTTAlRXuIwgcbyDj8wPMMiEO5uk7F3RjwIrjlJVvj\nssJPNFEkxGvmQApQoEP0m1lr7KIygt1keJldJYVUSmKc/WVgeIE3R/0NUxbR\nMC/l8mm2Q8ohDC/sRM8gWF3nyFgy5mYmtDxDWmxODqK6Rzyc0twB5e5KAqcl\nm/dERws623e6ZG+ZZK2jdTXFWZRms2PiLTjWDiOpMER2E5reVdmy8xyh7Te4\n8INW\r\n=Fc+E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICEMOmSnPDRKchGCdtSVNkQLQFobCg02Gmw80H0t56sUAiBlMGXqKgDSU6/rwtKStcsvT1ibyagcvtflAXdDvTlSHg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2423_1532047081995_0.5688668424243606"},"_hasShrinkwrap":false},"5.1.2425-beta":{"name":"meetup-web-components","version":"5.1.2425-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"8b9992f45e69e5c61d2149221381e7cc47e66971","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.1.2425-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-826s6yPE6ShauX2k8GGRsujGtFJnwEqBHDwoUg6sNYCLdg7qnUcUNCDqshrWIqNbAix2QVhLjQYB8QmNPtsdxg==","shasum":"e58b273ceb3f69e150cd0bb1312d3f5fea8ddebc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2425-beta.tgz","fileCount":605,"unpackedSize":7733183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUhW1CRA9TVsSAnZWagAA7gsP/jgRVNiZjsIX3BO9WGgs\nvY3dsZotTYn7AJHcQpn0UHrxj3CWtadjqZIdmjaDKpJLDSGkb4cOdALQ+Qjl\n15MKuR/MPJCGWAttr3NP5kpJCordNAbzMB+ijWF90cNEwwB90NtaariTM9pp\n3faHCTh3bZQoVswOV4eL3v3QVcbdeHPMzDdjxCuvDUOQTWQxFucwIhNXBgFq\nlRc6LuuDK3kPFrWjYgPlH3zdXR91nuCEUSnUukWN6fMVtllZ9m4Ml8+0/2o9\n4xlfvi4feh6uquGWax+9qIiXjXuKLzw+29qls5mXRSXsaz4kLd+6s4xFj7cQ\nr8ZmtSelfO5hoDdJSga52wu1yskzqgupqb6W5W5O+Io693a1dxaR+ACemle5\nkDZh9e6mBfFRkoZ4KF2Gz0nqYzKbyucv+SGot3BG0JeTyVnezTH6B9V5X+Yi\nXjRh5COiN2D5xcBm3zsKlhSguZLLy+d8EC8uBk4UGPjjRS75wW8P/Ngy/mLD\ndQs3P6NokFlP07rCPjLsJx6lZwIkfD0dIoBahd8h3sJmVudtuAYRju7sZd67\nqhT/BZNVV/8vXKCL2fPSPxin6l9edr1POOxc+iJx+lZw6mhk/VmUpQXVOi1z\nYe9+RbY0/NW3ar2BPXFZm8s95PU8oYHrjNJELCsmSZ6tdXtnlZYYJGlJOOHr\ntXaZ\r\n=lrPn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBa/BezjlNno4Vzaf122LDTQ67ALDfjk1PrS9Eoku5m2AiEA1Ol2iIQCjBocYfvsvGnsSsCcxtc8XmrrEJ9EWWBEpHw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2425-beta_1532106165551_0.5813543149854774"},"_hasShrinkwrap":false},"5.1.2426":{"name":"meetup-web-components","version":"5.1.2426","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"ed3e60dc4f6762ef2c54aa1a262b33c6b9ecff10","_id":"meetup-web-components@5.1.2426","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UpEuFog/9ayfqNQ8/4kJS3aUgbPUFORFlL9VFa7E3jhvDC6OWQ6av6mGAyKZfCv43d7iViNS+P6IokaKCusK0Q==","shasum":"18a78c5abb4079d6927200caee870dc6c20f9209","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.1.2426.tgz","fileCount":605,"unpackedSize":7733178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUiUdCRA9TVsSAnZWagAAQQMQAIOEO0Dg9pJ+D4Xqor3V\nLO+msz5+mH9GwB3K/y/aYU2aDzPT5+MolDsw6yAI47AvPXHIapABsBJoZrYO\n1MoKU3G7HiZn2Hxya8Y+FopPsOPW2bL7AqHEsv1ZB/qdAdBxrFphQoVprng6\n5+nGgdFuVBf6dLE90yvWIoptKMTzgzSf+5BBdqT8q2lCazEyiHCfKoTlUCUr\nxP35q7BRtiwpeFAgRtrueuz0d7cn7VOaCYoH4M2VOsG59l0oexmgPFkCetx+\nwDyHMiHJ4lxYwU0XzRmDm9dySNNYC0kQjLgGbA+Q4sqnA0xKtlVLxsWOyhE/\nVqEH+RZTocekPFWwplohLtP/LV9UcYgh1oV6YaLaN8U3xoEX4js29yOVlMcw\nBYl/6CK+qOeDBdglyBDwelRAeh+t3GDQD1O0KlSaqVLmoEG/LG7aX3Qz3JnK\nkbPE666tn+zLyJHFgEEmdX0Np5CQeF56yedQAdp1EhJFFGhdH2Q3dfxOOJmS\n3mXjYHGfXQpJRM8JL8JKj4ZuNSYvYQfLRkv7rMa5yyDOrsr266vkATK7T8Pl\nceMClUY/LV4ozDoo8OTC3ep0YA+Sv8J6zroLJO0Hp3hvnkCpBIl5tG1kXNCV\nQH4DqWjppv3e1Jkd4jEhOvcEsZbu2oKlQguxnC5TXBZdTaAXtikhsQfQt1ds\nHY3X\r\n=Rx0+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGQzt6vtwBQBIt7HMDebCt46+3pouSOi5Feh2Dso8EdyAiEAmj4m4xxPSZeuhCZMBrQsk4VbA1nQ2Dv/UPmXLVxkt7k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.1.2426_1532110109337_0.2291158909139519"},"_hasShrinkwrap":false},"5.2.2427-beta":{"name":"meetup-web-components","version":"5.2.2427-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7af4c74a32b367e65f9520355e8c46635661e340","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2427-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+e3/7Prp6yDtXFrMSXrOSJn5nw5LyKNu7Q8oSzfVhCZpRyKbtNrjBGiPkaOcNeWW/V7C3sn+64wyO5jGrrCNBw==","shasum":"12c794a3ead87c8108bdc0b17c2caf6dc9e533d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2427-beta.tgz","fileCount":616,"unpackedSize":7754047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUmAnCRA9TVsSAnZWagAAkE8P/2zcGKhqYkoEizeBCn8S\nX+qfkSvYUNEiy37aD1IeZQmpH5VuC8/s+0yvXeG0O84vJrl/5N1+mezeP3qn\nj9qGC4vDcCZMD7lt6BBD21NeiKcK/zwbl7xP7huR2gTxfKEPPvuvbGvtmgN1\n22fjZqpbCfTKIkh76LKK1lY7fWd5mPwMVRj1ihgUKtdVwb2aS09u6ARCGYcx\nrR2T34ZFj9GiFsxM4f6Axu2N+KBO5268eR6zfMUngMrZpx/oo8rMBtnCUGni\ntQHa4lq8M4/hIs3tp0m8RNNcbsPaRVcPW2biRuBNU3/F7tbNKSQ94zkMPXu9\nIcRGnm0QLtn/2BlfNn0Z64ZrNmT2UPJB4J4uWTYTx5/GnR7xqVmz/Muqn1ye\nHWDHzqgRahd/SuZ8su6ZScGHmUPRK7X8pYN/A3LWq0gOmlHueeCS97/SD79g\nFZ2vxIiqytEereDgT+wmAmKt1LtAEuYyZI9k2qkiVh04wwdJmskCrZlvpIEb\nQGeIPX5S5u7wFMpQHSe508TYQdHEyccSrhrTQB6UHXDIUosgTTtMBfQHW3ST\niAhfYc3RgoKyaKdyMysc/Jd6a5ML4FHv5JBDnPQOkKcBPuoNPG8PIBLRlPbF\nGLnlZjgxqSgmLXeuGrW4bOZdFnqm0n2o3CEAKSODZB2weuTpUh5MTDe2gutK\ncQ0v\r\n=N1rt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3NuRnZdZbGQfJMW8m14Jn+CMEwRUhyYmRPlR2HkKsKgIgZh/ux4jln8RPAlU37bxjDAF9mY0xnbuHuQ/SiPPgdIk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2427-beta_1532125222826_0.7274769714156457"},"_hasShrinkwrap":false},"5.2.2428":{"name":"meetup-web-components","version":"5.2.2428","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"73fec15f77776b01943019bde85b882b702a9003","_id":"meetup-web-components@5.2.2428","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-oyyjJRIz/yDD0FetAB3BHgY952U/Qi2FmeRvwniUm98I5YOimZyf3YcTqJgmHKtBIcPbTac8JmzZk7XoiGHj1g==","shasum":"1ac0a3ef3283847aa503e4f6c6ccb9929487dac3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2428.tgz","fileCount":616,"unpackedSize":7754042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUooECRA9TVsSAnZWagAAtGgP+weWdqztfKemCvxYlWMx\nTnmGkPNKNcYHb4iv5ASbBh7qTFDxL0ZQxL32Rv6JCqPi+2EsTSKzJj5Jif6S\npKuuyce7J/MvRu8ielW48pcvF4bzoOvHejmbws+qR0E1NJXaon5pZEGAFBE3\nZIVUGQjHYn7QFOkmN0KE+aNPYN0oNaHV5CB1ShCqX+4mqbBZerKYmlmkfygg\nR0snFQCzC4HOe4mpPx1eHI7naunQ2wfWMXNClyh/mnTitPTSyYwrSW13apHi\nIIs4VlUDAKRTkIjvLcEtjzQi4o4UCr6RfcGg4UyNE2SY2rKbAxcshzBnRWo4\n/qAjnc/+2IrjGY6DzKWHBVNjLxaB0Dd/L9c/ilRGAjwu2jPpe3o8tp3rtg1W\nRcYqrqtm+0QnREaY6e+l8Kt0eULNsrNJ0xqbKPjO1gO3qVIx06re+c1FKmwJ\noc7TFoD3dMpkZ5ZBHZHJH9sdmUPC5WUXTPbm/vvbDRBCcxSlj21nqTg9UAQf\n2uDEIXOnzlQet3J8/cxHp09ju23SpSADg274XdfoKDA46YmGKnCc5nupvzYB\n5SuthD2yvCYd0eE081RB+N9GQacSbRcQfnD9LMKozJUEM8Lw95hf7efnpzLC\ndjo9A+/8VOBAShKjfk3VRDrJ6bMGy8WWohjz7tZWgBa5ZBLk6/xmSpEATPUb\ncFcH\r\n=umx/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEkmEmC4ixeimyV90A63jWVBscGX25TXggJYzACfjHIuAiBNpKRJ8Ixbou3l1Ly4KwjA9/Es/jwBkyqge50ZC3iCkQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2428_1532135940366_0.7260626153916749"},"_hasShrinkwrap":false},"5.2.2429":{"name":"meetup-web-components","version":"5.2.2429","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9f4877208df034d5eb340d77469ce00b4bf48d3b","_id":"meetup-web-components@5.2.2429","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pRN8OUO/xjgN0K231JZcHlBylhptCcAKWQKJ07TzV2AooSsqDhCzxNF+sGwhkeMLV3Rx0zVh1GmmS6kzANn3+w==","shasum":"55ad9da279aedcd45c59eced1d6c4c38c81d8943","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2429.tgz","fileCount":616,"unpackedSize":7759268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUpi5CRA9TVsSAnZWagAACRYP/17Zlhnj0Nkc2cRBYM+k\ncRFQRWcFJoO7RQVobTVkTcgpydrzONVFbRbyusdpyvTl+QSdetV5tTX83TUK\nlBCXIXQ+BAqpPnFkZZYidizwF/p0RZ+cOWvEKe6kj8oCS+dTYY+GeGwzQKcj\nbqBQThEqcKAAfCaNWHUUQ7Oa2AA45dRvB77FiFX58RQtLD98s2nYPx2D5NFB\nDB2fY7lBGZL521A0Xf1QAD459p+C2kvOQB6uClsnqWInxTHyEj6u36qALGlV\nMz0j0Cu3wNcss0h20rsjdZEEbFget0oYd5Dj8Lp34VeDJxtMJv76HjE2mSIN\naRe8CDXThQXE+hra7mh7P9aNwNfCa/2sht3n0k/HT/0nYM4d/imJlRGap7EP\nIizKIRttuiiZdJVtm/6sPkyDG/7LlgO1Q8YGvqMt1n5c/W+YFukbRRAGvHeC\n7z5y0q7O3FOirampCXLoXQSSUPSZLdj9DGWVdiQ07X6fo832toxHFtxqylXk\nAG6v/fj9cqpoSWy4D2qqchwCc2E4hCinmdDhGgSC/L5/h1Jx3LAPOcEu5eWR\n4VCiUO+tkv9ppmb5+Ki4eTRKyyQiuUKaVw6o/u+F5Vfz+Vg9uTNcCXWkVKIE\nHJ9PT5EBLcJHzYI56CxVHR90pxdDz3c5UJ3Fnz+5ZopeY3fkxZHgdckS/psE\nmsiU\r\n=Aw3N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFo9z2mZH2Xueu/OFIwGvyrnMig30btzYqyqmBWM0sswAiArYwcEzwi9LtXBsm2EnwD2jL1TK3KocEeiMSN70cyCGg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2429_1532139705200_0.8124841735229436"},"_hasShrinkwrap":false},"5.2.2430":{"name":"meetup-web-components","version":"5.2.2430","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2c2405ece02e61b2025bbd922be45c2260e4d8b6","_id":"meetup-web-components@5.2.2430","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-av6T78jQOObr/VKEpuQvPhRIqu3/MijAz+I7Q5WU0Yp445gZbhX56H+wqYCq9YRJ58LhBEhkuBhQHlusot6gvA==","shasum":"26788f8088fcdf4a8e3998de3ff2f0fdb24a6feb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2430.tgz","fileCount":616,"unpackedSize":7760436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUpwGCRA9TVsSAnZWagAAcewP/A/en4B1CAJoZqoA9xGC\ndoaevW3Uefqe20eO+blArfORKcaXGLG9UDrrHv4w07SojU8wzK+bBojlLaFf\n0j8EaP7A4oUto6wcgFMXpsdLZ2uPxGL1gzeX+t0G9IXzgPHfaVxRU5XgI3TX\nVclm+Q0j5cd071l9on31SZh9EKB9EJvmnFQ39ta4CLVKZ5VczkyFzUODc0f8\n+s2FY+yvDwJh2JcUC7ffS8Nw5Vjc44FbKe37IyTt8gZqnwvvrzT0TfHUlyym\npL9O0PRTrV/8nl1VxWW+O6znCr74nJy3tgKtMBcYL/0hW6Rp/HK4XC5Nyb9r\n1+h+NphwRoHyYZODhUmnLI1ArYTCcmOIFs1a/2r9RFUq+BSkgekL/yxn72e1\ns1VTcJ5e9HnfF1T01/C1LUFfmyGmK7hbHC59WWzbtAedzEGFmc5HKepB33hN\nhs+VEXhYjGJIuLZOhcaAgHhR+0uObnQKsbKUw004cfesinS4J4NM3AL4z/ZB\nzm/SvWoBY0+maGFcFN1nULVZqRKdlH0Yuea6Yrmybbx5AeOFGJ3NBSyZAPF9\nxtnVyuLmkqEnJYDlxirFDrm+yXsBo+VpvB6nombaxmNIlVFqx7W6PNkhePfy\nXmNYc8M/uyTnHm99oxVpoxtCN+/JSyOmK7sr+8IzWanSY/6Heimn6HF05Wn6\neNpR\r\n=8yUb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5zKSGh802F6Ncb/sTTb0dFiS0Q5qox48Vp7nS9c2FyAIhAPvncA7alp72/4uPE2oTJGPC82CSN1ZkzRHIrGj0gagp"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2430_1532140550314_0.5187301787888747"},"_hasShrinkwrap":false},"5.2.2431-beta":{"name":"meetup-web-components","version":"5.2.2431-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"1.2.94","swarm-icons":"^3.4","swarm-sasstools":"5.0.412","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c0d5b2a4c9f485bef25fdd6dc11b46cc98125105","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2431-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-j7gLc3DJ2UobFIg+QksLoITLeIT4jZkv71wt2BnTA5fznRwBGykYM9RPKEK1SpT4NtjkrY9zqbQQEmUEKAB3Qg==","shasum":"5061ad7248ff944d0dee2c68f6944b30a3b71a2b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2431-beta.tgz","fileCount":616,"unpackedSize":7762768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbVflwCRA9TVsSAnZWagAAuTYP/jZfPoUpIIHezBjAJJd0\ncDJz2D04tuVbllDtTr1taWEoQeYKrxRTHnGKyyrJK9rc71zmPRsar4SN2Nup\nizkJxKUsjvV5617U4ux9Yf680Kaj5nONd4SGdLviL/aM1MZS5fr8MJ5Qacj8\njMW/ACcS2K88bgny/rjgVzbJpLICrGIhpQtB9sCS1ygr9NLVSmHpTYmvYxAk\nUVbnxag12SXM/RdngCajQMvN28bV7/5p+EhRovpDInYg81PrxF+SjLxz3ZEW\nBVJVk+p8DoPRc/UzqThpPCuIfo8In7SOPpidhxyMo4L60dLrJirJbgJU0zwt\nxXnfKkF674oC13LmLQHmuPzdtxEXPyvGXP2aQswsdlVvqLUs0FPgzryvNGln\nfq8L6C77XPj1qrm/2pDGmMNL5KTqjZcEfpVq6AfnPWzoF7MX0Trc32ZhWNzr\n10otg/QKMYJDJEp29EJSvl1u/qxRCk+x8w9GAjJPEjkyjSV2PnL6lcCb7PQw\nkAuatJ2GAB3JKcKkGgUiQ4n2y3195R7eYekpCTQnROxRhu5VyK8KFV5cqt9L\nMW8RkHIZCSWwkJONQNrb/mGk7moBpdLB5dXj6PSxpze5O0XL+J+dczavU8wx\nEc0amb+zFbkxIX9YsluRd1ORjW4YDkibCypClIW6cGIYYYxXt3CBPT8zUAs3\n/K95\r\n=ytQN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBBssi5km1BOfuLEKVdwiW5zfXAwLN9CQEn8CEHqV6/wIhAKni97goUNx92Q2IP+jaX6I0Ezcb48TW0266aeQN3bEf"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2431-beta_1532361072692_0.44366479505960776"},"_hasShrinkwrap":false},"5.2.2433-beta":{"name":"meetup-web-components","version":"5.2.2433-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7e15129b205549752cc52e23aa977e3557064c54","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2433-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-m4Nxyyrdgx+zxOabomsrmsTUutrJT5CQsPhqQtsSS6QNfGlbZgzuij0Asn3FR/e5YiZqXd19Trto0Jc7P7xGQw==","shasum":"bda88a00a6ff56be988fdb32ed48183abc45d440","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2433-beta.tgz","fileCount":616,"unpackedSize":7762840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbVh7xCRA9TVsSAnZWagAACOIQAJm7VViFFdB3WZ1IkJ9v\nhMiC3Ar2ImMjg9IrQwgV9qxSV7um/ZAvWIdZg9uK/1Ou8Y3xFPCZnMqf5LFY\n+yXwZXlSCbiwzFhwDT3dVjX17JZRE7A10ykm7Kw5GGgJVl9j7DRze1RfSi2h\nOK5cXYY4n+jJIYQa5t2wZdTmz1h6uK/RUwPYcZaHmS5pUXlveCuNJREFGm2s\nGY3DBV6XCJSJJfPk3UkoJiFTNPffnlHztDFhRtjtVXGFfbiGlgkj2hJJXlnl\nRkilKIPNsO+tKkj9MJ820cFLIXqAfSfDUvSI+U6uHGxDuyZIPk2gayg1V/0F\njTpTa24nfgQ5aBAYJWqqw52jYXidZt4wUpk0ZGhXy7aS170908kp/IFfYals\nh7vBtZO8B6iNJcyLEyg0dgpixD2gfnyxaNkWwo1ILZElhqo27CpTGjX0JKf7\nKtBuJM+Q2lSYtmI0MQI+FbXB4AVUdhxJO3Oh60l3tagmoxBMpiHih6FQCrK+\n7CbEtx9sAWxDDBb8ZQkNVnWbS2juECcKPL2xR1Kq9Eo4mmd21Azm9aZZshc3\nXsB5wg62ZBapYCkX4Tt4ZhpBGejvboJtLsI8NXdrNmVYldwEfkWr64ZJvYnp\nSJgXGPBx8lIQXzrUn4jJqE7/vYK8Y/1E0jgZAWKZHL88/e3umWREiaFcyHsn\nnwxP\r\n=pKKx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0S/RCEM1ahZU0rKWCy3627d1yEzsLzumQTf+8M0VGfAiAVj0+0Qqc6hfzivl9KkOpD2PTfdV5UPxoAFtCDjYOlKg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2433-beta_1532370672119_0.06573693093670552"},"_hasShrinkwrap":false},"5.2.2434":{"name":"meetup-web-components","version":"5.2.2434","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"6a92df38666d1ff42cb14895b2c48500f96b6e28","_id":"meetup-web-components@5.2.2434","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aDCPkm05p9o/4roPdR/gD96755V7nsLT+oqeBDJQYbAygmszLjqKUZxrJygcUxZTaQ+kbVZhCZE2JRQxV7ganw==","shasum":"c44f7182bf0f8273c24fe95ac20f75f8640117fe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2434.tgz","fileCount":616,"unpackedSize":7762835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbViDJCRA9TVsSAnZWagAAY1AP/2G3Vn3KQM5YwBBz4ebU\n1/CWJqIodhI/pBiG8c4peXRTJRqwyByNOxEGF+yZJ0i1pyD4pAJyPTLm+zet\nunfiTJ3BoDRvK5SQndEA7Q/LALBwGB2fBS/NdSnxu8Q+dz17aGb+X45oSjkT\nnFHi4N8hipQEdCLJpq31WxTgkRl0IQPhSKc8riFCdWrryKy940vhOjhQ74og\nUXvk+djrtM/G6eXu2jK2prRUKcosbLllFaBslYxisZ0a1dyuP4xwiTkxcYQp\n+JQ8HXxgkeTvd8uDQIp7N1XUo70mCpsqwff6098SaK8zRiioeOcgRDkt1XdT\nIOCrFE8No0fQB3fwnF0e6DatALyNs0+KeZm1snNvWy57Jus5+ALNL/rkGbJ4\nSeN/1Xxp0QtH3pMYufsvHRfd757yQS5YbXEnL29X0DVcreG60RTHNV/ZwAAu\n/5WDAjBMryv0LQxKm41wtmBcHvnWqoEsvh8j9SQ+HY+fp7LF79QsDgZ8onDh\nbRw6u+jju7crOqWxF3jWQ6qG1/YfenabFLnl7tdSYUymRtj6pwCH4604DoSH\nbYCXcIHYK1RW165Yt74Dfc6B971mjUCuxQrFwg5csIeVFd2HnLe4OC0J1uKQ\nPe/GiY8ePL8rfw2r/zQD9hdmOP/92QChwP00jhjrXsDfbTDrnvUforJrqWuz\ndBcl\r\n=1jxK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpqU0ZN9uwnqUMLCJ7AbNIjpzWexOH9LOH0B+9Xy+jNgIhAMNIdeaVfXTsM912xGlBonnRZ6hQaH3DhtFP9jEbm6fL"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2434_1532371145202_0.2979658123408315"},"_hasShrinkwrap":false},"5.2.2435":{"name":"meetup-web-components","version":"5.2.2435","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"0cd8ea4375ca38c893933b65005b52869f2e85ca","_id":"meetup-web-components@5.2.2435","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tUFSTOw9DYhltd+AQK0TeCiL6R4a5FaRm/j19y2WCeYRDLMCaVBgdL3k5edEpNL7C9gAdptnFARWjI0ZnoOr5Q==","shasum":"d59b6b8c7d2061712cf31c33de308686960d022c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2435.tgz","fileCount":616,"unpackedSize":7765162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbVj7dCRA9TVsSAnZWagAAEhoP/0fh2FdKt2vCafhETq3s\nwl/inXkUSn7b6U/T5J646fPe7Mr25tKLbXlEGZCbN2z6rrMWOFJUSbmPfOtc\nKrP6YRJ5MrG2FT/T/pS09yh/zHwgdD9MkscgEgRSNbvNlbvPMmw377YMo9MI\nMWZsGoCbfp6XuuMNSQKzuB8+4JsGs1KgR2H4C9HFv5L3mDRva72UHKXc7Bf+\nEiP/yZC9m08EwRAlVd+lZ30Lxutrk0oj4EgF0P5eJNo7YbZiJsltOU4LUWJ2\nOEOSRJq9TFKRsWhQEtNZzta9Tp+XwIcFYT220aw3fO38pVxbkRiIjSoXbEaX\n7jWgEdnRrr4UMqJwV3T1qYDslZ9sKzQ7NaWBzvHrUTSQBONZ39adLyzz2BHc\n0UHcSAkQFd7cy/8i5KwhmLdA9SVdR5vfpC1XPTKzJdRs+xjV92e0NyGApqch\npX+Ki01lxKi2Um0P4TYVJR/F/7bvsHTQrUyJtWBGoMv1yavONyzgcTg9aArB\nrAqZSe8UvaYo/OMI2z2gEfNm2+DSZVN/HDA+EiDW93PBGG+x8kXLOmi0flH0\nSIfiT4jr7BZPIIVeLkAsqvnBGVXFhf5FbNwBp/+Mxz7y3HzGpmiprRPic7Sr\nBgAXnIAGCz036Zz3iF6HF1iSrVdVlnPymrPAPtJ40RuUHz88yHlk/GlJKOIH\nkgth\r\n=B+si\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDWkT09rb6+2eKEEZndVNtG7EW4rf17I+rYGMTsXwyiVAiBVq+B4YZkM/TVu3J2L/yZ8BhfMpR0fZhHILG92EB/5Sw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2435_1532378845208_0.5596050469997513"},"_hasShrinkwrap":false},"5.2.2436-beta":{"name":"meetup-web-components","version":"5.2.2436-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-docgen":"2.21.0","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2c3918a3ea6339a57dee8cb889ed2ea422c6c066","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2436-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-32cqLjCbwQ2KIwGGOb4Mk5z73JrEVWlu4YBSZwnaBpSl6naTy1MIjXFCIHgtuE2yheBp4mjbEA63qydsZe616A==","shasum":"22f29fca2d549713ebd59391f7d04380c47a091e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2436-beta.tgz","fileCount":616,"unpackedSize":7765680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbVk1VCRA9TVsSAnZWagAAu0gP/R+21UBmIDkji6KHWnWd\ntj8hjd8Ivfk/J8kCoY8DsHdCSUE1EjdH+YC5Rv/2hFgB5KjI40fpwY1sHkxN\nMgggrCFUM9RtLM1flCEnEilXy3HJabNGonfRCQOSAv0YLueiSv2rYM2yyxMY\nd+L1yx0U2ehTqjoB4qIXue4z5pNNo1JVND3dBDnavJCLy7vCc1UWDJLvvQjh\njEcbVWLDC9u21/GsL2Du5HyVd9hKWj0RhJ1EkEm3giHSiSRwKjudLgHTAEL8\nwiF0LjE+ef5sc5l1WthenxkRvcsxggiwaFpsHBJ78Sz5COLjPANNiIfnVhdT\nyEGHegaODnqbRUZ8tumutT305pCEOalZeEQrQfP0I5SQGx82fETshAwAxquV\nqN4Pf4dsRYZV+VBu4CLtEJZPkGZak10tlNhjed5Jq+7oBObLS4hEy0OxRE03\nAn2B2CL87fvCX4x5ihXopmWa+PItEewinwm0IDhhHUUwSXMrGD3aq0H6tD7H\nwXOHOpfbtfhZ87hZMbuaqdDs8Jt4ydnGQob0EhWfEungpvV/TVqHWK2szO4d\nFTeKg5WjI6dkvfHovddM9Qt6EgMLdWB1V+g02aqsvVkRer5LdVYOeyIgmSX1\nf82UidHwGzQJRJ7PLCIjpTUHvlcTH9Ox3k7LmpfaWBDc0i6K+hMnIrTBE5dJ\nO+6t\r\n=ox2Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDH/PNn6cHDfcTqj5dsOxnLGmrUt1ZhB2h1wzrY3z3wrwIgJrG0r1JyS+ElfJXYE2yGE+W7FGEn6MtBtSv1X55lzuI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2436-beta_1532382548921_0.302738551906798"},"_hasShrinkwrap":false},"5.2.2437-beta":{"name":"meetup-web-components","version":"5.2.2437-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c8f7f0baf362fed0899194447f6345b0d2064a64","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2437-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pkqy3aMHYTyXLIoZohFqp+a/tw6Ap0TuEQ82v6IBzj1mQ/P/nqxDjQw1eQJhy0VZED/JZzvYjcGfp84e6Tip5Q==","shasum":"3baf1d1b6e39c10aeabd3076222ad0444d5ad6b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2437-beta.tgz","fileCount":616,"unpackedSize":7765252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbVlFcCRA9TVsSAnZWagAAgZoQAIkFmxkW4JqRs7jIm6nw\nG+hN5Fp63jCjfOit9hz63rJ/Wx69rMEoSi+5qAfylPjMtrHDKKIs46qcVpiN\nag9NMwYS+h2xocX6smWxKLXTSR+OogrOgCEi+aFSsQp0j1DmYnWSm1JaM7Xw\neVx4Grxr+YY/XatApf/Fen/AhByv98xMG/FSihf409moOdJuU9fezuJ9411z\nuPFKTYjdmDxR7kAiHR5+m/wmjfjs16fQ5PiVydnxSsgXllLPS9rEDynLNDtH\nPEmYOfTJhp70nxstRPGvY3iN/ETph1JFVacnddcZSzTabr/RjAICGDWzJCYt\ne0X0Ilv0yQdNY2mIqpVydZpT6mM0ujzUHWdBvqOQEmTpFrckEN0BgWYXyo/Y\nCvM43S+cJ5Ar3GcXVRPXY6SVzJJkniuSM7Hfdb4n+01Q5b0C4K7JlQLpInWx\nkXmzhpES6TMs+M78cPeWTis6KeTHaDF5Zj2uk6/FtJPmzi1RS6ox+2lu12VO\nJTN7kINC5HrMJ1gQmoKot6JtrZk81lzFIUyWc5M5NjhZsNE2NhkgMFt3Q+HH\nPscrzzlCUUKtDFSps8RzVrIZb4BgYOB0ze1lE5y3yz90TMEShdZ0t6ZfkgsG\n4ficy6JLX0w37uC4tm6X6KOAdDz6uGO0fKPOk2fnJ/H1LnwIXO/Mgja7vfe0\n/XOD\r\n=AJMg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7py7mugqMWnzrOIS0gQ5yl/i1Xvr5pASHi5oQzBzk0wIhAJYXJAW8Cz1v9LA6VppHolCbTiP+VP90Gpo/KiGacdc/"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2437-beta_1532383580295_0.959195549721473"},"_hasShrinkwrap":false},"5.2.2438-beta":{"name":"meetup-web-components","version":"5.2.2438-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"01c1c18219b12ae076c3844d8030f55ad93a1aa1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2438-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sctqwYVbBXSmX1rTpF67RKb/ZcK61vpK1ZgrotTgnl6usacyOQJ5svo9hJL9oNZRLaDYMVk0zeqHf8Fc7sU8FQ==","shasum":"6fd8bf20d511cab2a5993ed3bcf99dc46ab3f57d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2438-beta.tgz","fileCount":616,"unpackedSize":7765252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV285CRA9TVsSAnZWagAArq0P/jEqcJxMgCdaZ9jLibTr\n7X9cVk6lnVvr8jTjc/axUOcQFUUWR93RbzXq0hW8cyGxfxfCz8E62q5hpJbb\nP+gozoydmYkiGwzJsg1XAQ51PmkI0XdRxRwNSRNdhFSWqaA+1EwtXH6DhBl6\nAXjdPd2vX4b4+MpSLnqQSD2tXGv46aGzTPx6InrwVwD4NkI20obKDlvzyGOH\n3PSOgLuXS0ueWAYIBhfBX0TO3uve3fqXlWSmDB/7PFwbsdXVe5PJU3yb6Shj\nvosHPczHMFw4U/3xRug0KaXdCg00DMM8A4AX4KlVfWGjsM2EHuDc5uF8SvVA\n8mIl/Eg3k5ifym1TrY3zb1/zFC1Wkpnmi/m1F1ijyaTp2gHFPWiHT0Qba0Pg\n8AXZ5wgshXsxEAYCYJ3ZwdxWgsTRhLI75eWbj/o1g+hevWVkyQiywEktbGnM\nXr7TyNg5vKmiks8B88R4ZbBJKVVSu6xsMBUvwFxBBHpa4VJx3QkX8szmo6tn\nyxnb5ZLmnWb1L32H2FuyJYZK3J6pBTWv3PxymQYTX1frXOjLuma1PLrEN8G2\n7EEWAlHjD5wpTuDrzgelOwz534h8kfSrfPKjeahjnAsPrRyfKQSpdFiX44vl\nFXjE1NC+I41T7IH/tIsuQpBph5zgKbgF38ou99gQaEPya+OQ5q0h+xkdZT+C\nUV0J\r\n=etbm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcsgkp9WGkK320YPehxQT1AQBrWl7vcGbr7xv6bWPS0AIgO3S+fwpMNEnlgqnBddVf73pctTyPpMtI9hjqOP9YbjY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2438-beta_1532456761171_0.9956978784446362"},"_hasShrinkwrap":false},"5.2.2439":{"name":"meetup-web-components","version":"5.2.2439","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"decd3114898a401db9379274b1fa1913d9ae3a58","_id":"meetup-web-components@5.2.2439","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dSxUC7ISDGwlGG40si0cVK6Yo0rInz4gvWxSH4i7RRVNDSd1HhixMuRzs7hdB+uipMT9ROc41tAEyDMJZjKRsw==","shasum":"a2cae21594c3c6fc481352a2a9a8246fe095ca70","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2439.tgz","fileCount":616,"unpackedSize":7765247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV3HsCRA9TVsSAnZWagAAhEAQAJ6SLZhphsCgcY6RYixZ\nqYDcJBvL5BrhBk14z3iE1/orKLP9Jw/NAehdDdcFuTojEwweXNUMFUXYqTBB\nGs+4nT4/qPTiNDA6uHZ+0fXhoL5AoLerOq5FwtLTWdrHoD8TRjN9U5vUzuBm\nAWeKOTCZWXr4Kd85r6JR109ShKQSQ7xz3ZG8aH5hY91QM3u63BJRS2jmloJt\n444rTzs+kFS0RITczCi8LxMr4kXzmEUbAK0qlEdo90peKAB4Trbp14PAX+cm\n2Kp1bdXzUcjmwuJIBxnsKZHawvV5fySwwG5nPHYbfpMk3NM9MfQjRYuAjaou\n13RQcFm9ptJuASWsyFxZCnr4A+FKsD2q+OElt2Vzsh3KzHDAIsbg+I9QTqSE\nFK73Wu2BqInNm8SSGusTJ71pcofDuNpl36tgmHYFknRb+hWeg4JQjIjZ1bmM\nKLBk942uKB/SSQFbXX85a2OOHxTsowc0dsrGTppUdwZAonzYCMySVzIu/2fr\nO+bgCGdJ+BsjfdxBZ/JVKuAenpjI9l98hdEcVHoxya/fWLyMueroXny0Jd/U\nCibJgRTPDZT0bMCZRVgw6tyePGGD5keKd3l9+i1Az1HJoa47wRrNR+3D3Hg/\nsyC+03vBeLqkLatRgsEdQ2WU0IHuKyWu+SVvNigsk6FPUyvKovjNxf22CHI6\nV7+N\r\n=9rxF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA6DSc4YBKkf2OVFjbesGDblazbUsCNgCdukiRGtTt7dAiEAptDxeThNAdEdcwwiUxq+uwK9YrFNP1kWMdtycuMGvO0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2439_1532457451854_0.03053010770507192"},"_hasShrinkwrap":false},"5.2.2440-beta":{"name":"meetup-web-components","version":"5.2.2440-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"dfdf1f03cf420733bbc4207a1a8b961af24bba7a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2440-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fcIDRsdBYmDlBWZtrbGQ84IGIZ4pbbWFRPqh6734ZmJuJ9ldiOMLQurgrPtkvpR3oT4oIQFiftoguG8cuI1KAQ==","shasum":"0b39a2b94fcd220f2c6f3b7696d479335d08e4b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2440-beta.tgz","fileCount":616,"unpackedSize":7766036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV3JWCRA9TVsSAnZWagAA/5wP/jkFE5/Qy+q28hGPpZAD\nvpavhnl9btDB2GLEyCqmgEofK83iu3cA9TSlYgd56YK16rcw+yeXE5bJakIN\na7iK4Gj4rnXao6bLdGprGJcoVJOik/57Wgdx06YWa4cNJcmdf1BKqgNPMPyv\no+D12t8mud4C/jlyqwk6GHsOOrb+qvJpRD8pK3ulpRmdYxLNLOGUG1Pc9uGc\nZ14hcWfIchWXfv1MoEGOA9w8slHLiM2O1LuOoQwHn5xxN2WR4uBFAhannwiW\nS+vgokOhXCNK0+GJW3z+KRYfITpwio3VPghml9axbmt3RafmoD6GvzwskUuH\nqaz8XGK4bAF0AA71Xyajs4ywC7ExwfhXz9Qg5ElqSP9z2OhKg//Ltoc/0REx\nKDyYMesyoIzwWcYTFZgrRHembvlzct14peFLQPb+oIx7e0Myx+pZjE3tchTW\nQK7rUu0ZhGsDM4bIpThmTGHeFaiii5V3mI4C3gUk5fUznVjqqjyPKRAS34Jx\n5qqQErftpUCSZoYgFwssoi9m0thr2rQrxGCQ1+hBKXY3ARHj39VAcxYS+p3/\nRIB47i7zQ0YBUEPizJpuCL7YR8IngQy12oFTMzn99Q+t2aQ73sDKgm0mLhZ9\n6jyOk+PNuqOyZPbDw3Po10IPwyxG1wZ/ObFf6KTWfXrFy7csYC4DcgVRBAdB\nOGg6\r\n=lqAd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDir/V0bbNk5411oYds8pZj0NAdHBCdiGMh0UqAJpbZfQIhAJzrESln/Wp1vyBUnT7mW37SxQgQ5MnJ0p4kJ6UupAcE"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2440-beta_1532457557680_0.3541256610854677"},"_hasShrinkwrap":false},"5.2.2441-beta":{"name":"meetup-web-components","version":"5.2.2441-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"32bf7eaeafaa10050d678fdaed8b9146b3280faa","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2441-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-BsLDoLwzg3sYcAYwdt+bKtYgWbpspsiDlK5nDnGYgMsg7YHK2QJPaxM7MgKBqmQocL6F68wm5CisqGQb+NSg8A==","shasum":"dfe4cc0a40795557a0ed89e43397ec360b616ebd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2441-beta.tgz","fileCount":616,"unpackedSize":7766029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV3JnCRA9TVsSAnZWagAAUZ4P/0bH7m2HsIcxw32W9i7K\neSeTyvpmsK+GcqIJ+QbttQAtWDoMhrOP2U4ZbBMXSD+TOr/gz4HMW7NLAc9v\n+UacTAS0m9FVMm/H3Fkdoiq/x9PSlCZpbYmIWOkS6NIdXsqACsf62vw1dkAh\nuwRcf/NaKpWCv8RcEmgea8SkYOUFc/WPtQsPShCrrWRzBSzf/nLSqWMzq3jg\nUFkMVA/s+yecKkHEuBR2d71nzQ8cqut3XqxcfaBCVIe9JqA3L7Wn1flJEWvY\nxsDsmA29qs6cwJlDUB76gm4Z51Nli7tq2zDExi0y46lpw575qwmy0onxCS1z\n5cBbaRy6oimJ0GRuTouMj79fCLOY1tILlQcYRmTq/YyyRdLaOknJNaDXMEWh\nwVr971rJYhg+cyJjFoLOOavm8PFRpIjIo1nLRhgraBhRm1BYOX86FlyFLeA8\npaDTCKeJZvO04bDzY7wsAa7v9JkQNekw8aPmQQtLxArr3L/P4itzz976fnDr\nEwhsCHmenzSETH6k3HrpcMzNyePCnsTYZPKwb7uv1IgKpHiQEuwcrAQMu8T2\n/XubCR0AlFW/QPXhIqMvzMhrcn8Gy/CZdDCsO8kvklUCG1//T/J4/tINmzYG\nvIGqUbmmsowGnPMe6KvYC2nmkHtDZ0ai4ncEBkQIv49Zpd+Nnqp7YqTalflK\nku4b\r\n=cO/I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3HlPA+XNx2VjYRPj7fKzUh/CoL8MyrNJL7Yem23IJGgIhAM9plXa/DPTjS7SSsJANa/l4HnVG5j5yKbLrMsn23MYY"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2441-beta_1532457574940_0.8245310571132953"},"_hasShrinkwrap":false},"5.2.2442-beta":{"name":"meetup-web-components","version":"5.2.2442-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"58a93d8a9db6b771fe35b0b5f7657a32870852d9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2442-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-uCMi6Q+8d5AyYwvx+1w2cVEL04rFA8ipZGo/6UyR05zBa8k/KSMK2xVHrIShI84I2SKI7kljz1kIV7tNdTQf9Q==","shasum":"bea9aed7152e99789de85524938cf0e84f6ccd58","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2442-beta.tgz","fileCount":616,"unpackedSize":7765315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV3/0CRA9TVsSAnZWagAA+/sP/iZrYjHqQz0crIPJCcQI\njKevQFyT6sWLL1MttMZu3oDKvFy1Q69lAxuM6cwSHWLrxhzUJMDz3NiynhJG\nnfLluYKE3ho9sdhgH88JpNO/RwmNUMTAZpFulXalcryns2Uz3wqCl+KyU/uB\nccONBgNgNCbyveRx71V16X7koqwuAMCDkLMt+COJVqQJB/WqpxtiBCPm1jMm\niQN7bDFIakwWjnP9ylP9CuAa46CXNqPcE4lD/64l6bpirWG+cJcA8Ama8Aez\nQMyMf6GQwUm4S1j1HE+MPbiJHfSY9kwnbHksnpwLxuTF1AyzdCp/NUFAsrc0\nwBfBw6GIOnpE7exVKcBMEs2s8HrhoIZWLrroAkksEuX27eVzLsBbvU62ya0E\nPOtxbPr8LKOCb3IF+YpoXvG/C7QA0c4fNaEDxUJLJJxopY5ecOF/siPyG3ZQ\n/ZCy6uU6Cze66VJ3nmzcNL5boPxJFbs7Q/mPybyW0klDa0BLBWu1hwWB2tOY\negGCGEIa6KbITZcCyd+HjpuaCfFHHV26oS6OGuLN+gnS+5HKmobetfaEjyqs\nuCetUh9TnwI+ouiykrNIncN2atXv+6txC88nLG1nYeZk0GcAbD6fWV2OtfW0\nHTa21urn1wQkLRWbwjfMuhQHmjOmu9bc1JtqXMeSBZLrHEVoniiDG+aqEQVq\nAXxk\r\n=+UmP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBVKXSI5av+5QRykDnVSV6e4RD4Jy9//oXfm2ytxd+5wIgP3qEcV32VRbMJANruTC+nm26rDIbpnk05gj1GEscQsU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2442-beta_1532461044075_0.5699776011279338"},"_hasShrinkwrap":false},"5.2.2443-beta":{"name":"meetup-web-components","version":"5.2.2443-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2498f1ad357cba2e2809bb01d68c3a306fadfbf4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2443-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OrKD8u4rhZdcppMQfhgiCHsUpmd7x8Zqvuh08JO7KsTdF8d7wjrWoH0NZp2IpwdagNxsXlQatNZva5KP/I+UkA==","shasum":"6deb7a32534fbe3f7187bda71ae8df0905cff8b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2443-beta.tgz","fileCount":616,"unpackedSize":7765293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV5xHCRA9TVsSAnZWagAA5EoQAJPPv8+uYIRUFjiCysW7\npPsrj6JtxU5hkMNz7IdjnPKqTteZ0l1YRl9cGz/NRJ+1J9GuyxappwFvV8/X\nkJq0baTBzLbBhspTbHq8JuTm1CbZ8YNgQhRtvDlCr28yrJt5XnU8S2mnAsJ+\n30Yg5H3dQxQGF5WFF0a/WVHMJiLzvOdjXcb37WRFG4VFUS0tf5+GdO2nRCHe\n7M4wF6tdFA0tJL0XeCTGKx/wabaSf3OavOkJrOzrJOdQUaR4/RVqtC3wiSHm\nDOul+rONwy0wpG5uSgRgX7+p54Og7uqOEb4OShZQ+iKqywUyMR9mWML3gDJP\nwPuFQJ/rSfM3iuLU7lFnnxsY9m24nqIjskHmsvk6oN9EHw1QRvphZXM1cSSO\n4PXDrfnhYqHKTlXPeEXE/mBK5tvoAOywc5IHSSGwQVhzK/+CFpjDaBxAH5EA\n478uBmkCBX/0IiHPrn8muBd2c3BVN8N7nqM0nK9dZN3yGbrw5J958bi2E0RJ\nCwV0QwqM8GEQHZ+NNXAY/FoiWP7oQlRC1qksZqNbn1vm58LZWfUDOhd9+I/Z\nBloK00ZiBMamF+dOS6O/Q4aUGaBy6A2Gdv1aafHgISbYGKzMjjZvjxVP/HMs\nQQ9bZquIbrMjT0oYr02oTNZDeELDaMHN5GZqoEahFCpkIUC90B6il1TvJieR\nNKTi\r\n=xQjz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhXuOWO0Bqa3c+LRGYZgv5qQtRybiOvCWjO23YmDxJPAiEA8sA5CVb1lzJPOMyJFp2ECS//vV13ksj1d626hZhDuR4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2443-beta_1532468295757_0.7065405206757105"},"_hasShrinkwrap":false},"5.2.2444":{"name":"meetup-web-components","version":"5.2.2444","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"d39cb8372e2dea1c1fc967f9802944f0f23e4a3c","_id":"meetup-web-components@5.2.2444","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0b9nrpVv6tFsCmhsOk+Vk+gK95riY7Alv7Gb84tkz2GwZuiI9IXHtTh9l2iYSAxN2iiiFgCG3bVK933uTmFd3w==","shasum":"e13770aeb9365feab23ce67b527bcff861500d8e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2444.tgz","fileCount":616,"unpackedSize":7765288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV6WUCRA9TVsSAnZWagAAp+8P/2yXBDyO49IPGogAAEiy\nYXoi8ZvIa4AZ9kvk42tXrrXQ+1uEtV0NR3NB+vGB7abbOTbTnzNLfRb/CZe5\ngg+VAZpzN5Bta84Neo02Mq7vQ07J2dE3bZqqOn/X4uY3y3A1YsctuSuHAvW7\nIFd6fDwKadHc3ehbF6HAfDhqoCjoaf6Tedwjae0rFbScZrsJ4gWRin6eewJS\nFqyQsySkgiAeeEgHW2fE8aeyw5xQ7Grns98G3vYkqno/s4Gq344QYo2uUF9V\nu1wFiu30Tb6bQB+DSBRpfwGz7aOyRJ45bdQBHXT1Biz4hwwID3MNLRp6gxWS\n+aWx6Y9wSmkNZ9FKgSR0QC4IwWAzybZLyV3Y62aux7RiqaF/BYVymp3oGuJh\nLlsZqpG+ecdJ4aD1mx0XfUM22CB4kOPesbaBzscPmH/fHDs/qHDXX8EfcYKe\nwHMT2OLlu7cIOkgfYmyFMGxGboH0090JYoEI3fzxwgc2u8zGc5+6/2TAdOAP\nUPiSHDCukn9wPXyDsmTtqxm75nIG7L0v2ijjs8GlVFF7YSdmsF6ozb5lXfrA\ndyyBN/d+Nhwbo+48xPIKeCje7+p0oILn1dSdSdLXFzNNWSoKSiaBTm+grLMZ\nk6Zh3AekjygSbevoSj6CYNHjpalFeBYKAvlv69qMJ6FBbYaMiPDeXLstF6YR\nBiYE\r\n=6Nub\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBXfbwbjg/HP3OIXkGsKcRdlyGvyW9G2PH+Vd5XwfKqBAiAoKDrFRk9pTsObX/M8vlVcXh2T9Ka5+qbpD7sDP8+8WA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2444_1532470676155_0.5550204686312661"},"_hasShrinkwrap":false},"5.2.2445":{"name":"meetup-web-components","version":"5.2.2445","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.415","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"81c90ae7e7416b3abb11542421a6519f133297a0","_id":"meetup-web-components@5.2.2445","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-TLi+GBhiWixbXwaiHZ/42K5skFGzVGnhAqrHut+67OAuYQuzwNAz7hvrqXp+jkMHax1HRJOlsH/omqLQD7j1pw==","shasum":"9d027e60e0450307a1389d99ac838511b70db1c1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2445.tgz","fileCount":616,"unpackedSize":7766065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWMUkCRA9TVsSAnZWagAAwMQP/17NI5ma8w6bGY+jsKpy\n7j+6DLPPBQsGyJEu69mpzY3pkkUit7Re/8zWQUvLukyEq//RGszejeOi8m1Y\nLOD1QNCUazdBSxwvP2q3VnE83Mk04YaB9g+GaNc1sD8Gy1kSo8TCiaQkYOD0\nPOzXYs/NyeOoHFZz6nvpckudtwEpBQfiVxiBIAjZq1V6xmtaDg2/oH3cZ7Lf\nCgRTZ9F9ZBI41TIcF/jTeVF6fCShynU3UWItk9aUzyTXAFwxNpYMKsw+KiBu\nov7K5cYxELUVp4CAFEk3+2E+4GGqI6XSuCD4Hf/EKzsqbdVSITrKHMLTytbm\nFnpAslr7lnsX2iqd5793VdKDGxvYU45deS8+GTFkdM9pBlEWB65JeiMnXcks\n3rexbIbJBi+NMSqhXScO3FQbDJbwysr2eJqtfjX87/6SfjZgoUxWhBooGmgS\ntSvCyO3mvwA1fixTmi/v+aNXEmijSVdviPbVHwM0BrfyorbO5E2RPAWk3DBH\nVW+bQWA9ehoWLMpQ80ldpTYZmHgD3WvYqvoVr5mGBh7Cm9Sx7EVXRQBobgFI\n76mlc5YORBa6Yti7nC9JHOr907OQ2FXCRc+Aizgjungf7FlGNhsjggK+UtrE\nykTuh/r2Iv4Tf/grjOUJ7XExXtclccia1lxqsZ7CQi0X+WL99d+UY+XkOVat\nS9eG\r\n=CoCV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvfwyV2W+E8eaD/Lc50E8LqvvmAffjgZQG9cp5iam/qgIhAIAMVvoOonbadJPQJ3WKwn4sBbUsDHKsxHhDVsbiAzho"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2445_1532544292003_0.8907507008976767"},"_hasShrinkwrap":false},"5.2.2446-beta":{"name":"meetup-web-components","version":"5.2.2446-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"04014ab5c6910a677ab5840e8896fa6bc342623d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2446-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1kzJg9F2hq5CXMZVuVAM17RzPDpKPbrO1UvOIJwUCaGb4tn8zr4IwQH5GB+aNBhvQA3yMq/a3dDkA8Mh9AHqzA==","shasum":"b5c7f7f1ae2f682fe664d4f4740d38ef4a7882e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2446-beta.tgz","fileCount":616,"unpackedSize":7763573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWNV4CRA9TVsSAnZWagAAd6oQAIS1ujLrB0Lo4/gS+6nB\nXl34rdwnRviQZT5t5NnIshyxA35lamG48ZOOkQL2gEgBLws971VuUqcZaiWW\ne83M16T0/LGpcnkb8486274Ua506bzTOGBmf4wSaQNpvgDyYnzL0XPwjbt+h\n+AJkhL7H8IOMoEvRnA2iIMZbUGC5FUnj6FHqKcJyveZq7L49YGlYD2mw0OG5\n9LflSMZlYRVPl2jOZ+bHtU7wvj+U8ZnSysEdOTmvnnVX8gFPi9myn+hz2bKF\n9mkEWxDYHL2vPCMnJSTblvYoBdIuDtiLdNO0pmurZQ/8720hb563SPXiIA9d\n5N3jXnKZOLFX/TISvlPDz4Ua+9rP2GqqVntbovKNjuzjkKLuT2bsqZkbAVA6\njUQaSeyHDw4zh8ztP8au1/+74jBeenDcdqYvVJxvc8a+XlXx1+dVUgD9mNkk\nH73Of+hqyyJYUOE5iSuL4yqv/qKBHYpLXxrezLQo3rnLqUA30gcWuKUsYRXI\nUqrRLVV4Gj7a8c0NcinjIjdoWEOPTjvxRJOgq6zxLrls4ssHaU/stRhVSSHg\nUbZNbAp9ksVUgCXCbMedBNsjLjNrkkBUz2/zD13Vb0fMjfACvMegqIj34Lrc\nE0DvvI3VO9AYApHm9GnTx7lqPX6lGfaPycoKM33PK22d+xXe78gkaYe9Au8z\nog6U\r\n=ebZ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvoWkWGQdi5IH1+yBuqXKs++qaX/QhHI6lXGqQz7qXOAIgROuBROAolrWM9wbdNrTJmH/cu5NDBMRFGvuV8pnK4jI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2446-beta_1532548472250_0.6281477708227843"},"_hasShrinkwrap":false},"5.2.2447":{"name":"meetup-web-components","version":"5.2.2447","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7a6e255960be2fab370f666482f70279a0164f38","_id":"meetup-web-components@5.2.2447","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YM9nL8fRR79TlV0qiMQVXyEk1w1h/0DlTygMU50isu40hm9ir5V41fq/3sSdH1hD+/TyCbpr9eW9LvGhuX2InQ==","shasum":"fc0271066be9ecdab471a27f029263a5fefd0eaa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2447.tgz","fileCount":616,"unpackedSize":7763568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWNklCRA9TVsSAnZWagAA7OMP/3fQvcAuaS6LFRkamech\nhhOE79Td1JefZCih5bTo3QRmUvJSB34Y+qUuxwthQJZj1rINtoc3SX1UfeNR\n6BBktWHGchQdjfgrk6+rkSL42sPh8SS62zmqYo4msEYYAAdKBsxv48XBRZjK\nyCsK67mv6CzTLe/87ZG/2Z6xyzaadjL/133aW8UrxuYVkAgKuuu2l7Q5+q5e\nhtGoVdkR6S4rn5bhG0cCflNbeM3zSgCXHs02j3872QzKbcDM9ft98udavn2E\n5AWDvTrYEz+oI5vBGbmSjCMwfLITsVnxkRA/QKkHKgfdeozKhMZPJ1wwPC3K\nwTMgxo2pkdwIrJ7vVW+joyA+FgJSX68drGcGCclE8dwfV5PUq3oxNzULwyIG\ncsU5xkucNianQrkjtWjGAdkTVhRYpEOqdH67wyJo1K3ODAeg3A6tgDds8CDH\nQSsGE4YzYKezQIYfXrOMyI7NbS3X0iSUdUnEtZi+CVPD2VgBt+CAyuS6is5N\nM2JlSuD4HhqeNi3c18e2OAA3tcxU8KEu178UrYyBU5ZvvuMj1/g4MhE7WU4k\nZood0CVJF1bBM6wPY9zywRTo03PQ9jbS4FuMI2Ej7H0a9BFvsm3YxZBKI4QO\nnTnLzTVptaVqb02g7q4PnLoBJcUAJwmRP2xfr5WX7zRcFG/wN+nG0cpjBkWU\nvySE\r\n=9mGd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfuN1pcS3WDjqiiucda5c+swvLTSCTJkiBCVnSAssPcAiAldWOs8wKnE7YNIMAaj5jDo02CjwpBSptOMlONuCib7g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2447_1532549413026_0.7646100063951087"},"_hasShrinkwrap":false},"5.2.2449-beta":{"name":"meetup-web-components","version":"5.2.2449-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9e8ebbd8bc6fdbb06af3c29816e876249d673514","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2449-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-T36yt0TZeNxxM+gDT/vqm2snQ8UD6C090FpzenQQEOQrtvY6YoKHxFptYep0pMjRRMn7EgC7s2U1PXXDIK6p/w==","shasum":"3eae2da5302d14044029eedc3e68b4c38757790f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2449-beta.tgz","fileCount":612,"unpackedSize":7733409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWf+mCRA9TVsSAnZWagAAwXkP/jKmxOzXKnwbI0byXYs3\nT0a6LdwgEBlg+NKRCjodyCKteJ9WyJB55Hf3qrKXgGYe3AnJ0mo+WH9qbqBC\n6Vid/IM9nYzwY5wr4vuAjOl5oD9MaefYy7JvkwPZ813uECpzjgfwv76di5E8\nblys8jsp+BSn08qdl7LYQWhi2EFPxrXHztkbkSk2cb0Cd+LiQd72NLoqE4Eo\nKPbGlsonCffBZx1wBRXaihyRc6HjaZLyLuJnREKByyL/CNRj40SL9j2MOySp\nJNP1OaW11xzWDTmVqAkxBLrfKAEsrZK5qLmJfnaUHxII1BbNboBTG9v73G/O\nPHpDhZJ4GI/pLIJ4kOiLW44WqBg18jor7o9rxBA+KISdGOGnFPrVr/qFX4RI\nxH65rUu6mtx/1x11TkcMEzdui77MDamsEnwNKI1EgIgELv9lycGruRpt2mx/\nPLAQD1nGloRHWNNLPNJpOzDXtVhrtICA9cu9Re4l4glSJqrXlHzSVsYchkFj\nCQqF6KJ6mwAmd6zWx3fQZFKSHRhSiQm9IIRwgHFcptPoWWA65vQFgqjptai6\n8M2MK3SEJ+NMG+UGEOfSAx/B8VapYlP0J8uK1274ozc+qkPMzp3LCU4KIzeW\nMgAOghNGA5KtWeVs7ge8CGwieR6RYgtxPHlApGCIliH7AxpXLptzXFJMx1H/\nIQYL\r\n=WPlc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRhpKITM71xhE89UnrXdgmW+DT9ZOBMsbzS/Yg6c5DAQIhAIcolv7zLBEYFBEzxaOpA6JVkA8Tf3zx9EoaYID7dHQR"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2449-beta_1532624805808_0.2742772691016486"},"_hasShrinkwrap":false},"5.2.2448-beta":{"name":"meetup-web-components","version":"5.2.2448-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"42f1c5a988083aab8d2ae543f8453001166297c3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2448-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-StPia9dedXudfOqn2DJ4NkuGbtOMQS1FzrFlk0ZL1fKb0JharGFPjWesX6k+/fgWUKKKyewCQztmnAduNgKl0Q==","shasum":"f0fac1389852b96fb7a96e809377c027f7608b07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2448-beta.tgz","fileCount":616,"unpackedSize":7765128,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWf/YCRA9TVsSAnZWagAAwtIP/RDg8Yo4y6E+OZ5xhd0T\nZTWcnB0oUQ8AwIZV9rPQktHMZFzRipmGBBx8ojsE8qidBQDQdGaVbJqe+Bov\nr59LL4wfIKV8yYP7Y1NTJe4bRKw5JR5TodhlUjK30tFbVKGpgNe+6NovQd0Q\nJixgSpUK2KFEGbhgxSk1cQL/iZMzGE/Qsc1dR6kVO2T9lHrUu35AKbtZiPNH\nfzRUHFu29wEUx4L5mdkUUvpJ6Fy+8eh33YXo8WCmP00+2aWRvIu4cDgU20KP\n9ZseXQvgkNJaFYyuEvz4D8f2GuzDjduvzwUh/gZXr9iCzyy+l7E02h18hUv1\nzhNG9DAf/pWTU+pZVLmgosaryNx7EU5BEYkSE85HwnYPHH1bn15V+LtB5hWu\nyCAFUDOmu+sG0DhNWzGepyh3mHF8rkXz4bx5Ap3IDV+Aamqg1FZuTqjD5Iqj\nWIDkwWrpJgRMEbNubgsLtHgqwYmgK0vGEYmKhEHwxowt9JDvux9EbvoKgcqy\nOIDbVMPD2mTI98EMgBmyUSUj1V8x56CoNCzb+dHzAZ4QlAR1sPTUG/1gf7R4\nzPTesEhOhs9amaQLT5WIxNt93ApkHUMHS3XETRDABl3K7/x1YABP6JTWvuvK\ntGuWRFSaSlYP+M5gWkFzAn/xYhAS5vf+iUzy9Rr/zIhxbuj7h9hoWPt4Xpzh\ntEA7\r\n=tqNk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHz7o18P46zA6cPUcpIqDWvYk6ro+yv/Khz9O0U6afcYAiAAwvbQtX9DNhbFEl9C78VWsfV+oThjT5Ji4KggSG7jGQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2448-beta_1532624856435_0.8540592335420929"},"_hasShrinkwrap":false},"5.2.2450":{"name":"meetup-web-components","version":"5.2.2450","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"efdd9393fc3fec0a48ecf717ef0f9699f39c0a40","_id":"meetup-web-components@5.2.2450","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+chp/mve207uGYtx7QTLdY/pQZeDmZJh4EJlUGzL7sbKbySMavBUd5ucKJc78rwWvtDIwHCA0GikWvYh3xGcnw==","shasum":"ebdabeab4aecb1de09fab762ff776614ea5dc558","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2450.tgz","fileCount":612,"unpackedSize":7733404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWgT/CRA9TVsSAnZWagAAIusP/A417Nq0GTklXOQ7CEaD\nYVW6ZkHP2AA8sb5eiddprK44xNBMnArC+aztYdngjalI9w1lPf1dDVctt1P4\nl+1InxYqPCXrp57NTTqsHcks60CIYQyOuXJdt99x5Adj6l7mfo9ZMu2BltvP\nyngSiWhGStNH1YJy1UM+0/yiFFh3YSzznSCD4B1nNkBRRNSMLXiTbXCdnO7R\nG4sMKdimXhGzFswkrb8EomLjB/J1O02IppSuiKP9YJ1qqpIW9NxCg8beyy64\nCpWYD9ScDsWBfYQusW7y4rDj+qg7AvfpQJLdMyzgINpcSySPHgVA5fpUp9kj\nCmInb4SZqi9r/IRSQ33h5GvvRICMsrPmJXNVi7sdFgrLIV7pc0TxIOYUY/UD\nZMyVu+197X7DpVQ3PaCZzNSE/CpV25Dzpq9+/m+KldFw05SQU0ZFQbkRRqAx\n41feWuAo+VwYH5USP0NVcBIOdbVvqnu92qO4T4fY3t7CdHAYzHSOJOI7+Haq\nI7Lgwm9IBWQX5iyXp/jJZjIrwuzj01rug8Eks3CIbFS74L3eg7Teak8C0JqZ\nLScZuv9c0isQ3KKP2gvuL+vG/7+/4XyvdVmt60q7Rc4CW1kdAZ2Z8Wdyzj4a\n7YO4kHNuxvLy0xemtOfGAPjepxLc3WYLBNMRIPtEEqLma0+OUj5/0jsbokUE\nK8ia\r\n=Psub\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGjco+pscBDiR4hFd87tKVwpyFron6hFzrNmgH+hDFOtAiAf5hULhvOEOWkUTtdEdbHrqm4/bIJnV+c0Fkj8QWw0BQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2450_1532626175029_0.28112690153173414"},"_hasShrinkwrap":false},"5.2.2451":{"name":"meetup-web-components","version":"5.2.2451","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"0633534195f0baa3ac57232ceefb369a4cbb6630","_id":"meetup-web-components@5.2.2451","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JZPC7M3R5zuNtm8dKE0VjPafjeYtF3zZbYjKQpW7eBiBV7/doj4hozoS3Db7GXiGTl23KGcsF7dMu8DxZVlHsw==","shasum":"1a3082677759953d8ae4feec81ebf7d689233390","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2451.tgz","fileCount":612,"unpackedSize":7734959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWgUZCRA9TVsSAnZWagAAWawQAIp+l6aTwz3Xcp53M2Cm\n7gFi2/6TCMuaVq7e/UNPHx/++/4wHtUdMgh+A8PI5md2jimqenZQQC5GyvDX\nw07EkZzAC/efbJYwZcx4uMp/PoX531gBbTigHibZjywBBV1OxbpNL75F3uov\nnKmUBf27UcxGj1iWfn25d5zlzynxJhXvmx5F9SVXbrJdxTT6nckT6TjCJ34i\n1vv4c3HFRSMgYSrUJtR9uTyUk+2DbyKr2NcwCY6A9w8MjkgOfJXZngcClcc5\nBqG5WRgKlG8gCB/zXvffecer8PkfKEGhqmkSpa063jXwCPagU4oKhjq/iaO1\ntGW2t4uz/6aWOYPkmdP5XdHWNWCqtx7xqrwt7z/sUheGDjizMDEivyKywBEv\nyjzAH5zu4f5z+/ZssZbzlstDeIFBWfD3QvX799J5xpgDzJcnGlBs6MKOimz6\nKnHEmc8wFMUFHCxDpfSv15VV5m6CYOVuDKOF148nZ9UEaFHJ1ULVS84zEm1+\n0tzuZKY6LPsRosBjh0O0j+WFMGzBxb+Jt3ibLilWsoX2C40pJC08w+h4Vnjf\nVy0SURh63Aw6iyoVQcrLYTA/HsS5v85Jy/SeNMYhhuX2J+AIzMt3h3ASVLRv\n1DbVqklTJI7dUBR+1OGnL+9QlqB5iHe6R6jjgjNN0iMsAOv7FbN6S72blnem\nKTPS\r\n=Z2ap\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDv38nuGBd3ScAY/DsMSiiRrCf2GauBo0gxP25uIrclNAiEAwJAlU0nbfasKneEsj9UaunBUfm0ovnA7CJqcRm9vUgE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2451_1532626201027_0.4523412121840271"},"_hasShrinkwrap":false},"5.2.2452-beta":{"name":"meetup-web-components","version":"5.2.2452-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"01249442e672826f838d9e1722efa28355274858","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2452-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-x9NGP+FpdVGhWlNe/7ruxHnKcqRFK9xH6ZLc8jVaHYL4ALZy86NGyICfCEJNaVxqJyJU18ROigXu7Kl5VnQP7g==","shasum":"d596b6d61b02980353e79f917bf0573e18035983","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2452-beta.tgz","fileCount":613,"unpackedSize":7738885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWhkGCRA9TVsSAnZWagAA8YIP+wYca5AKZruRq8uN5+Em\n0my0Lp5pi5MYO3lXpfSsvsGOTQJI0Nofc2YqPeDIjG02Ek3Wkv7RAPmixlt4\nMG+QvNuEz/V1l6W8tfzucUTloO72VNYRvNJDVVZfaWoVn5gkSuZcB5GQoL23\ns2Puj/yizL67PM4nhQh/zAdDC6P8lwJYITdKbT91+o7HgEvHWHERJi0Rl+y0\nyZpy/rTQKrEiU8Ac8NwtGbcA/8TQXKr4wvuA6ycIA7sA8w7qQGsPKVEM9Fu7\n0D0yFy2DYE6nRVdSrgotY3GhoD0V3Yc6wBCdBtTiN3CHXhS1TWDLNupjval3\n5mfwF4uB0SlYskL4l+yfFobG3bAyxYrMv7KJd4td8h1tcyv/D1ZJVxhc3Qc5\nFEh0rn4zJrMkj6WcJTmTpOOmlzzUN0hLMWKx8GJd1d1QFZHqCWHE9L8iZYIE\nrX+HcUiDgwgZiq1U5A1Sb0b9rZqzJFo/+TNMD7McZbMdfYg/P0LCtkcyhcKj\nppTNc2gjpfKkBnfBs6XcNSeq9mzrkdYpF/1kip8CHFPl4pFzJ1zj55qt9g2O\nsFMK9jYZZIpmrUTPK2QYa5EjwPT7LqDnIiRyRCT+uVDni0hhBYO/fDcwZJR/\niZcjcvWuDYN0XR/XQ/lfVnUupS6EH3jstkWwU5FXB07+d9upXQS4kVxT6y/E\nOTLw\r\n=4ZPv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICisFmwvMXutVDPaixLqD7FyIrsNe+n+Fc3Uc1te6USvAiBDLjnVC/CKZrGEYw/4baS3o3BPFEvGSz/s9+jiShpV0g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2452-beta_1532631302253_0.6900111095008268"},"_hasShrinkwrap":false},"5.2.2453-beta":{"name":"meetup-web-components","version":"5.2.2453-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"dab762cda3602f2e462a649675cfc2d766497594","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2453-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-TX4GivWNFKswJXdArFIhl/hXhPJA5/k1n3qlq5LZOORkcQBhEVc7hjwrmEiW+NLVoEpTKyn8lDs+tkiyC++IyQ==","shasum":"e140bf0437d00d05d089af054b1d962dd3812a19","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2453-beta.tgz","fileCount":612,"unpackedSize":7734943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWjTECRA9TVsSAnZWagAAlLkP/3yUVv1NFkZox6RmjtUo\nDV73h4cG6dDcigeRyIlypF15lsbNeWonNLMieMuxhbpf68AafQPbgAkrqw9N\nnxUy/RYL969TWHlhpuns02iyxV8Lew5qxF0cPR28vz+0EHA9GV4/iYncuL+G\ndWDXGOmaMzpY+xxMRl8Htp/wuT3kLL+qsjgWJKzW4whp1K8aB8Wt8MK01Cqh\nU65VNrHDbgUbmd8TXk49aFfYfQ9Z/XzMHuOjxSfPI/sFx0hYX+Lb8NGTBu3P\n0i82bs0nzcZlv5E08mwC7VYa7lJmFD3wJ0aSnADomg05tcy6/nuY0ZWiysE3\nMQiPwUsxWuFeSzdmyGGpFYeZC3cvf8nZ+2bU6IWmODXONHh7eKDfSG/u0/rV\nCcnvyH2LonQePrzjFQVHqoy3b1tsIBI0X0a2P6bY2Gt0ujs81xbxKE8M41w8\npnQKwMlIq8Q0aMrsZSPoFXh9DOCgTkDjFpcTVsl0i0FgfMgWfAM9vbbxlnWt\nhNotRoeKqAAPNjuLpcswzRD2t7jvml+p/lAaFcvnmjrQDi/5tzVe3ZVrnGnC\nOTtGqvM3rTxpAiVwt5UZHt04NqwiPS/9hN9ZTLkvqGcvq1Wj1hOmx6VmPKjS\nSJ9X3Kf1/NnIaemsJQcB8oAWEC5Bcz79Jg4j5BO/0YJs/EwHsvOYBnujunEN\npAoq\r\n=4Rck\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKz5PvnlRvBYiMLVZFcl6z923xOdSIRUX7VpBncgoXRAIhAMoWQEOl1aoA5KTKigxjJyg8dhzvnhJqUJihPrDO1Ln4"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2453-beta_1532638404479_0.14273839266151356"},"_hasShrinkwrap":false},"5.2.2454-beta":{"name":"meetup-web-components","version":"5.2.2454-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9694ea725843824d39ad4953ad564fd0c67beb9f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2454-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-WQQKrjbD6TwMBSMDxY5pFwjVKdFMwAoV8bxEMGpZXrzvm3B1F9kbl8RFev4BhoGA7fSjqlIXkDCsE7wCbjMq6w==","shasum":"e20996db59d62fb5e207fd39f3a537070f0985be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2454-beta.tgz","fileCount":613,"unpackedSize":7739798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWm88CRA9TVsSAnZWagAAD+QP+QElpO1Mj28Tx0hddv20\nX/+6wfOmDBQOEA3P1Cz8cdC6RJPHG/F+IaEzZHTHi/Cz4zDfcpzMb1Lx9z+m\nPOmwVkDCDXXOSaiihPNgGtO6bLK/tgIE56j0Q7h6jWtkR9Qf0H6BGhzf2puT\nqriyYdGlpObf6UHL6uF/DMHKwUDzjuIEqD2atrnfNXPbLIw8y5K58RrTzTbe\nIlSFFHL9V17wzpN+5U8bhcXIuiTBQzpXNntG/O+HCoJG37aAH6zLa31H9Kur\n2n/ko5vyLqNxwwDtQEF0KBqykkv6okyI5CySmD5Tl8hJ1595TOCI2lRK2z8E\nsvcuxfy1LYQ11dOBFeTM7ck43jKaM8Zorio043dYOjkDvN59R/CdM0KW9emR\nj10VBF8jEdCQP5+SNEinIyWafHwuRnFw86AHks9Q19NDyEMQyM8Pj5+BSe40\nSavaFGyHhM/WGXLwFbvORaZKjyYKJs2tv38SlrSqhlM67Jh+xq/AqmLg8dfT\nxDvl1K9SflccM3OF8GMH6/a+ImoYJUdWEGseS26POj76R+fGePCG2rGJF2Zd\nRPHE7TafixJSOYVFQQGIIlYw6wCRFZUo9FoXda+qvVnOL8APoeRYROT0mhiz\nkknvM/phjOUKatZR/2dpA0Dc1My2jRuwRk8n0ckMhgqGAghoda7jkt/4AuC9\nOors\r\n=DzTO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHFdBv2gv6w2n6MEhsPr6v8bvKP+oV+mkStu6huvUS/eAiEAspWrMO0a5J+B18cwCDLR7awPmWMNRiium5AfawdAn9g="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2454-beta_1532653372485_0.9753742531174878"},"_hasShrinkwrap":false},"5.2.2455-beta":{"name":"meetup-web-components","version":"5.2.2455-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"37184a474f031dc2ea5c8ec54b62a8059b622250","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@5.2.2455-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jcGHYYBh5KFtVR+TMzUz399MBTS/l9SLnSSd51DXxix8+knEa3Tn7f4FgJCwbKlXIZCGVr40PpTs00BR28v+vw==","shasum":"2dd8c68354ce183cc3f08edda3175ee5705a17cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-5.2.2455-beta.tgz","fileCount":613,"unpackedSize":7738130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWn/sCRA9TVsSAnZWagAAGxMP/ibc/G+CmetkpHwHC479\nrSATfER/zCh2geTm6HlhIPW50DEVrGqW6sN/FMnRSQrzKFh9sAO50jZmyCQP\ntIdl111ZzqCoCuWaHwIiS6GhMLn7OINw3mP/58MyqMganKzoSbJT4t4IoptR\n0uHZo1J6eRa1vp+N4gGAitfhR0wBAZeT7b4d//Ko06s62Bftu/NtYVxlq4JU\nwkQ5ZCnhL6zYYATijqiOarGt64dD1377AW9zH1RweagI/sU9Jy5uKUyJNi9N\naBzLJfdfa5X2ld3xNCtF+VOPAYTtEk8sCANOeAs2bHxM877qYdLpep6lcGLT\nn5kL8Jr6oluRh1JmMiZ5fJ6msaPF2zVtqjk+iWlmDNdBNKFviFGzedBMPtIF\ncL99CJdrXRDaw+6RbvG0ZLnjXt39vsQY+ryDReKaaS+JLnz8ANbD3sianN20\nkDVol5T4VroiOzyLqlChn/Rtk5PRrxc/QxwEFAu6mogh5iy5orNX0geA9ncr\nvRslgMXdfeuOZalCETl8nUNshvJTZFTSj8RjMIgop2lziuOoWiCD2G8StTeT\n9oOm8UtVmfOqPgEvMIz2z4mRzf3N+//g9qM3Dh0ji9A3CejOy84h4+CfLMCq\n/leKjOcHqG5i3Bj+VUjnm9l81G8TAxkISEkCu/ynLqUJiwevOLuYREO7VWMy\nsCW9\r\n=h+zF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDP6Gok8njAL3lHgk6Vj30MMxUBmtWHHd2KzcfxiRbGJgIhAMqmj/WoXpeCO6G4tO5f4A806O30EtR9gYyyqoobF4wm"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_5.2.2455-beta_1532657643955_0.4040511340766386"},"_hasShrinkwrap":false},"6.0.2456-beta":{"name":"meetup-web-components","version":"6.0.2456-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"8e0eac74fed1db615d97f0760b6e9cb7b69fa90d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2456-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xv7pLQO9fhUoazUlGbbC3wd5HUQtMZlJz9XAALzg14RrRhx4pmJ5JCe1KgKA698iBIYedyjf/sgrP1lC2Fep6Q==","shasum":"24831a70185a02d4eb9fdc70c8849bbd1ba2ca15","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2456-beta.tgz","fileCount":613,"unpackedSize":7738130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWoI4CRA9TVsSAnZWagAA3KMP/1OIKPJdrOeeyFIM+1L/\nrNTQsmqOm7UW5+zrwV1l3R6Fyn0jRB2GTWo/nQBKcs9yyvAmbz77IlujFCq7\n+vHyzb7opPDYKnbk0qMauuasjUqmdlcbKIZY/G0/QnPGI3fDEWMBC7/n2oh1\ntHmBFOynoG8oD4J30KE0tRiNB0gI3QHtDu0exlh8HOVGjRytuwkesAkJvQI9\nfWjI8kfAPed58r2MrF7V/HKmi7nvE1MNHGkK4kbg02WccAUuLU0Zp8HPu9Iz\nF1+/o9+ZKZS12VL9qUqoyuVST1uzxzwdbyNIw3HYflHl6v0Rt/E2596V1joU\nB4bh5cArGowcnu5MJ+stJ3KmYiOZe02iERAjNTpHfHxmNiabePPEUb+Ny4fi\nqk7RP7WgNbut0+9F00cDgouQnMKPoIYNGXCJ/yyodAfvxDYFLF1ImgrpKvlr\nONZVQ5KaYMwqq0a7c/iRl9q2xldDc7nWh7mZuX3Gj/xc3ry+qJ73+Su+LpDx\n6Cp3rOwo/uVhq83kCpgVXKQ8xIpQxs9wmX2PiKxTWHNn/uMYfOlnWeDszsM7\n7iAYh17Y1xv6gaOJJAHM7ivnazfQgFjdHyY0nidbBJESimbernJ8/eL+VpOg\nG9JnpzhoZy+C7Mu8UUQZS/wYzAIG0bhw1TFpsxnPe+n1cFl7K6KnY6Thq9cX\nA7IB\r\n=xo+/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAu+EOADBqUJ2IuVq3uJTIoWa0vVdY4KncDf6sekEoKYAiBTSOznoVUTKS/uGgIOYQy8ce59BNE0fT8mXP6WDmv/2Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2456-beta_1532658232702_0.5209921075833888"},"_hasShrinkwrap":false},"6.0.2457-beta":{"name":"meetup-web-components","version":"6.0.2457-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"61aa4e2885616198003ecb91e6a210206431ef4a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2457-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7rebZhy7fwSOB5pvfpdvGMCjJfm3WcEy3HH1QQQvB2l8ehN5eSCQU5F04T6xfEtYtogy5XIuad8j0tdYn54vWA==","shasum":"c4ef33ec5198885a4e1ff0c3a9cacb7c6137f250","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2457-beta.tgz","fileCount":613,"unpackedSize":7738390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWoOVCRA9TVsSAnZWagAAC4UP/00gwcr96uUlUO6AyXVX\nDod+E7AqvI2JekdqdAO5XANmy59w3zoW71WevZI9TwI8TJtrTrd/iNcQE49D\nnnFNShfnzyUdFBcaCVirECLTxAPBkxB3eN2VvIM0XAa2ozK5WFyzZqJyuePV\nsI1qpLqeeb2QrKMfG3zudeUuHpmnuN7cnQO5d9lvSTo9FyD5LSFTtcBAFNgN\nz3Q0ipgnQ2wK4kEcr+ks4EjzuIZuvJYnG0CemN661C1NKBzyb42+Q5GhOucm\nHATN0op7O4DK0yN/u+A1yW4wsDOtRkLnR9L8lAOajKlqQSEIiliS9JuipNES\nVYGICntZ/w2K6FrivRrXzCqDMZMjJEYKUt3gjlpwzSndC8VfjuIB19mQCLiB\nGBCcnUIgCKxF8D6q++bofu7gYsN6sIrBEku/Zh0t0JD0bLeMcrXhDhqjcBmZ\nIK3+c/idMDB7J0WREJD4eiDjPJ6u8sAAo4+GM9M7i4oLZ/CV/xQ9PYCFV6QW\nSNW/4B/3JdB35abwo30CWcYxZ5IYhbuUwaxGR4wZq5LQEDwzrRfiBZBYhbTj\nB23E2QRDVzDQOowDY5aQpUkMFqz4gQ5Q3HIJpClpdqE5KbIK9poVmjkqxbbT\nmsvi5SXh1FExF+Jdhb8Eg9XBshB7c4cnSmRkHwwZv3RPN4F9vL9gb6QLXp3g\nYhxA\r\n=fd88\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC0I1/oWgk5K+e/SsNpNt6x6eLqmIbnjuhTj71oT4d+cAiEAv7X6GwqRy8K/hs5nT8/hGPaIOTBXkGdqApAEF6QiLgM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2457-beta_1532658581469_0.7700550171198728"},"_hasShrinkwrap":false},"6.0.2459":{"name":"meetup-web-components","version":"6.0.2459","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"463d13ac1264469d34c8667b9b61f7f8497c5093","_id":"meetup-web-components@6.0.2459","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-TCu26itIPc8WMNnGQXBx41Tf+TUHjYY/H18z0nvCwev4jYg4qr317Y4D4MOz5jTcQ3GJlk8Y1QF6BVdTXp0mxg==","shasum":"9c0ac0cbe98568f0cc5976bf240a6753b6946c74","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2459.tgz","fileCount":613,"unpackedSize":7738313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWoQ9CRA9TVsSAnZWagAA4nQP/2lIK/DibrYWWtZKw1jF\nEYWAGCANvXUb2Zfpz7oB4cN4+q++8t6bW7FEohzICMMEugZvW1c7/AQ7qKAg\npDiR2SEAbLbB+GyxaAo9asM5qK9+IuYft/dYyADoMNdhcHYIdzHBtWA6LDbQ\nLK33CSQ/+cog2+06blpvxdWySOGjDmWBpw3Sk7u+5J0BX6T0sH+ZDhg4sv3U\n6uVqbJ50z5eZBUOLX9GdjGiWhGpuKF37fRXwoaJbvvLy52CKEj/+Pba2kufd\nYsLbN+T3i7LsBW4HCLzjylnQD0igCjx7lUkGpLgyvZdkJr+lcTiIBJzS1m/B\nbeKsSUv7N7tWcJmrzdVP0o8aJHGX7OedRi7hCfAXJGafM6/6JJUfzZOd31Ur\nzgGlbUzox6cnzkG3qc+cML4Dd5pTs2fGZSAtpTthRuoxcgtUn4ie9oP4Tnc5\nVFoxNOse6CdgQOMxOgbcC5YiVIHGwRphxTsuA6j6LxfGIPBPnzBk3gY0Q+D0\n10AGCPdfn5mCQ09Jx79xw+Rrq5VWfKTgbe8C9ixhz2x0brTZn/S2kFQaRypr\ngKyCsLUTJqC6Hwi4Xm0wOkJIG7BsmwX6vXWR57soswFH31/SCAu8tDRiuctk\nfHzbqWdaOcBiCUpvx5jkyslZu2djLqX/V91oqLlAhJBnZ/BPXA+ZTM/3tPbW\nbA/E\r\n=1ESx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGqA8r0Ns9Yp/UR+f/1vCCdGWpiRdrNd5o+cIrCNIoBgIhAIvkeJvnQqCtsc9WeQIA7vJCrdbkwNIvrtVUt0J14+Wy"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2459_1532658749154_0.47238236476937656"},"_hasShrinkwrap":false},"6.0.2460":{"name":"meetup-web-components","version":"6.0.2460","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7b114ad31676672e4ffe8925a8ef4526744b592c","_id":"meetup-web-components@6.0.2460","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-yE3dN0wvDYxoDsaWCpCQYDIO+06HNZbQxuUgUSo0pcPTT6VnD2D3BE1LAlzkLwFp0y0xVzZRMpvOaoJB7JR9lQ==","shasum":"9b2c662e9271971a92c6d1e1deaf1cd6176911b8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2460.tgz","fileCount":613,"unpackedSize":7739827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWog8CRA9TVsSAnZWagAA1acP/1KjnbaPgFY+C3/7CB1S\ntiYpsfpr5UKPGn5zdKwqgfMFt0om10hPtB1bvKAn3BT/ByuFh5WHaCtVM0Qi\n0VDSiIFsbSqBotQO0Fy+1EsBqP6sDhm/PwEuGoXUrQBv99AATo5DLNRANXtJ\n5/eT9zE8VqyLQyjndGTL65Rv2HTi+W5SkwNfXgIgAEngw/AiE/8xT7vgiJ8I\nY0fZ7wgIvwePeyt7NA4v5QteNP9ome/ZR24i7wuGO0Y+ZZUXNF9q2f30mhY8\nxTK616pXCieG2gzED0OBIwZWODBl6XRz+3/5YwhHyTbdmd5cnxkD6a4YDrOR\n8nWTomgatDkCre/8sEZvx6Rj2wN5y6uoj1P1qKABnkNcAzCWp4rPZ/QQL+cf\ny/sQCt3bedyQMWrc85HVqXiXU6GCV/Iam6UAFzGqlitoCoajzge4cNLcteFm\n9aYNoz7uXT4ideonx1yoMuml483JLTBEy8zF8vzvUJSL9r2HHD7tK5IKCtnQ\nGr1Hgk35u+KXcvLRPvhsg9RcyPPIYDJirqmOy7WTQrhry67Fuf6XAAOjG31d\nVN67iKfrkSGLiv5xj+cvdsPCqeYWL+/pQ5YUEXB0bU4EqRLeXdzzuat87d0i\nZvwWsAcAXXfk1MEPiK4ZKcJ2jiDDVItdzia1XMFfFet87GV8BKjswJW4atoM\nWmqI\r\n=h4nQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOIi9pCqIs/02pdRe6HjrBNcm6zgW0240e8Zk2EAvzzQIgWb+8nwswxdYqQ2bSDlkmnufKUelqhpVj7XActVOsrjs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2460_1532659772551_0.12257826442993736"},"_hasShrinkwrap":false},"6.0.2462":{"name":"meetup-web-components","version":"6.0.2462","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e4ffe9b604899c70bf3a2c0a2881211b98b43273","_id":"meetup-web-components@6.0.2462","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sAL2p7u1NcqOgj/zkfQ6jELV8BbNqSmysk5PRh0c7yzOAxTLgTJ1scVBFj6BAbtPFleyXPTofmForh1czmF08Q==","shasum":"af402a16c3e7fe100487f64c1cbc1986cc3b3d1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2462.tgz","fileCount":613,"unpackedSize":7739827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWyKDCRA9TVsSAnZWagAASrYP/A3MiQTXfL6E4D2H7edy\nWlMSxram+eZDpTsuGUurNXr5QuyO0Ts+YCjdu2x14IZe6D2++qZ5/TBIQmxG\nSJsJPTyHezjVyCK9qbPxryg8iXOT8r3DPdrLSDNPFnne/dKvev31kY3FCn0a\nHuUDtFCub5Kqyl1L9Pdt7KFqtqyIizKBuAXJ0Je+aBbzOP+dvyVEwrYyIjVg\nwKgSLLpyanAZyTTeMIKtx1JF+v16mRN1VxQBgBxBOBz4FYGWhKFKdocJikYt\naFhVV1SeJ4z2TKibNOPKFO7abxtkTak2jYR+FJTAcVbDCrFmo84ax9hZ7gkO\n8WyR6JuaWLii30/sKwUKVMn26UN1oUKruDRacDKZbmNNVnO+ezJOZmDhH2wC\n+lL/lLAF8hz/7R3nIb6FGql0cMi8+9oN5U95nTzX+OkaI2tnpCRavWclUMr+\nX70UMta2di1EcPAuhXdHrgpJFW61lR29+BAW1N40VUKHS2xXGDX7eUb9QkXh\n2+NyYAikRVSjumk2WD6HiBjdDrup5kfzn9jXSKwqQAF1MmmvZXeAG6quGw4c\nA7BKfVI4A1Zov8NCNRXAZzGftTfOYFUdHtqKCYcC/UHbfr/x0h0+DIsxTEPO\nldWfM0zJVeZwyu5MEE4DlQxacucBDzst6MH2N75LwThC2+VmPRBPFQmXo16e\n8ZBc\r\n=HWlG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCghj2QYTmmzfX2barPRH1y824mz9VQzPgxi5sFVc9dJwIgc3T/nEwClo/De3APr8Et6Rb/5u3aX0AWu+SXki9IbK4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2462_1532699267210_0.8631930364146496"},"_hasShrinkwrap":false},"6.0.2464-beta":{"name":"meetup-web-components","version":"6.0.2464-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"dc9d618fe70f26185a7ce1830ad42bbd324611fa","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2464-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-oT2c5juF4yX6PXXovqRfNk08EDVyn4aTFNtDrprBCdxr0he7XPLbkpMNflzbwWm39GLwwCaaZ3s4k2KwlSK9LQ==","shasum":"2ead8547ae85efe54634093168a184420be26ccd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2464-beta.tgz","fileCount":613,"unpackedSize":7738433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWyPkCRA9TVsSAnZWagAAwqoP+gOU5jQ14PG0gQw9o/+t\npNEV7T65WPW2T2L2MP7+XooBg9/ufOcv8HmKtgyGO8h7zgLWzKIy//gZiKd4\nHvPYw5gKoUeu2G37iZplhuY5i9hf2CVYLV+FyC7wPsOaXjd8Gk12Ziq5ygxk\nY6JHILVspgaEKPByG/b/GrRar+0LhYNBG2lopvoOfYwgNdDy2VAMHFivWAjS\nK9atP7XhOm1nMvzrwjC/fcCsLWtqo0jUM/Te5VHJ0D47hgoUmrJz580YyqjG\nBaiFd1DfRZ0j+nGPjz2MSmeilO3X7jLf3ba/Q5hIhgrKbA0A6Ht0gIIjtfg7\ns/RVdSoXUhrnNonv7SWQ8jwPfSPnN9Ujq0aHJhJWMP6hVCIWgRb6ThiSQLwS\n6rH84seMR510awg/s0xnVcoUHVd9rAnhmdV81q6Sg6fVZWV897sCBFtLAXrR\nA1J3mfk4AwAHgt2NHYRU2ZTswHYNjjloJzwh3cShj1+zs4fhvpDrI7LGT2ax\nxrj+K847PnRfdQDYRMy1OiLyL4IWAhdWwL5WiP8OI+mWuCloUKiehTZnbkUU\nViOhFc8dLp5ib+cR6ZHWGGL4fzwJ/8zvw0khyIOZTsqdxc5V0gBixglZKz3E\nKrHwb727fydcqMGkFPRbUwb3ye1b9Aq8ikjxDWWvqhWNZLt0WuHhzA2l0+6u\ndzx3\r\n=K93j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDevi5hWhW7bwGZ7G3aV9705C6/E0Q1p8KKaxnFPgP3MAIgPX0OWHTufb5/DoKg/vFrP2mSpZdKFyy/blNJSD2+EMc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2464-beta_1532699620632_0.14960986122545794"},"_hasShrinkwrap":false},"6.0.2465":{"name":"meetup-web-components","version":"6.0.2465","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"fe40ab002f9ad41551d734f3311ebbaba41bd6ef","_id":"meetup-web-components@6.0.2465","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pj9Rk0voRcxoTOZPYK3xJ8Od+0iMM6AQASuQ3XXxxMv5VUuUR7SUgNgnUSTgE8XSufe+Ys2XMkhmNB1i75CJkg==","shasum":"56bbde25647ae264ae3171fc305c0b21befe4401","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2465.tgz","fileCount":613,"unpackedSize":7738428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWyTpCRA9TVsSAnZWagAAFOsP/AwCu17UqLsK0O1Sh5lv\nm1wOQ7bFi2nmLlFdLgamEfmPzJxF56MXed4bHHTfWf9BuyBKU4sBgQ/l1iG2\nq0haL+RWZIn0Vz+5H5XDexlZu+HilJmjFR7KEiobeMqwwYOq6cELhCCOyGcU\nu0T6fo6UMmanZ8VDAMupgSfH2q6TUrxVrYVstWkbJ08LZEM9aEG9rvY9Z+fT\nfBM0opVn06drDBygZiv1QXbw+XyZZRbz2xHFP9G7WMeuuBGjooHFvLFtHgTJ\n/OUV8o3P2Ha2ndrCjHaRXSxhGd++pQqkjpSVV6CRBlnibZ2Wr9U/vq4fEL/4\n89gGTI+Qg44T+eB1vuuKD7dGfHZPI6nCdyUUE0+/QbI72qguC1YhwOWThMSk\nQLV/PLrNUaf3/+Ze46O0Gj2Li6uv6jA3yD533j7fPkY9XIHIjLNB2L7amVJm\n/DIv35Y1pV0hICXTjlZoB5m8XWjPWM1aKo+eWySPPFfSGVtSgcoahaff1IzW\nzyZ6JgBCUDsCjlGG9XINw7Y56WxXDBCwAJBbjzyVOqlkT8M0uHi3fvBwQstJ\njjvwA9gfJVdb5K78TNv7y8jZ6MYxMrx3nw5IjCvQDXM25Jk6haCf8O5klurF\nTJ76qDamVLAPWRE3av3Ob6kZKI8LXWr8UToLUq7U+Go7r9MHbZJOrjnzOuYL\ngSTD\r\n=Eakb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmbTdW155+0IQ5/BHHPOOnL1Yt1g9Zb57goPgKs3j6gAiBBD0t5ikxBOXQdV36Y9P5a6+jt/TPbwvKsqGQ6j6DPQQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2465_1532699881394_0.3445191105905181"},"_hasShrinkwrap":false},"6.0.2466-beta":{"name":"meetup-web-components","version":"6.0.2466-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"468b5e7c4a6554975aee0179ddb576ca78b1fe07","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2466-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-owQjNNQky6aZYYZf3hZpcpOoGq0WvyANQFAvOMrWXZjgLLx7IF4nuwCCj8GUYVim8eXZCN3MNJAaMtbZpcQePQ==","shasum":"cf880f45c918820b46eed0d614cc81d196660783","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2466-beta.tgz","fileCount":613,"unpackedSize":7737675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWz+BCRA9TVsSAnZWagAAU00QAJQtgpmCPFsByG0HKVCR\nNN36JbLGlreggoHtg5W3PX6wAy67gAQOYJ1Mv+9iB0bCG0Fp8wEvyOPE4ksg\ntkHsl6pkkR2Ay/FHeFmYOF3U3Ji5wJT75urE5hyG73Cx94syiq/YypyiPWoq\nsAkKGwbT7/O9+ZJtnYdkSQtXKk1GLOrzCQw/hXVL0u8r+nNbrYUV5SeOPU2r\nyLZUCLG7syMl9epio7G2kRaiG5QV0PSC6gyGSogOlsapWY65oV3xgFs1yEnG\n09aM30KS+v9YlYWlQ+r6cg7p3KANeiYORtfSRjmGJPzUX7925E1XPq3/cqtP\nRQzWAspV3uHcy6x5KWlW/y0elZtbsopalZHiPQb9Hf7SY4/D/9TF9PYzKAwJ\nin/x1PqeXmKNOLsfuhcoIR9RLLSY3MTqGUAtHnCV8KX1NDHRJM6cWscfqbeJ\nJi7PTjMAtudZUdX16XUBEsXnw+icS0qnOCjGTMjHV/L5KQTgTBpOLSivng4c\nxQU6jddp+2nt2e2ndBIpSBQNdaRuie/k5cT5YtUaRjaNOQxUcEL+gec1O2eE\njckuVZ69TijIH+byU6j5uv6TfO8UhGcsf9iR2S3HJ9/RmOkPm4tzRWlONyMV\nLjR5Ws5EMEh3cDbmzWbEndkOnpZ0vReVsIc78FyrF8ZlMLdqiuwKyfijv9VH\ntzab\r\n=gPwW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFT7zV6Jfsk722Q9wlOauafNuv+AjAV3B7sKydonj0ViAiEAp8+qSFf0uerwWlUdXSuJpMJFlJHEaTRJKh8ifS+vqgE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2466-beta_1532706688849_0.84203150591261"},"_hasShrinkwrap":false},"6.0.2467-beta":{"name":"meetup-web-components","version":"6.0.2467-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"4f4119240442a6b67dabb7b21db8700582c1116d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2467-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+XDZ1OCZSPOGyjmXQHq25Ll446hQ5pzCKSNfogyLGNYIif0kZQcBDw0LFRENZ6wV+j75Widxj240iTGKZjieXA==","shasum":"af4f23cae8b8e66540b98ab51ddad5fa1ca4bb49","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2467-beta.tgz","fileCount":613,"unpackedSize":7738646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW0u+CRA9TVsSAnZWagAARlsP/RgPDREJn0/N9ZCfi0nE\nDQ0hhfMSPHEgnIuTf2K1rvLcXAXS8yGxSQpeX8fOnI/zivo8Qp8IVy/bra97\np7pmd56zqh0AryLbLMMiWv36ndoyszodX20kFbIG5WiXci/L3uy11+tx3Gs4\nBBn86NkoGeJH/DMANse4osXsYBbmEX8C50YRWKbW7W8sphxUZqqOGwadv0GZ\n8kpQ/lOYYk90Qq2qJ9eYN0Jl5OFLgRik2o81g54kx083IIXEQIUB5OUF+3Cq\nz6bfmz03C5Lu/WmuvsW8zRtmjtq6x00fuZuJtSAsIuQRjq+Fy8vl1Yhx9TPb\n/b+hqxAzrPJnWRfxuseXmVohwRfsZ5yznJ8ZmwcM0Veun4ajrlmMzRIApTlR\nmudJG8Omk+u26fLYw5vRw0nkeJKOEryEot6zcI2OL1PooPmQO1ps+ufFkwqr\ncFZqZZAfNbSvvBo7kyVI/dvVbAueyGn01O3vjHQflHhH6/D6p5h/tmNsmGaV\nKN2e2xP47lmE+w/OdZn2HU5B0DYQbvbCVYUQ6HZhhk4ujuJcS3+SZWnZ3XAI\n3EZdSlD7Zqbo165rETRVkneyeEaXhPuyTrjr+/L/9dFAy2Yt0S9K08xdIbgh\n4Wv8/4ZnPwbaesAjq4jhje9K+StVsVz6BXycQP8GjoT0Sm9h+2/SkhwY6zDs\na2D0\r\n=IO/E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTeFneHCQQinNxVUx2bqhbSzwY3bmVOat4hgZJt8xEowIhAN8W5kR6Lvys6I1kpm0MYw7zyIsHfMn36tMCg/N54w6x"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2467-beta_1532709821907_0.9961066247717583"},"_hasShrinkwrap":false},"6.0.2468":{"name":"meetup-web-components","version":"6.0.2468","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"9cff08bb8ba67c9d66a8eaea08fb1c38fcd4025c","_id":"meetup-web-components@6.0.2468","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mgsJQZQMbdThxNAH+0Yz/C8o9NH7cqdgPbZpCbAuSSM3uPDBlt/A82BezHew02Y5WDJjWbON+q6vm07OASXm2A==","shasum":"b2b88d8f4f57ea19bb4eb1d40ee2987b1f29ec3d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2468.tgz","fileCount":613,"unpackedSize":7738641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW0/5CRA9TVsSAnZWagAA90oP/A2DhNAF9KkC5stwSST6\n1/GI3+sVIE5mWIKCcXnkfFNg/JlKMTlfUm62qSwjd+nXuNtVtBkfGYy4r9ze\nJUqYKm9RBUQqFnORu4lG0gcUSDndkfWU6acdh2wDqaC9pFqW8ijGMOE6sWFu\n1zomEScFcIdOpdcTUd+elDWk2Rx38uzSHoh3gWgogxfmm+CgokJzG7TGCdUe\nbBm1RXaQbHaiH6BDSNnPoVQyjLnKZLV6cPqpoBSAN3OKfnD+a3+p+WsLaft+\np0+6cDhPVW35XK/Ka4LZr308aEcSraM6EE3xQPxu0rWyxtE6oC572PgrNiOD\nIHXGaNS6cKBG3SD1elU2sLOIfs4tD1bVdWRleeJ243q6qMi2LK+dbaRsXLk5\nsDWKCorXtrjpwCivvvS0ojzUaiJEPePIg3hnmGJDN8UCXOP3vqZNRpcNLHMx\nOHADSGIYDJQGHuN5+nDMcEakabhRwPs+ob1jaC2mIQjAUocHTkKZfVYorwsm\nFGy2okclp0f2QSoEifawGT41BWL2OWd+ObZSAYBS/+2REOIsDUgYiSi3pAiT\nHuuDo9cVNQSY3bcx0EO4bOh3n2Y9mzQpN2S+HgNa1hn+wwymQ5R1MrpAUVqA\nqoWcI7EC5Kz+Rib2fJYHucqb3wNNdc0i3qme9nYSycOApJP7kkAT2HWkPJoh\nY1vj\r\n=3wgw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpDryIOz4ECRz0Ie7fv9cHqZG9mPQN6c+nlUDHu+oCEAIhAPmb1okStyZi+HI2QYVQJpOFcqHaN42rZP2stLDDwXTe"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2468_1532710905605_0.910579994885111"},"_hasShrinkwrap":false},"6.0.2470":{"name":"meetup-web-components","version":"6.0.2470","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7d61fd02bd67a9f2f7cf85aa7b0f6496de9aaaaa","_id":"meetup-web-components@6.0.2470","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GZ7tyml2KadEfeSM35BAuLJvpqIWfYcBS5xLltfpWTCuOGbrlyorkP6ft0M8xQdnVApJqJ/FwjgXItNhRu2EUQ==","shasum":"ec9b457ea16a79db0c136b7e0c9e2f74bbcd1766","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2470.tgz","fileCount":613,"unpackedSize":7735505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbY5rDCRA9TVsSAnZWagAAiFgQAJh5kDp8HmtOooAmdJ21\nDcOoZwOFZ46f01ma0L7GODYcGFu05nW23s0pDRgTts8g28rt0bMoLZjIjDCN\ndhkUdk6scpHC1AYnLAk/YWEKaBTDyq0VVieaS8SUhzbegewJATPWNzZyETC6\nzUuKSIysmB2aXh/Bb39vqL/CF8hwuL7UNIN4vIE7sEDiKSesLA4Z/LefUARZ\nZR2tXs9Ex5SIFcF9wvQJIGvgoNNGqyPy6otEiFBA+TuLciRmPkj+OR1AgiU7\nlL8v6XyqT0mFX+wPfW4Pz8UVnlXK9pgGAMHG7n29TC2M8X/1tUyzO7psOT+U\nN35nmirpOVMpfRFdH0wpTmQlpQomhzP/Pd4P5epsX87wgf8DhUfVdGuZWukr\nH8LYPdiDsnGQNQBU5vea/RtXgz4GjQ7i2I2maNRxmgMailehBxmOHHCanFUT\nabhCjKByQebTG6S5tjsjvlyKhxcCyq15Rgxn8Gk4KPE0RV/+uRR1FnaDsIhG\nMMq21MBVoJenZ7Mu9MiFssZgg12JnoTJnwZUP6pKzNU9uQkSXWNHuQcvLraS\nnnffnzTxNeB/K/LNQUqH3vS2VE9lJJzz6pKpPjPBHek4MDml5RIPAczxGmEJ\nUVnPDNwjd42GtTHlRRnmKC/SXQscCMzi8/RCKhzIuJQtiZkenEeGO3SaWXGN\nIt44\r\n=pMWx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC/sae5AvfBx01uKJDoIlgF6wvbbGkbm1VcnNfVP4MVYAiEAitC1VcP4408140GSfa08cjFBRgn1TkkYYB3xYPmfxFk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2470_1533254338734_0.7816125956507547"},"_hasShrinkwrap":false},"6.0.2471-beta":{"name":"meetup-web-components","version":"6.0.2471-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"12f3ccee07e48663e6a197dfb8accf8f03a240c9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2471-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XOeLEvrX49DlaQ08088clYMrNBQTer5usHF4S+lfsy0hxsBiBEXyNtB2I00eOE1NPDWctGCVTQawVb4GMvhQFA==","shasum":"c280bb107f2240d1f929b70db092858d15d97596","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2471-beta.tgz","fileCount":613,"unpackedSize":7735658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZKuYCRA9TVsSAnZWagAAyJcP/1lKbS9uWJTqxLSqEcib\nNpM9qxNlz9nGgW0LHbDPQLa94zzrdwK+NjJyRKXPE+O9UUx6537+xGSHpajq\nZujnpK6fYviuHfe16B8HxTLOa0aM2MJmE2/xKXAA/GIE985aeOiabiKiFg/0\n49av7azq+n2oPqPNLmFLCShazRHX83Du/FWE2od67ODxcLAuRtwWiW+ltYia\nzJ5Qn2VDv7FOt9xd3Vubocxc9cHyy+NrrnKDmi18hP2DPZABvqD75uxvo7Va\ngyNDmFy6ziMdWPBH5vKO6LUUF91V+3Fw6TUXL6NvM7EkOQL+BMN7M0/Noj4P\ncV5qxZjE6Of/RnSxstjg8J6x7AYGXvhmXjAUT/3VT71IYdTk+YCQbG8LRykM\nesHJqgAXgf5pPqqo6ZglYFGu8Wh5eeAO0BTVl2jyzu21WIKMSsmRxQB3qzs1\nivzNC7qDiUg0XWbVAfp7rYRfHLiwbtAU0YdYomzxzF5Vr61WgSeAQkCbT1Kx\nsOXxYM/k/WGdWMN0udugwP79h0UyZt4DN1s7sjWuAvkzKvwKgH1gBUgtoSFx\nRaicSVAniylzdwOnkUfTbRgsWQDaUIEOBshcXkoqsBAinUk2ESgrM936Zugf\nHRAfsunyGGlWjPtja39PuzjNopwQJSbvq4P48VmSUBVlYX20PwIG3vqZOUOd\niQVX\r\n=5Q1x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbkhTHHgcH9uxbpzdynoTcKYban4imfQunoSRovab5ZAIgYkulbPbIvGgaLfHJWbejTDgVtyn5PT61alUxA95+KSI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2471-beta_1533324182815_0.20405843016050018"},"_hasShrinkwrap":false},"6.0.2472-beta":{"name":"meetup-web-components","version":"6.0.2472-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"f3722a59ea1b9c5009bf70aa2d72b2b07539f4b1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2472-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qyXpvIyPFUkpSiAqdnm3O9UWaSVJYQKR2UQa9MwI3JazyibO3nHQ7HjvjjhgGtSZwn1J9j7AnUoOVWIHBkdjSQ==","shasum":"1a938b4322336bacebebd85705108f0dbae2658a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2472-beta.tgz","fileCount":613,"unpackedSize":7735832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZK8UCRA9TVsSAnZWagAAozwP+gOrdUgTIA57S0tlzgK0\n/07X+vM+A5y6RdeBg4EJl3MPdtwU+kAgu3/i7Kf9deUpe+obJZtMv5ZlMT8e\nj8H/ZIAGkvOJ5fArqstKyO+J8IMiK7fctRBrXdHqPmG5gBxrzVOed0h3Vbbc\nqimiNu9/W3rV3zajc2ynB2YXWP5erjq1vP4rhVpq9b6uaGF1nUoHZpRP9tU+\nuxbPQ/nngYmdhKR5p9d76umCZ99qDyNEe6uNK8YdtypFO+rAypxIg/iEMO5G\nzhCgliT1z0ILf7jpsAIhXlY+C+R7bzXuyrq+Sk9yOJN52KAs7dqELoFIMIXg\nJqFBeiQeZfDXhboBJgYbn7Xi9jm9ccQX5rnzi29V7Bv/P5/sFt0JUiMRuvPd\niqYxwqRIAO9lGq6mMBQ8+hlb5HurbvcGzygVKO+yLeG3I6L0VbZ6qEfdLbeG\nO1WGlPJr1TQqMuK4nekPYjFWL+baoSIAMWTSLK0tJZLx2ykZI3W5NnyHYaIr\nMmtBnueKJRm+A/+uyEb3kT4lMkw/ZGlMAM4ABt9BydX2clSL1UHSysdAa0X4\n5AvnfzXwsoeqdzyB9y7ugbCPlSh+fH4EIACCYNdG7pBx7reX8VkETGrQOYnO\n8JANTIMWTA3JBvHd9IPF27BDGyk1brc9W5PtGCt8CKxT5tUgD4KY6Q2ChyMJ\nhVSl\r\n=b6t2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfWpaQoVVXYWWygxFWuXXCcMPEiUmwToskXqN539129AiEAo9wb1Kc3WOSkN56+BLQmf/xj1O0DvgnlwTyctYQkfQI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2472-beta_1533325074797_0.020827645286658925"},"_hasShrinkwrap":false},"6.0.2473":{"name":"meetup-web-components","version":"6.0.2473","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2ac0a22da46c3b7a234b6c6609234d92e1ba9b6f","_id":"meetup-web-components@6.0.2473","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2G8qUZ4yhKq0PyoMipV+raLazpRtzKQ9q/vH6dmayGFeVhclA7EUmMgkg1y8pwzLqT9GywBKjSN7b6p7QxujpA==","shasum":"941dadb20e5dc8c595fd0b49f8328f54a9877bee","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2473.tgz","fileCount":613,"unpackedSize":7735827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZMrWCRA9TVsSAnZWagAAN6cQAJxjPcb8cL+Scqqqho9k\n0U2ryp2Y9mzgP16n/bkqN5faxvAYRk8NR47LCWm/XcBFZblwxJCYn1YSVy+R\nc00Bn495VIi8h/rBNPw1h89rnxG0GfsuZiLdN/2s3n4C+bsqWnVldXoEZm4W\n9L0FohbAUzNzSMzlGQhFzaROIyE+g1mchrkuwLobeyFMXQoXtpKeUCUzavDF\n1ZMkJoiwg/pZ292Py5KRELPW0rdA31k25Ub+1oeocgwBcQnhwZ2NY1EIvbzM\n7KSR1zP9KPdFhyt/+ZPnNhWSIADXNEVbH3qShOn32nGVsFPBt2mDbbxb2lMs\ntKuFMYbDrcpb5wer08bVpiNvwMfDAQqq9nE1RH3IgZi6K/pX2FAHy9Gmjkrv\nMGLNuO88WWgGWdQF/1jPyTYaEspOJWvLaWaAF/F2KYDkm3QpJf9FCuHvlxx9\nT7zT5WH5Jw4hLfTXIgXmXjOE+CyYp2LdELP8H28n1uqs+THhMd7VmkyP5mnI\nNOVUv7tRYjQ7zM5pXjFSnUVSFj/N9yaTMsVCRtMxht4vHKuRgb6PjW2qLAiH\nqyi5V5Rt4qy5poaXFHjdrML8ZVFUdAl1iHcXfJe4QhONIbjKVj8WaU3l5UqE\nPlDQ5PjlIm6N2RjvL8OauOUM3JeRO704chnBqyjBKeAPxWdxk7pARe2cwMyA\nJs7V\r\n=aYCf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1AdLjKfP81qIIQk4VMwqjQ/5BkUF85CZGdbLIc6SdsAiBeyHCXvLvroSphe6M0p3SIoG1U6T6M+MDeFutT+ua0ug=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2473_1533332181302_0.7266690794665489"},"_hasShrinkwrap":false},"6.0.2474-beta":{"name":"meetup-web-components","version":"6.0.2474-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"983b99226152202af3ab63f4d85f1e2ba91f5afb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2474-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-TYD6s9V/OE1RSShhyyFet0912I1t6lOoo7us5ZLda3D4IlkPp6FQR/5C0lf+ZDAaHMIJ8tosNJMs2JqUvWTTgg==","shasum":"ac964fcb334ec65ff9a4e682530d5b401e0a3f31","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2474-beta.tgz","fileCount":613,"unpackedSize":7740307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbacvgCRA9TVsSAnZWagAAk/0P+QEO5kkjVBmP+fgfJGcm\npYtVeLFEiEs6ANjFQNZvTa+FKD9CtlRuzsIENkwwEPbkdB0Wha27PsXnqZEF\nJQmrjhCCfpkkSoEXAV/f5NAr5/H2/ppe4Y6lJkEHihUl5HVwlU61fgl9UDY6\nZjuV5wLIH7KNo4Xx3LDBWzSMSgHbBU8606hN92B3z8D5LwdRmtBPyDVcAgKU\nlCv1WUKgPWADcGbZd0giMgVSkcgfEvDE/BLabWW6KA+A+F2nYzrILc/bpS/O\nlRUE8/SS4W4wK5gJgEsY9DSnCSMdiIJN9BKV+WduHZ5PkRVXpf4S9CJ+WHgZ\nGYev0Ez2Bbt/eC2bblwNksozXXYu2xTcEvjewLIHEkgcMU5S8V5N58z2X/29\n7TuzafFUAtSechm6i2rdpF30mrtTz5jDgt4vded+jSx045JczfeBKcYPP29b\nfXG9hr2Ma15VEX3suYM7exAX5t5IQ4uh+mOxVmzO7AnMT2JnbbMC8Doj9lWC\nxb28trOi6wEoaPSfa+IA8OWNW4yb+zC5ERaD9kZxdKjLWBVShDKNNgSMMnx1\n4e05itbCizjtTcygXSM+aUNBiOw/Za1L06eZHp4osCOZzFKNpp2v+Ewx921J\nzwG3RpPhsuHa01nqMHoI4Vc/KemmEBH+iyeAMWsIc+cAk3XS9zCjcodYZZjT\nRxjI\r\n=NXMZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYxAfY80KdxtcqfmkE4o3TsIiPsUtXWBp5ZDL6E1BROAiEAuuOvhpeNEvuW2C/O9PFR72W7ZwtlzAUifA9Rz0+ctvg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2474-beta_1533660128089_0.7318179565014806"},"_hasShrinkwrap":false},"6.0.2475":{"name":"meetup-web-components","version":"6.0.2475","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"947526de32987defe0c5a01216028d3ccebd08ad","_id":"meetup-web-components@6.0.2475","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bwjWqJ+wtO1d3PR/cKqSwV3OuSwE20Bpb5VuNR9f+bGeZhNEjZHY8N24SCs/6+bvTt4n1PoOTVgTKHDTQMM4Dg==","shasum":"098a4294910b47c27d5733fffe9e097f6aabf19c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2475.tgz","fileCount":613,"unpackedSize":7740302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbadGaCRA9TVsSAnZWagAArO4P/33v7lChfahbOYR8q4GH\nZdqokHTJsR5V2qRfjyn5iLf37qFE/L/+OUwbi4AMPL1/yY8cQAwVvnKoopgI\nyFDmXEMcmY490xt9e+pv95b0WiOyz5q4z6NOtbm3jBPy8QMGjYoxnEmi3RL9\nJejIh/ViYiQWm+I3S7xeLak+Vx5CdVf5aEEXbrnB30IXhHZdDHCWDt3sFQR+\nNJcsZg2lVS9WhX69LKEnNojX8dNq0KHi64lg3nxz7gKIuXDzcu90I6AAycaK\n0if3UOYjpXjGjkdlt5ayK+8uOi3lR5Bn0svlEMBQH5NW3/HR0hU0TSfthzVS\nH/D4OXOgKS8rAgq9KUzAbnFQgmnw/myYDJpCdxhCRM/G/1kZtwJd99XYNl+D\nv/PkZkxi21zDVk83dCUAnrutMd3ko29BbSd8DFHLEUJjSTErQZmY4RqOiP/K\nlof0ManyMKNZMZb5c17ZuTEOpQj7HM8AvPt9X48+P8wo9Zlm58UgzHY0GXpP\ns2YSlV9Wkmg6JeVkfTBjizl1wFiI3zHIGuTsJbStgPBWxh7hVj/Zr0CrVAK0\nDVotks0049v4kURDBGdwsT3VnoXwT35nyF0Uwk3XgRjzuiRITWavZtDRNcfF\neMfDYpw7ztsCdKOQMOLNsXkUKNUut0lAnZ00O9+CJslnOcSenC9CJazLf56B\n6qZ7\r\n=N91p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+O/AU8crsRiFAkUL+8iHu1sYQtdWIwrZ/LUDW7l6Q2wIgTDhbBUSZnSP5lgEMxrEdKUiRV0ZWU8pDJKg4et3Tud4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2475_1533661593883_0.5595333092990211"},"_hasShrinkwrap":false},"6.0.2476-beta":{"name":"meetup-web-components","version":"6.0.2476-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e7238f71d9622a067f4e09ba6063ba6ccdb8e8c2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2476-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-z9dBCOR8+917GeCuARD63u4apc0sqykcs1+KQUsW6IXhghkMQHRxTTaKaFWNkYj8ASysa0b43kGDRO9TU4L/Kg==","shasum":"61658b5db5154f6e07662a2ed3c21aa22b9a7113","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2476-beta.tgz","fileCount":613,"unpackedSize":7740361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaxXJCRA9TVsSAnZWagAAoEUP/0RJ9hpORKvtJ4bIAAk0\n6COtZKB5uWNb4Vym3BGJYrFuSJ+pxoZAa9aGENCamaqe+IyzTOzWZisr17fd\n1K4+C+6/N8slVe4VPGXXIRROOXvB8aj0q8GbD5OhzEV12ER3WlW7NfNnZeyL\nzmHznJkMpu91iTPuIwrIhTnD2ODnz7DALB9lO3LL1RyK/pvK35ZGLrRhfZo0\nN+GWWfLOX6g5+5r+VrvpIOhdcCWdTsWohX01ET6DJqKhqBBTxf+bayXG6pvd\nxF78kENGECJv3NswIBpPgvemjVNqWn+n+riXe56JfF4t/Xz2Usd7+aRuQJ4f\nC9A/fbHN7nVuuJvU0cq7+qyTSdppJGqF36j78Co6CVqqt3T5Nyr4TEInN2wU\n9mMuKhxMBu23drLgJM5GOFV6Av53npAbdRKCSjVbYhWMGCuEejw54wxhtRHO\nAdLsoN5QCDZ0NPg1KSpHAuLJz9RYlQirfHMQ+CR/pVaHqvBtBsl5b7hfgUNC\naPrB1dzeWLVHfQjT5hlqcl4Z76s3B3yBbL0SfIiBmfn6Hok04vbtueWoudy7\nSQ+YLFoNCh/M4Nk9gYlaaiAxBVYLRoQNg0AoLk/1PYb8u5mlG3BMvMGQFb5E\n6X+9dWkdHQFvIrW1a1Lr4P5N2kiDgGFo8KW0HlUxlQP6ZeVh37fsHxyDzriS\nPC/x\r\n=wpe0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEHAqkBEJrMIRbRZr8lxEnmmgb3PyzBXtCnzlRzpIO0VAiAK8QDs230s9/2zK/kNoxDXfbuomdRMBhFje92jzpTEYA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2476-beta_1533744585475_0.13400710294437923"},"_hasShrinkwrap":false},"6.0.2477":{"name":"meetup-web-components","version":"6.0.2477","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"0b7167f00c435c8bf1c9ef0c23a56bfd6fa4f15e","_id":"meetup-web-components@6.0.2477","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-QkuUVIHvJVEgcXtdjs5vCP4kv47bLEPlPg6iosIlrpjcDpQFFdTcSQu96FbUC8Hy2QLenU6m9Ug7ozzzM5uPrg==","shasum":"7cf909236629a92f2149681d65e95af5bc9c817d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2477.tgz","fileCount":613,"unpackedSize":7740356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbazg3CRA9TVsSAnZWagAA2dUQAJZFFHawzNrHLdRxrz74\nR4cu/+lb5BcRoRCxN3hw9nBlUKZI8SpHznAowK2vJVRBGtb83fA7Or8skxX4\nhSmSScfTE3+9wYJCxc0I//lj0ahg67tFrcWlfsdokAVm/ibzd0TGHwauWc3b\nEl5m2ZaqFyFvpyAqsKBwX1iKDFduAnMQBQ0Y2AIEQIZkJwg2MXONT3sQXyZx\n5zSdb8Ia/kW02jxotWjW3nn5OpAP/4pecbZtUCt3lQOUa6K9TheCfjmaV3CZ\ntvmaEPqdhDXhr7aFl6Slysz/L0rcTC/FGryVaQta7P9ym7bB2K5HVBuKh/Hd\n8iL+azcVMJRsIEXq0k2M6TJ3KiFFLzrLGPQQ3u/MvywpUXzqSxhf1MERTKIB\nUXJHjzushIqKDZGtF90iTJnVpieNrAUs8aTFnyjpmLyZJ+XOvZ1BUuk4g1OH\n6S/a9xY+tSjFzdrFWEDWK8Sz6Lk8QXVyxsCthPM5618xqnKRavwSc4G0tglr\nvfCs92WjzP4tj5/wgrqfp9ZrwkXJBqHIauXoDg77mUZyuFucghkqBJlGSlDb\nXyo98GFIhm/WtFZACMyeeKhwPWODkFuzST/NkFOMzvLVR8YFiRJlVsHF4I2o\na4poh73/nokG9CGxBF9nS0f0TrbS07rATYRy7kSIxvXTwzA1E7s9VGXCUUub\n8/Cy\r\n=LEBH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzNrZ+9Ieb4DgxWInIWhG9Osqz8cZwvblHJHQCZgA+iQIhAPnB5BbFVkp4LznuTLLCqDb/qgRn+TN/DPVmzMDe+RKd"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2477_1533753398740_0.2582627689218022"},"_hasShrinkwrap":false},"6.0.2478-beta":{"name":"meetup-web-components","version":"6.0.2478-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2b2da2a8bf4851dd3fba81f7b8fc68c2ee70a61c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2478-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CweZGpwrcKEIk7WOIWBml9nq/TWWb6Ex2oJeNJBeCnTTbT5cFG6KBwoPwIeR9KpQOelDGENnePZFxkh6klAynw==","shasum":"60ead19a65303365425880eabe81f1280b40c00b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2478-beta.tgz","fileCount":613,"unpackedSize":7741453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJba+1DCRA9TVsSAnZWagAArrMP/0HbbYvk0z49jkuFs/7d\nK9pzZ4qXs13OZ24Hl1xy3B2kHRIk+QeAZ7VG8fuNhgwVqFgjj4PW23KJyYyI\nlPYu7Df6CwshlDdlvCF4u6Vt1ozJrMbf8yW8TkgP8s9vnycUQTwSOQZx85CU\njnOkuOKqfzHSpdHlChTLGs67VL0r4F9zB3dnX1aaIaI/xayFWdIlXJMTKeg5\nveGWC3Fv+w+4KYieheplphj3rC1CvJzWHPLOVvYy98aGl2vSJ8BRTEjBatAo\nrMfnhR+vYjD/n710xd8QHPYBxg9AaUsPiFl+n/IVnsyMJjl9xNOr8TDzsK3/\nmuyTK81rqByVd023A2ojLb7zwtsLeZtF+5PZcZfMGwrOc4j/l5Zn7CuIrMoA\nKZD5d6jrWueHFTH/0081kkoxwHu6SzyLdI1//Sg84Nu+uk0TNd8UlqzmpqEN\nsuReCewlMU/zJjla7kf+Muik8hLE0u7JYbopYyF7Scca6KGV58SwZKcmYHQt\n7Y28KThPUHwJoACHAX4xTHnCmxrxZivoJXLH3uzBL7nJAPmr4LYMjQBnKdpM\nEa+dUSkr6GfWP8bpOskee76fKWY9pevPh2TAKY4Y6zaNrNy6xclLHawgT9bw\nA8X159ku7sZMm8HqBv1huNIEH90B77Y95RCQ69lX09SECW8FEF4wk8qmrIOU\ni0p1\r\n=PCPu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWFkvH2p0csAP7oDL0n8xOXiex9pRbj8BtM9zWUI8hlAiEAyireFbv1cryf3JnVPBvVucY0N769IRdatl2y41A6gQc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2478-beta_1533799746427_0.6857193957481771"},"_hasShrinkwrap":false},"6.0.2479-beta":{"name":"meetup-web-components","version":"6.0.2479-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"d62496ccdd8792f1b357a05144774b3f4177444a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2479-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EuevLIM4V7+m6IbWZhSAaxB1uMqf/CkJJqXdfAjMDXJ0j42SoVBCHQeMdoubwpPV0kL0gyvoQB3jqh/N6xZ72w==","shasum":"e7982cf8df8b9bd7d092ee267297bbcb7bf0252e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2479-beta.tgz","fileCount":613,"unpackedSize":7740573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbH0zCRA9TVsSAnZWagAAIcYQAIrD5RUgrymCG6VUaUYu\nUa1vz5eH5KEmajEoPcBcoutRGden5hH9Mk2yaNiP/fh1MqL7073+U2IitPMM\nURVsMPsHqb1kDV2qZ2lA2fgrthTnFUTFwaeHIXjyaJsgbjWxQzTSbLxhsl6P\n60+jLX3QtBKsZ3Hrb/8apJxtrculLlmB/SaiDtP3CqW3p7SmG2kM+tjZvXak\nxB9JGKVxUkcKXSbU5k2Y81KoBDTBDsZhY5JIW8R84ixmz235fV4LwjdozCz2\nqfnjWJ2Fj4kaQ/ZFbZ3GVPfoxGhRzTAZmddhMbp2tGknsUY/kSdfRoH5Fomj\nmSqK9MbP04HeGFbhkgGlA/zPHkwsgdRMqBa7Yl+wPc6gEDkMj8vKtOFqotKd\nY1pVNUt1lPrdROTNC6oU58bGVCUaqf7S5XWNj6wXnMXAQXddKZlrUxlFVf5a\nn6VuHthVwiJqkcEYQC/CMS1suUmyk8OPJ49zgMw18vkwpJK44X6rNmfUXRdc\n8dQ3LpGKgw1wo6t+8mxFhNqPovGZjd8TMNswf1qNfnck9kAaG0bL/U9/z0t7\nZexYxbB/+iBGgwuh7sgPrJD31s4tAu6RTqDJFH5lNyz4I1DIjdeZesbm33GY\ncudujoHVXJSLHWzUm2alemIrit2SoP3xA8p3DYne6OArgDtgVylhkiA5P/nC\ntg5G\r\n=6UZB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4HKR9chZh8Qs9bDDzXZfx+PKUXQZlhUDi3KVEw0Nz3QIhAJXgg53pWulPOJI8Avx+xLzDhnkT9gVDJ95tUMpr44MO"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2479-beta_1533836594610_0.04140912370421801"},"_hasShrinkwrap":false},"6.0.2480":{"name":"meetup-web-components","version":"6.0.2480","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"57f7652fd42dbdb8f621a6fda62bc05bea106d61","_id":"meetup-web-components@6.0.2480","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Pbl9URLybGOWNxXY1HzEvkJlzupWuUigya00CnJOHAwmSjn2ECnUw1z66jGHHfTyDNxE426MKdBos9lUq0Fibg==","shasum":"da0bf68f9152a973deec2c681f74b68042042838","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2480.tgz","fileCount":613,"unpackedSize":7740568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbJUuCRA9TVsSAnZWagAAceAP/iAdjIvf9jY2uY7mc6pz\n/APxZRlVHEUtQXaQVCqGRnMYImouWPiR8qGkE1fvHvdSWgSxzEmJZB68DexP\n6HdbL4hV1aApsGeZJzuRiaQpk5F+wAlkXZ4L0Xx/XVKkbxmoXgdu5VbdhleG\nvxmwfVJuDEcgJPYbBWgIWt2OBNeFCHJID6EWOpZS0BhBc4OIbd8yM73NdB23\nNw8Q1DI9vb8Y/frhoEcvQk9XxqANZcX7E2GhCHlyoEN1Y40bmtv1zF9odRCG\n2zDPYcMHIp5qVtYklkNZr6DsKCOLOUBwAQ0r5Ngq3t0A4aV/g7QkqLdXBYTQ\nTGeLQynUP9rmL4uDf5k/TQCMTUfF1AUWnpoDHZjhqzom6oYontMdOVmJVdA7\npJeHZLkXW/IQdurAv9NPQUDiXO4l/ySPyAZnP2L3Dum4HGbPECR4wKnCodgh\nRZv7XVfjLNsGrO3habNZNwAQC5Cp1IN2kNPmG3zSGoa0SHGgiAA8k3vd6wlC\nxsqTxH1XVz2kOvxpvBIg7JjpeCqhUL1jT4yZ9sLQkU4PD6dCxDzykROm8PTu\nGJmZUbVgV3/OUDQBpgR92sGipCTwBTZOxCZBROVCeEFXld32BrokwkAUACpm\nAhZ9EMjOuAFnD0CRyf0ldVGrUFCT0MaJRTJXx4/4GK8Z4F0jkIXrwi2UpuJT\nvICr\r\n=uHXL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcefYYfLyTzWmIjR5ZHIpcIIz4Gv8SP9W8s7H2RdrHQAIgZTozQ7YgvRPYmgGoXireP8B+Qrx164/c1F7YrfUoc7I="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2480_1533842733573_0.7995885133509433"},"_hasShrinkwrap":false},"6.0.2481":{"name":"meetup-web-components","version":"6.0.2481","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"f0723023123747d49fd68a3b79c17838d91b6c6b","_id":"meetup-web-components@6.0.2481","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nVZ3HtRH9NQ6gdnKz1mG/LKS7UpGB0oJ47kIzmUpWRchwSzayi8Xd7Zfh3lqu01teLth27vy2HLcBTL5w4ZvWQ==","shasum":"c92f353b4e4f9f7f9ea17fbec936bdf033924fa2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2481.tgz","fileCount":613,"unpackedSize":7740547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcdi3CRA9TVsSAnZWagAAW/4P/0pBl/8lsLnxKuUh9V7W\nE7lrLnhDMTjQEXA6VIboI7Tz+7Ptb+nMAlVZGPxJEFid8AUbkx52CihS0lHC\ntFbJ/WHRrjUkfZLYOQWR1CnY0uyLFEXr5Pf+nKcD3zGOLKWC/XoSPSrGFyJx\nGsrcBf3FbYqA9hKvXV4qyS/wa7JfudF0ErfpnL1wh8mUcncFFgKFX4d4VDJm\nYvURV3rJbsOmgnsh0J3KllRII7h7MmOsi5/PeIXmAmDREJk0i4G8p/yCNNPU\n2KWpSYbDua1r9alNhOtdXjeCqe3OsN08DB4Wblhfsvu7Zm33iT61f7PcxRkZ\n3ZvXQxnHo9YoBi3dLRHLxmGyW7K6KgklD0hfJxrS2l1LeN83E52hrXKJcqvn\nvcfKYVX4ArXrpBXdm9OCLuO21awHfdayQr1lRSCesasBvQUOGJD3hpX80/sI\njDaCs605WnYKm2H8g4WdL0p7hCFoEak0SsOpA8bvqJupjHd0f1teCURS+Fmd\nTj81GeerNDURs2UHyGc+zZcNAwUMGXY2ivFkOigtii6VnGxVwkULaX+uNiK+\npLtqm0voo8pT6CtT6yfiIfvi14h5oKoAXPpNHsHk3MyoLbzCyCXAb1G29lUo\n/LBoFjXdEBw0sZBLCS+goQ4sBtrqvMvSWqr8LOW4msqcquI2ypKhuO7U51wa\n4hTd\r\n=UkDY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtASg7MF2RvqR2rd9TdeulXIjX/7W29pqV5rU2YPgc2wIhAMl1R5SkD0z7WCv2KsN6RswLH8SEw60IFH52p4pCxKw/"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2481_1534187702444_0.8176494524340197"},"_hasShrinkwrap":false},"6.0.2482-beta":{"name":"meetup-web-components","version":"6.0.2482-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"19.0.0","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"20.0.4","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"754e91f5a93d557ce8daa5a7eaff737160b858a6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2482-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GuK92+T8Y5CUtgTk7sXlvEevcfN3xzjlbHk+fnfU/HiVk9gHVnNGfDNM1YMROzeiWEdE3VPTceIdwe5n/xIuGA==","shasum":"0babd676dd28a093c424a351f984b3a65b0f4dcf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2482-beta.tgz","fileCount":613,"unpackedSize":7743578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcqSBCRA9TVsSAnZWagAAbvAP/j8Ia3ZTZnqb3Jj+x126\n20RRc+uWXPZgdPKnADNeG4a7dBf07wC0zsGCXabOqtlqcv3KoKvDOJGmKtcL\nbfjn8W5+tKHeU03XPyKixziPpIQCpZa97D6si0gf7qrolCE84yEb2yTT7ZAt\nixFdUe7c0BoPjho4ovBuWVzf+WaCThSzWRS85Amgc/r+OiLmKs0coTLoce89\nF65JKJwmjpk3LMrjFo9WUgc3Ydn+iw6+saWcystOafNzicaa4pFNygBtAyRd\nMiQ4VLtVirCMrF432h9A41+CWRqrf/j4HtcrENJU6K3AT80sWStsVLHW6i1q\njilXEPvIaOj/pAKmqiJ33EjMO6QAQv8gpf+3BKddLnv9WQMJMz5Ko8ZNUfWT\nS1kEFkxwAfKcI6yktp1yRRYGF6m904YF2vsfu4akG7Xw/w3Ep1cIS2+Kmsrj\ncMp+xk1rwM+P5vGVUzCDFoFYI54INpfYNhZGANBNIHC8Qn1k9UhzE8ovlOR/\ndbrAxLhfCWcMdpkQRJE7LgMXUMl5Vwidl+qYxB5+/wJnatWLHY0gOcl4rzKJ\nMTQQXjA9sfRQuXyNRrmYS+8Ec1iLiUMtnM4m4tBIZ6MLY0NpTiHLSYDUb7kX\nrqIAMDFLFuFLljD9zsmOrugMgf2hHrxFCmrsVgFXr+gVvT/A60EtP/mgnmP7\nwB/q\r\n=JFfe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAU5qugal+nuLKi1G+VpQmddxk3zrDAJH5g2DPSejch5AiEA4BXvVXoDtCVgRJnmU20iEQU1up5L/7/KfJW/REvq+H4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2482-beta_1534239872412_0.4247758102192063"},"_hasShrinkwrap":false},"6.0.2485-beta":{"name":"meetup-web-components","version":"6.0.2485-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"13dff55f7ae5d8ae2e44d02a26dba1794abf287c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2485-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cXm7ty/zPlaDB/dS60K0UALBqNmDku/+4mu3pM2/lzQNQ4L/Y12lAQJS6MM4EAZfe/946Coyg+/muDsUD8hiRA==","shasum":"a79ac491a1a7aebcbf52dc05fb805bd14065b828","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2485-beta.tgz","fileCount":612,"unpackedSize":7742100,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbc0PxCRA9TVsSAnZWagAATP8P/3OX5DwNFM+McQU7iBZB\nGYvz45j9V6LavPXyVr+61AsJkGilJWEvAnEDR/J1Q5F6hvNnS7j1IgHd3648\nEktWp4NebvlG9ZYmB+2e1z/ZaDpiqCyILL2nT5wmH28efXe8f4PlS97C4nhz\n5HzRbtYalUS+O/D/y8oUvR68SDkk/tEWIwKsKFSqJjIN+nn/nVsKh5ZtQT4/\nxqHnfPGsvI0hZpxsHpQbRugKT0scm2k24bqvIfY7TyCVWANxtxuS9vmpNJ2l\n31QfnvfsFLdEfocIyuN0oVx7lGbo8DwJYs0KkrgELRGbHUMRvrOXpSOYn7fJ\nqz2iEGPctTZi4zM3W/v/GAHzgp40bDFg4pfZm3crT+V3l7+C/qmXq6Q3+EcN\n8/F4iPSMLVW9J7vOrJB29q9MS2swM7dRRMOvATbyYAig2tihQrwN1xURnyzQ\n9RpAU7aT7Nyd8LthOGTdSCa80gHn36N9GfRxUbWE8KYUCG0G3pidHxhLvorG\nPdC5AJ9lC8WZYksPCnG19h5od+MWdtS2/Ja+6SRvehojDOIe+zvBfxfbgPEk\nKCJ/TIJdjRQjp61ed9nSIYAO7BJVi1XOZmp9KoZlPleltDy0zPcQmJTPl1EU\nlJaX2vNv3WolWgqCBfiSWyFHO9KhQeQ3hNvCy/innFTojAQne96QD2sqcDaj\n1t97\r\n=pjoW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEM/0L4qzKS7DPHrMXukQyAtCqgy+pLEDinHVEAL4FFWAiBRvuN1p2MsRtfYxCvDb2ge36JKVn5JFUVM5M8bCoBm7A=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2485-beta_1534280688364_0.20289725555366744"},"_hasShrinkwrap":false},"6.0.2486":{"name":"meetup-web-components","version":"6.0.2486","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"ef4eb37f5995677c48adaf5340fe7bbf7666ba9a","_id":"meetup-web-components@6.0.2486","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RoFZxZ5RDjcNCzf3jlbEUY/Z1pADuGSTSPUnbLEGXaOd43Fhq2IZ2n2TJVZwO3C9L1sIwMKnLF6b8kaBy/QeBA==","shasum":"69c901a636bf32aa0890016c0bd8e92fc80493e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2486.tgz","fileCount":612,"unpackedSize":7742095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbc0atCRA9TVsSAnZWagAAvhcQAIg9tKEjOuTL1xnT0pDK\n5X186DIgdwh6FzY8MJup3bgW9Cc5vv0ftnnWvaZtRGSeDr6akKW1WnJvgo6r\nUeoxjJ/MBlDQ1WOUCN61kg0fIyWv9evaDWn/qKS2G4S9+GuZLEx8aUaddExW\nxwrrikxZS/gpzPBknBse7Qw0RWpaAJTeRsvwSSg8wRLe19Fab9PWoojO/tkz\nZkciUPFYm785lHBfTmFUhTQcTOlGzPS5WMTnl24EcFsKC7mNOpwJsJR7ZX26\ncv9tSkFeSKXHjr+z51hXd/5B0xaM3dC6WgUJh8IM+nS0Ypn1aa5yLXZciTb5\n/L1WlZzmXXOPzeh+Ery7lEr9tvnrSWMLnLKpWeotITaHaLf5nIQTqWa4MjGp\nxonCjvj3NaAa431ooxYkO7aPGg7SBiOzZP5iX/A+5SF7AX9NT5Q4AyV67b9f\nwws95IhY5oYEmEdlHxj2EPEBPDphrj7LGHT/wce3tl3SUhK2L5vrDOkZTv7F\nr/bw1/lnfhMlFIoNFtwZKMjGHjzJy9k7KlKrabQjv500cvqFQc/hKcep6JXW\niOFBHmTEO56RCUkDCPVbwLOjpjn9BnpkRzbXckYQmV0oUl2RRuUgwk2YlRa8\ngoVDEgnPo7jTF+bFmOCjSrRto7tDSNJMyjeTlo2AFR7Ba6ccr2TwPptGoRMl\nvTFE\r\n=i2jJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMRp4y9cKXn+GjqH3ErdB0HmutPQ/e8hRyUbRHc3Ti3QIhAPxUSDSgjD6rY2GZF5c6OodxwyjbkTMlDKqF9GB7Tgc9"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2486_1534281388873_0.7068486239169098"},"_hasShrinkwrap":false},"6.0.2487-beta":{"name":"meetup-web-components","version":"6.0.2487-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2599cd50dec82745b67a63fff18566a0ee9b6046","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2487-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GjIKG+nPcko62BkweBmuSMyKq6CCY+V61bYbd+T3JR9i/cIfUbI4vWwfxHWRPR7fMbd2uvtqtet4C4rE4SskVA==","shasum":"dae84fc9cd3dee9d6c083d39143a84baabeda6a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2487-beta.tgz","fileCount":612,"unpackedSize":7742420,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbc0sPCRA9TVsSAnZWagAAgzcQAKBuu5vap8PUvDQqRXvB\nW0eIvCo7FggcjWmeaeamU1U0hs/iIA7mrwNvk89NT0W/zHXRgH+trclvfeEC\nkkfCIhQxuvDeOnFrEc1hswoQzd1f7FYj6dxGrkLMOq1jgWrzqo6ekLllilhK\no+VRE+tj9VkEv0mkdzU/C2a0Zj3UDGdPK0Tir4qSxF7pKcAC98rlYsv8pg0q\ngVMZzeXqgS+bFzZLE7kC6n1LNck7mJ/s5p/TCk3jYtdivhaDPRLEsv3Xq6Sf\nZH/LTxGyooOMEXuCTUyal/wYF4ognxYomHrBh0n7gSGdCCN3N8N4wXgNQqd2\nUzKuMcCoEgudU7eqxroJmMN08ScU/WKPojoxv0RFDrsfPNlFAyA2TNe0WWQb\nro4UrOAMpW/v3QLzVoaItgGczjyLZoa21QIDDpissXVipk8nCnrtulAzZgtJ\nVOHaaMlecWdpZAC7Q+XL3+qj1SUJ4vjUayMGbeQ9hr9cUWtq5UQg8W+aRAeO\ngNmKig282xcLRv0Qat51smTmw6w0UN4NP3VTCSnVkEHuyrg/b8+D5FZAt1pk\n8OjSOzg4Q60hgfi681CoI+NafUsUq/YGibLOF0k+w2hWRIO8ZhS3sltqopwY\nAu+v2hG9IipH+2iqygyGcLonw4gT4axgG8TEL7peIu+1FEzey5loYgQEzuw8\nKKD9\r\n=YfAo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHEj1RqMJ0zny7kH+Z8urMLYkMCbAuUdjAvbZgHqvVufAiB/spL2w/qvxmmWrl1IyxLYhw3BcsVUBGhOHjnE5uNi6Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2487-beta_1534282510978_0.026832237829093275"},"_hasShrinkwrap":false},"6.0.2488":{"name":"meetup-web-components","version":"6.0.2488","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c53c5c505f63f3dee8ae08c11a2af4dd58cfa573","_id":"meetup-web-components@6.0.2488","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DzUyg+vyGgANHjfVLlf8fyvwyf7UVQud09RQA8e5P/iLLL+gpn+u1bM0XplKG/DsDk+PgqdYoy0lSC0BjKTj2Q==","shasum":"3c9f9f241b7449a940892b0d74cb808357b3c23a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2488.tgz","fileCount":612,"unpackedSize":7742415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbc00pCRA9TVsSAnZWagAA18QP+QC3ooFQbBOeiajTzanX\nPlEoSkhOYnE7ShnVf8OvBAgniQcSn8xi8fv5wlVqtujz9bftk6OQc+ZSQ9oJ\n9fry57m1mwopMBwwgDTi5Uawb7l26rLtrsIeGOAUTcsxGAR9CEpVt+1qYtOs\ndYqNn4lAiybq2pdcC/q/Tp2moXx1fXQYuMj0ziWpwYf4fwxtN9OkZepQ9PDG\nbgnfHpumBFpj9Zz3AUhob2cYJCbQw+gQ6IgJOBLzJoov6IIZMeucffIuefVy\nEYQZqKXylVQ9AAc4AM01/NeLI+lF4cl/h8TjuwXk5n1TcEQ/7rpcHDtuZAuE\nCGjBLMbIx5lIq0hB9HI69TN6unbPT6fmM9d/hOgAqDGe4wgve/ZPPYPy3uS4\nEf1BoPlZ35ydaUjOn64JjwLnfvUPVLywiofADj67TIM5ZQflZatt4Wkr9Mg1\noxUB0E+npWpzBVu/YyxjBQ9gaRCzwM/iTLG82aQ4gGfIiAcsK2TWSQ4s4fVF\n62NM9lONFwQeq2M6WrF/8k2qD5kl6BYW5TPMhXt5XpVlCyw5DCNIE/i25xyR\nHzEi4mnVJsIFCbWFHhUcHpf/PrEdTrr/2McNYMHcFqnfVhW2VeXh1QZjDmXI\nhdjVsauMCYEKqZhVOt5T6Uj2BDHMidL/ITQe9QK809O9fNXZNSsNDioh7Dc/\npGlX\r\n=y8XC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICgl/ySfAuS/YE+SqsCecHJIgF4vINa7+0mEdG6NvQOQAiAsHu6keN3OXYlaQ4liXxGgXlgEHjQxvmaUVsheYjFbrA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2488_1534283049157_0.7080117927637473"},"_hasShrinkwrap":false},"6.0.2489-beta":{"name":"meetup-web-components","version":"6.0.2489-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"52a870d8cbe2c33a53d67dd029f049b8116ec467","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2489-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-k4pgm3lqXTt30ai2XxcbQqyaJYp0iQSGhRxz1xRgTPTysue8KIgaLFjoP3gtW+tmwoEN0vn1aqPEufUHYlwdDw==","shasum":"b683a454aa8dc3771bf0b8acc5bef8ada3e51534","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2489-beta.tgz","fileCount":612,"unpackedSize":7744484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdTx7CRA9TVsSAnZWagAAeOAP+QAm4kKDqerr6j5w+lcK\nh4nwefdi2Mi9nIFHRieV+42RCurNHuijSTZvqmKo0H4ubagA5Go9kBa/Cs6H\nrXADtEl1Q7h60484/H1dHhytpS3NMh7cn3eyI/PP7YA4yEkDcaUc+X8dv4Rv\nDCFO/13eGdoTzcxqjT5jMnLNDuzmyW4WKMjroVA+ZqS2RMFR9RaSE+pIzcDk\nzSuC5LPgKCUFkOMzkZmaY5LbDD0u/fHFIQmY22WtFzyPaRmC/N3oMh4qwWUK\nQTeUWU/YO6FBxdZM0XbtilzHwqJrroVOcNuM7fbsXo4qdLk+2MZsco0nB9rv\nsUBEB87WgyteU1vTsaX2zyDRafc5JW/3JvT4RkPtmMZesDL24aRad24lFJEF\nxaTATqtuY7Z9zdVD0kQ4tsvUBcgF+jjGGe+/zlr0Qxt+uMAlavOvlIi6WmSG\nj2xfDaU6ps/R3+6A4ItS8uR8S2o8ePdlcoevBT1N59PBhlZJF3uDWnCsT8Mp\n+ihBi2hxKTkcPoRVfcUP9NyFmxdKAyxi/6taWD0m5pqaEgTgELfyMaJ4/Ap0\nmQVsGLJAky7nyehV4HbjteyiXYSqjFZIB2WSOz+rJqpIN48B8dse8SGI23ls\nffeQuJHye17bgfxhYsxk6Kszl6o1qU0MIrFKagipHcJcBVdjBoj2o2fRmnSM\nfGfT\r\n=TMht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbSeQ1CuaEAVFcdlUqVdKrvcZzJKLjfT9i3Bm7GZ5TGAiEAxaNB8A26P/nwQ7W+BZiiEwmEeW0MRlJrW14uqa5Nelw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2489-beta_1534409850802_0.07477520978304653"},"_hasShrinkwrap":false},"6.0.2490-beta":{"name":"meetup-web-components","version":"6.0.2490-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"7fe5428df0445e4d9639ccdc06f8aaefe9164fb7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2490-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zheuzIlRV1Wywak8kjstbb5wJ7C5BXvXRmnNizOVFLdCcoyya0LS/LCEv9uCRHLkHub9YhFWJ6qq38Wx/m1OCg==","shasum":"19ed8e23bc315a43594c615dd1353278d49395a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2490-beta.tgz","fileCount":612,"unpackedSize":7744551,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdUFtCRA9TVsSAnZWagAATTQP/iuimsjARCbdQL6leY1M\ntgQDeWSu3Pa7m+u1INo55YDSnNlmVh3vIPI0RoYYXeNLLpKquLNhoTVX/BK4\nlQu76nrHPMK11XjzXokpmQmhn2DsxfY7B4IJzJTzJBaXcIKlg1/hj4CLfV2h\n1KBc1rs3sQ7nQFHQ8EFLIlhU2QfZAxoFVVfF3G+qVQRPaxbQ8oKEOH3Kw6+9\nhRG0hWknRXIXRh2YxjvOVhqF/RLItxW+nP9U0QM7FeSEl/xjaKiDwfqpA21i\ndBmmdcTgIx2LP3ak22CcE+H1rSt0R2xFW90aSgaKBNqt7ykSMbYSbOBFCflc\nUq7qMw1j+uIJMvoBPtiI1qTYQPIYKibotanaCXadLH91pIadI6CLgygUa70Q\nRAWQurvYzRNq0kYJNhB5IwwzZ0+YROZGBEDhU/WhZg/sn+tDbfZqeeFwR2tq\n/00xY45oWpjLs7S3V/pd64exX4JjjGPPcjHgzpoS4w6Rq1kaaNim/DzyWsJL\nfmfGj4uGbAc23h9HdauNnJDkdvozqZnO16ECoWVo66VGYZiC0f4BFXKjST2b\n1l1BdAR5cY+4Ei6rK78/2u6Gpx4asca+cHYJRkGoiiO9pXZ7Co6LGB+3YsqX\nxKLrOohuNR+HJ4v2wHEVX+zGQe3INv7Ldt17myltA14d00sfwYls31HoYMq1\nU/iY\r\n=KvMa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQiQWTkjCiZeuCFid7iK7S+U4AGK/bbFTrt6EPd9O0pAIhANM2P4zZPme9KSr9lGYl4iLYzO3aiP/JiHprGYLfvFP6"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2490-beta_1534411117024_0.8583708597623538"},"_hasShrinkwrap":false},"6.0.2491-beta":{"name":"meetup-web-components","version":"6.0.2491-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"c791529895278ba0bec61c8246ac973cbf013150","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2491-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jQHDr2d7GFvM+Af/biAfYHNrv1O1w6buA2B/XLYQJUAXrJelEApq74NIEtdeWgvOgNx9Jxh6Kp/m1MlgFiPang==","shasum":"161c9a8c60ebc9b402c3461e7f2e6472adf069c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2491-beta.tgz","fileCount":612,"unpackedSize":7745080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdWXGCRA9TVsSAnZWagAAc5gP/jp6Chucg/5Id9r/TU2K\n3eKVZwr0B+Ah8bGc01X/d9JIhco8RWNj4fqYUGCKJg7UizNO37H5fCPA3tMz\nXJRhlEDWY5QJbLBMHWaXhJwP4Cr9mvSXWVWAU5MmUBShJH39NXUDDO2mOS2y\nL/6HGsqlDNx+pJi7+DrLyuTONGiSictFY2jlg9Jd5bNlFeDhgKfzuxnyVg/K\nCsVZNfN38WhBCGVG2CItCKovIdgJ8IOPYoRAGZ0v3WVxPnFsy8V5AjZGBrAb\nOhR7/ndIaPLl8Hxo9K88wBDZKJiIIKs9bCc5hOtgWscFlKTZJKWyqLI/WZ40\nT8b8WyBK1iC8fXEz04GbyiujdJEgkDecPRT8kAbjH6QO6JxLaQDtqjUKzfxe\n7kJsaEWVmWuVVYsdR14kSeKcEvg1QntXFVgyaxV8xYMj9t0CJFlRBowzw0F1\nsfBmLbYfzESa8RR8gme+TTQrUd3wdP+UvMlaKAVZDiR1DB+i9YeLivTBnUMY\nM52gsLfQa1EerHH4DoXBImRUZXUqqtxNHWNZnDBoO53VNwkHpz87t8BGu134\nPc7HdqMlaXVwTNt7ECg/tVnS6Oqh41p/sdsJ4jI/dgjBK4wHs9rgq71BSlNo\nB0Hwxyce9PDRt8W9zYzW19gcyYEWHNkJYKKyL+wi8HYduKzIN4uH4cqh1tNc\naJW2\r\n=3Jes\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICt5v3ZIPdY+/96pVLYpU6XPfutQ1udqu/jJqmLv5OIEAiEA8eBCoRaAmPMXgZ3MwPXusJIwJAdcr4hbGI1H+aFsG+s="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2491-beta_1534420422171_0.8596539049638432"},"_hasShrinkwrap":false},"6.0.2492":{"name":"meetup-web-components","version":"6.0.2492","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"057fe66e74c77cca9611ff61f95b0d14ba4c0529","_id":"meetup-web-components@6.0.2492","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GK4zuMXbDf78hEQppn0mIEdEw2XO5eBzXDQiw2LuwVHnPXs/MAM7Uh1JvtYwwbXzGIoQ6bREkq5ffxvXdsEH4g==","shasum":"251ddbf41cc5d945b5b533ffa00b06c83b9689b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2492.tgz","fileCount":612,"unpackedSize":7745075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdYbRCRA9TVsSAnZWagAAQiwP/RSRQz0MsDxxB9waoSGP\nY0xu4TpWOvtZfxTSsR9bvDZfXhc/tQ5wfg1FYrQU5tKoi0LHVGIirdQNmZ33\ncGMVw4jkyTx7MLK22vIW91nt31dwYjiYOe45kFG1AZBUddZx1Lnq7NiheKyh\nr18w+PMoQ81nvR3xS0ehyralMYetl+9MdFCc1RgQFmigxDsTTWOYH6C33W6o\niqTYUtWLwe6OmL7aq/SWmgt3LVR9mdvB9NodcpvLgECr7xxHJT41HdQosuZ4\nypPOtTtsCCWXts7d+mqc8Ks5k+AQSjcMIZ6VEYvgTK+ngZoXIncJOr7thMLE\nBT0kCxxtwYh0QibxY38Sn8l8Y7VPlK8d5/W8wmc6oJXv9yqpJc0sZDaNAkvt\na+tqVObhb9xN/0CDBqbnUKCOY6ugvFc2WtMeiWgHAuAwl7KQpqPXOP2rYTNt\nEgWzWc3LCm4XItFjkYw/B9pbA74nmTzXiErObGZ9T4Bwy+32G9HTcGwjn0N2\nfSLV3LsIwuzjfHldyP1j0SeNXb+yd6Si0KyYZfOXAu4nzvXYUrFYYczgnL54\nMq9pF9KB6uihczbiQ46TZcNaWI2LgkvYNX9ireC4rvMQtEv43CrRfbO4iOi5\nJ0Uw6FdqUWdI25FYfkz6ksrw9obd226hGU02MRcqbMhtGENPL88vf0DxA5Fl\nY+Bz\r\n=NNjo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE9mfUkHqtXhs9pYA/TG15fJruHwGuN5miKSGrCU81ZsAiAfuDzYFFmQE1OWmMqyA5xeARMS0n2EdHlPVawqJfW5ng=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2492_1534428880739_0.07839480768342155"},"_hasShrinkwrap":false},"6.0.2493-beta":{"name":"meetup-web-components","version":"6.0.2493-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"63c975bb2feda7c603ce8ff41c95e6d2d4e6f4ad","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2493-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-PUVdDJzxF0WSUUsIN9xKH6tMlDlTqFphKCKazQxWL0MzQx1rrmTm2Vo4JP9v5dywp6vzrneB3MwdSaZx9ihdHg==","shasum":"c6582b7d2867284ee8c8fd3fdd5e1f4d32750410","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2493-beta.tgz","fileCount":612,"unpackedSize":7745470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdsZ/CRA9TVsSAnZWagAAFBgP+gNMXiiOnSWyygWJ1JnC\nG0DSoTt3SOuN/T9tvHeyLOO/pvUtWEC/ctU3cgkuRCYZOwXesWG0oDUHgMOB\nmiGZ0DRuUhPUdYy+2fhjx6GYTofPOt14/ouJefv2NiTJSbJpBAQIvv+8lUl6\nd9rWRSLsPrqM9HP1HwidNlDFYdevjhlO+u1pYFEjixVNJdV4zgtRLv8x+VGZ\nXwVAvwpNVKeTLXXJCsjP1JDO6nFc95P7CYij/YCkXE343ddyoNMavIwjhckv\ng6VWuffJUOYrjHMnRy2qDlORf0SAJCImkRWeIQNO31J16iT1nX0savMmW5W/\nkXfuyZTSaccunPjbymWqVZdfBk7HRmS+lI2w5fdeD7vlBZVVbV0XEoFk6Igd\nGIa/f1ODcxOtF1sNi21GwjoIdNpg9k0SzTL7iWFUpgoUbLzvmHF306n0EDrj\nWV8toZt2xxUscVxHkouw1fiPsZ/5Xn2iNcq0yGHXYd4kT9JmdvyVZjVrfpS+\nEkrrGuHBFLUBfzCfMx73h7iSIcmErLnkd/egZVJRg248Ap3ZXfhGMfATBRBL\nRGEN/wq1pUEpSUnbe7AAXq8JSSkp07QGgjXSgCCn2BOKrTCBHGy4niExnRan\nKStgmhKDndFaJgjkO4M4ZnZt46rxbOJOk5i+WSQ+XscDFdydbMF2dmULesAS\nNDLH\r\n=ncFz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqY0rrqjI8Ind5xNcLDu1sTPD6QtQz7d3gsFonl55fKwIgMOxpToCzqt2hF718NpBALbaWWw7jEPMZfKM6GT96cWs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2493-beta_1534510718617_0.5397160473733624"},"_hasShrinkwrap":false},"6.0.2494":{"name":"meetup-web-components","version":"6.0.2494","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"4537759db2db98a7e5b8a82389a5379bbb0905a7","_id":"meetup-web-components@6.0.2494","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-seb62me2EDNWxNTLAn2PnJ5EsBH7zEaajFw1tknQjHTK4zgtU0gnqVq0SblsYHBlq9/2ANyMsK17R3oXKHS1lA==","shasum":"7825bf6c7d5196c3b1a22e03237a22b43d730e75","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2494.tgz","fileCount":612,"unpackedSize":7745465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdshlCRA9TVsSAnZWagAAhZgP/RwcWJrNV//2D05uu8Wh\nKiJ46s9iRALAffXYwEa3OyfHi8WQTWz4cJ7+S62VFdOT3j0qpP6k0H0C9Yib\nB6wrOinjPcTu9sDWbeWpFRhZbm6m7553xC1VmGxW/jOhXwrtn523mx/3W8Rs\nxGQ7WfZFyRcmKsiDmYz909Qk7H0kLLHn2hOQNqD/EhjxcfoQx+klkLLPmlfh\nmTMPK5izCbZiCGhbyXpgm4HEnpi4hiUKPi5iax4aFSuSkGI/7T/BVNvleli6\n2veTCcqEud7vTfR5iJxz1BMqzjo5id8d1zVpIeXKgK8LMb7irkalTXx3bLXf\nynn18xR9DllesRAxmb0eBJmxymPVDg1D1InDDn6WbNc1OIuSSp71hzwG5pm2\nV4Qu3Ah4V6+M2/sA4G9nNPTPbny95/gp/BFqDv4g8T4qrYaHvThAWOl0pK4J\ncoHXGpNv+6jU2NmVL2lrXIr2Eia6KfHWX5k0LV8UZ43VCkKwPWWME6Ub/f6S\nYMob8wY708vnfieW6SsOqKuibdNz9JoOj4z4tCdmkKMOqrXemmSiatzQGWGZ\n5+sKmCbD3003Ve22AJjgKtzm5oZcTMeeN3HXMeiLxnbq+jvZY2uQ6lyPs5//\n7eEUx/sTR7v+FSmat5ZxtZgRcKM7W4rsLpKO9G7zvcmbtrUAjavINZBg2hp6\n8sbL\r\n=sXhh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSmopf+/EgXbNVA1mSpLTAeEV8L2bbsMb+ZbRdSxoRFAIgZOPwLsgdzrRTta847D+OIdaRhyVUWHq5UEhlzqoua0I="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2494_1534511204269_0.34994735031607327"},"_hasShrinkwrap":false},"6.0.2495":{"name":"meetup-web-components","version":"6.0.2495","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"98327c854e03298e27c18b564ffc7953f44e7f86","_id":"meetup-web-components@6.0.2495","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-QXWJ0HS7+jl0BsNP6C5UuVxg+1GLtY2f3vXdnnnGg5GXHUVubU5uWxxZhmqngvxyPgvN8iK/1PYSuTWw36zk7g==","shasum":"ea17df80d9e38b90006597df050a718aaa04567c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2495.tgz","fileCount":612,"unpackedSize":7748491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbe8J/CRA9TVsSAnZWagAAswgP/02WTkEso8BBwFzRhGZE\ng+twhMBixA0WTf7DDsQlZuj5Qff0iQ+dDA4TM/vhr671Z6R+e3YLC7OOR1vf\n74OM4tsFsnyuyofGWbEnp7JxGdQPNbzmEOZ9a4fg0J+rR1kKcpmZn4SR7xyz\n3C+uVawTjSR+PPBflVMzOn737FXHcSZtdWl/5LPswXldbVGU9AialG4OAeID\niE39xog4Q7vmIQrGFi3r3lX8lW4+cd0ydnyxlvAUJVnUPyXB+oPzZPhB7/W/\nqcUi2jRIK4B2K2bi+JB2YWaCmb86BUdH03XYAUdwB9nRG+lITuAI4Z8e+tQA\n18tdCI72WZ1NbKl+KNdHgHFQF6d7+EB3TllV7fkgAuwlJONKFfRtvyYvRYxQ\n25Ds3wTpnfMjgbngsnL3EkHWUWu2lRCFYG7mBu+J47DailZknGQLMu1Q6237\nMX4OxazypPgMClWy/oRBqWKoOu5OXDYnzOkeYRIVKb41XfhoTOoE2xVgOPNc\nNfYxlg7zDfBKkx7a5uvvY9sxEps8xUyhhEBDWNZzAP7/5jNG3tfKahA4oWE+\n5L9hLliINYC5taiJdpM2c7nVFPsQaoWTAxp8ILoKd7OH0Ugy9yfYOjm4Ih48\nXgjlMRG8UZcozpRr/+ndgHiopNV6sej7ss8PEublNDEbTPOqUGWyLwKG9vET\n0vBR\r\n=aP77\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzqk1grwbhArVxigOKQsTMg51PHHunhwH8zJjM6Iyw4QIgUa9HuF7S7oPg8qH3jo5wFAgpXAumSwNXf3qUHN2FHWA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2495_1534837374873_0.7012610926388598"},"_hasShrinkwrap":false},"0.0.0":{"name":"meetup-web-components","version":"0.0.0","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"e9973067208b0b320a02fe390be686d463c56530","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@0.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4nCNeTyxXdPoWblAGQmWou4F/MhmI76zmMeJJRAA1qC/YlmX18nxH0zcNpFIxh/Oa1msYILvqI5dtFl9rF2oNg==","shasum":"7ad45645defda279d91861cf26e8207e86392f86","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-0.0.0.tgz","fileCount":612,"unpackedSize":7750720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfVBzCRA9TVsSAnZWagAAWPEP+wdgCGUviPdgEqVPxzgD\nZWXEs5u5XyRVfBNE7S2SJBlJhmDCOYmmHyuUVJYI1Gh+t7o9f1aM9qGGUr9R\nNhKCiUeINi69jY3fQnfOVHH7wQg4fSCo7dwqKJeqw3xMDVGIP4UfMoHti6ox\n1o/RXHzh2PrAVFyZ2Rrjvoc0iQzCftJCuSUNV78060El2LCn0d+SDO4dDVSL\nSNTErQDPFDPI+fpO9hnJcgE+RwNgwIypBkKSc4EmydW2YDmJQvllobI144Qm\nbJzFoKsOBB1JWA2ccH0CPP7u2xZXhDgGcd6qq+n6hZphKZ+NxYGovvqY24iE\nSvaSKVmJSblssbNxLJUXOM8lg6cr/OGPBl2ja/c7dQQbqtTtiNAKYqtPVGy2\nG+5jv4OnsbL5v8mugLROR4ORO8Ncmp1ToNVmr/iibp6e2KieHr5d1q1elhpt\nUgUvLXz/6WNLl9VP89y2r1H0h1DmD8CkpilMb2mxXiiHLzJeCIEr4ERwYjQf\nQxrJRH2gZiohg5SKDZSLUm8vQ2u+OREuWeSOWfp+VH9F6YbIuFYrq/NtPWoZ\nzo1eEnj7LU4MqH4tG8nn5Cnti1shZbGEErtX5pEwOA47Fea3/hCGIMMbVJcO\nWwxgbVQfnHUWNEHsUWhKocDE5Cg/ynHl03mfc6P/DeuSzqyOdCqFmEOMaEGj\nwB9S\r\n=FRgu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV614KX71v+gM8emzadJ5h6TBz1oZoem5mgnRh/GMRkwIhAMbPM4cUjfbqLq2wolUQCF8/AeuA/VB/3QgLSAlOgB5C"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_0.0.0_1534939250561_0.20799448127754339"},"_hasShrinkwrap":false},"6.0.2498-beta":{"name":"meetup-web-components","version":"6.0.2498-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"a4b8e148407ac81f04702ccc7b3d8bdfd88225f4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2498-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-x4F3omoFdpTOYJ8e4ZdkjIYeXXCKiYuzHFHkn94nIlvCh8gU0dVKiUNqE5k9P162/JCM1KVT2uzUJf6Yhzh6Sw==","shasum":"6b6cefb537b78b4a12171d988673ce20564b9c81","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2498-beta.tgz","fileCount":612,"unpackedSize":7750728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfnaOCRA9TVsSAnZWagAAZFEP/jOAa4EsBmp81TIzu6na\nAA78Y5E25wauTc9saYsEJm6hskHejrejG79J1WIylnY4J08YwV8yrWagZo+/\nM1BuHNpAgaM3blZ5lxMOgah5e/ezS2lTD0dW9JNiR/r9NgSLbqlvlgfXbfPN\nKnTvA3fz3xkm/MP27uWMnJICbc/xL4dtEpPIm5geEPr5hN7g4wV5y8ErmkGj\nz8iBQFi1SmDLRYBVCftOrcnq/qY0ah4pnf+K5965LC+O/0Gg11aaEfzcEXjN\nU+Goki5UPbF/+mp4/kaCSiZrwt1o+rL5SFxAEvc/iQaGDYOEHVRaHLehS6FG\nPE2p6HxuW6QkuSCjV+8DKS/uRo9jMVoz5zRLbdJPBm8codQXK1QU17yFxdA3\nQmzhYxMV1ZZCY9mj9ZUxkhSoq2VnvFVP9Oi6GOYg7M5GAURwWoQJ79NnX3aa\nF3Aw11LBtArcvwjRofjSNKUi0AVPDrwz/6pxPkZddJpXMGE7mPYxWeXB9fsS\nzx2459rj1xjNgT2UNOhEP42teOXK0xMjWvAfpzntFi+HTxHcIrR6sknxKdJp\nFV8x7I/YxeueU8x2w+3UYsrAVR8zmrpcvqbKT2DZLruqPdjfEfrNEq/Fdwvp\nNE780lTSpC8UXgPcVfHJk/BVntIapM4oPEexD5CFb3sxEuiKSkc1GlPlKtVZ\nGif9\r\n=YM86\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF65sM2BcqsoKtGLu5VQOB1hhwRXhpfy9WVB/TzasIECAiAbJtRARNWK17Uo1WqbBML40GjvgQGrTNXPlnITBlzG1Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2498-beta_1535014541355_0.03349592972576265"},"_hasShrinkwrap":false},"6.0.2499":{"name":"meetup-web-components","version":"6.0.2499","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"f1ce31982b8683e6e6687912d317f946eee39ae8","_id":"meetup-web-components@6.0.2499","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Z2hdhV+YDyGZMPUM5vgVnB/0HZNiGmNUJOVDmFGM/5+pStlcMitbkjWTYEQTdqY6u2uN53yt/weYSfyrxFEYCQ==","shasum":"77123b1a311fbb8e809bbc144312fc4c463a1f24","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2499.tgz","fileCount":612,"unpackedSize":7750723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfoKqCRA9TVsSAnZWagAApugP/jhPzcHpn0nSNhMmRgCw\nedYvCTJg8Fa1xbJ15rhsdBol5aCrimljXhfEfLkV3xWBTJEqUsvNIr+GmjeY\nQJtNlyt1yaUZ0eQ3b8DcWRfGiSwUSjZs6QoWafMPORlVkZ0clb1NkPc5OXaA\n1Yu3m9LMg9mvVXdsYkln6l0IH/G3QpZ2Le6U4AlPX6ZWizFDfPUgMutLWRdu\nNXuINOSnWGUhquRyJEO+RChuu4XrgbSxOPPNIS+BkQh963erp/MqTnZl2Del\nuTVau2zCk1Gdf+3GkcQ8IINUCvYhDiTft3epxZAbcybYMFrsKNxNUqyO4gqy\nrv3AZezOXFxzezFwVHId5F06CYd6iNJ31amTzPSdvGZQJ9gDCcpbYhlKUmdw\njTDP1lzAY9FhizlNNBnd1XL9553gHv41GKO24+xpu2dg2u4wX4NnztgbKOqB\nqK5KAI8YRfgXwcNXizm/07G3Q0bUQzBfD9UL6TpS1lD/TlZR91GCCTXQ40vg\nP1ivbLCDBOJtbyvJr12DoOIHILPKrCbjDicXZz589iaoxYZUkolMwGqIqqhN\nAbfSMRK7R+B3T4HDDH/yGe4ak7pkN2BNHxWjqhonHs7jY2lGEWAT7sa414Uu\nQ3PVeCyEWjAJ6eVdPj8t/0Dk/b125j0cq63TgYZCuGhgWF4+cJbkI+5YhCft\nToaf\r\n=rZbv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHKq9TXTPu61KgZEZNPHGR19BUsPq4AbG4FPRpG0Vx1AIgNVeH8Hbnd9TWo5QGmDKYsSTc8+NYKVuYGM/92/NBxKc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2499_1535017641673_0.40445321702780856"},"_hasShrinkwrap":false},"6.0.2502":{"name":"meetup-web-components","version":"6.0.2502","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"bcc74d12a6c55b1c76842bdba2d6746aeefe5517","_id":"meetup-web-components@6.0.2502","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-opXWtkeJouUkpEf8+p9ZNMpaD0ighc1BVoSO1nWO4zbo2AxFU5tNq68w5Xu03rvN9PqnvIxAg2VYAyEtTEhJfQ==","shasum":"29796b758723fe9f3f6e1cbf7708196214f0b907","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2502.tgz","fileCount":612,"unpackedSize":7749569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbf14+CRA9TVsSAnZWagAALJ0P/jO4539QQ9V8Vb4UxRUN\nMUjUCHMw7VxFKvHkd+0PlbBTI3OR+hGygyxcvvzqgJDns9yIJ/R6GP9mB1Hz\nQbQAUxdWVdkzcg4cTF9SRTUnZ5B8C5NXyiyP7fSQIUoe3BPC5HQfAqSULh0J\nt1Q6INNXEEyfMFtVVhrBNfRPoppUBW23hZ6fmP01+M21O3zzMqhFyRECjnKY\nIQOV+HL9l+WMP9OzkYI+k0FFoqdHBL1BgGcRGuyzbCxiNfc8DgMA3Yb7t40p\ns+28mqonlSoiOtbc2bHfZFzZOqHkahyyVTwnmoBTZ5BYpN/dgxEqnE8IYGSc\nmMfTLoYiZ9u3q9Q47BIlzzt4RRc+PNUCxorUrscylpRgVLioZXQ9JjigSUZq\nKw6yI+m/1DSGqhB1LOevckP1EQEzBAtozYu1KMPXBPZQ12b+m55ZL6pKaaxw\nCubWy6QksmMgfepXcWdajh4MoqIhshsJ6F6DZi8HlZiOdBxWTcpwDs3Fuul/\nqYLOmhlmWaIxWnH60YSwKqxEJpqcPslc6U6+Jx0JpN28v6HPJiglbUcORhlX\n0GqxoWMy+IESKqslm0Os6SMRboaFXLNI/dozoBkTEtn37NmaIla4+sZhN0mW\nHIhceht7Js2OJvwZ38BVAV82B6AItqzDvDoVBXWG9MP2/onxxEWcptddRMby\nNoK5\r\n=NRAa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfR58M+XOECGrJeQ+0lFQYYFyGOYgeYIQBF+GGbX/ypAiAwQ7NH1rdjya9EqeuMlrkCuBSXfUDww5Z3PHS1bUyD9g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2502_1535073853750_0.46700687113561634"},"_hasShrinkwrap":false},"6.0.2503-beta":{"name":"meetup-web-components","version":"6.0.2503-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"5e8e5b43b20af520319c6054873da9702be0aa4b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2503-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-utpASImGk4NH15LmTEsfp5lv13CIfK1riGAF3v1NsMOgWZ9DHmYFX92+sIae1d5Pfgpxcu0nowmVIPK2LYO+UA==","shasum":"29f44be0b7c96d00c40aab82483231dbb1d8e202","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2503-beta.tgz","fileCount":611,"unpackedSize":7754803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgHi5CRA9TVsSAnZWagAA6LgP/ia+MK3qg7UD2L5zRP05\nnS/WoOO3/Th1+fawrrMbwbqfHl+h8omDPW7UCUe7wnx4yxDDM+DApxWRMNS4\nqM3AKglwFIx28iNFdjFy6QOz0kvE4zhjQpg1flF9dvAIPv04Z3LtMPJV+vDj\nxMR52iqd6YbfNhd0ff75BiQmrUpp69/QFCY2puCAsMu24suaCbViNbeF1YrI\nGDbngj+9RkUH1rkF07qaDqe6u7XFiYWTgLbHU+lx+iP2pmVf8zUmOVR/LRo5\nVtJVV8V+Kgiumf3oLafRIZwvzLPiXyVVyzBUxfjH9Z0XjUAnlqmN5W9H3RFr\nFZ8wbzw+6eiip7JHinjp+jL4RXKxECLeqoMdcHH1jtRBNlU+aw8i8FpIw6Wy\nXb1OUfuMkXI9rQR1imVvZmY1hV+h0ujKXU2+Q/Re3pxXVsHM8zKQ2vVMro+W\n56kt1MhfDMcgVFHoujH4GfAvDO5SUQFCTbomKylZVFr2dWyP7S3AutF6ltPC\nX+JuuR4KvbU1YQNmT9PnHZgIEG0O9PyJVnZdpyuL3nYz7jBTdhN4B0OKcqC+\nPTp81APNMaUvR8bcPNlUA/fBbVYTvNubcmqmro0iwRsllt/DDv6l9hwo4z7M\nWrZQRE9VE7shafBhwDDV0t0Wwt1zaAkEC0buzcD5gOSepHcgcfW4ppqKWmsS\nE4Aj\r\n=X4+y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKYQREzXEFLsXdOyw1h/JHaBC/xRbFqvWRlaqS65iWZwIgChEX3pyemgdH+7ALD8CtE1afw0tm3u1oLL4uIafjbtM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2503-beta_1535146169074_0.26812352699971287"},"_hasShrinkwrap":false},"6.0.2504-beta":{"name":"meetup-web-components","version":"6.0.2504-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"48e865ee94e1b2c6118d5b718bada91c97395b99","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2504-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wP33hfBqSd5Wytz1Hv1ZagnBt7B/bFLIJnJhJaAvPFi9H5c3YhqbKiu16EF9a5j1Rn+VwmCXRNccoQgbBpDhmw==","shasum":"4e64b0afccd68511aff811a279980eefcc4aeacb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2504-beta.tgz","fileCount":611,"unpackedSize":7754803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgHkXCRA9TVsSAnZWagAAUGwQAIZZTBJ0y3V47f+QGEnh\nddOzC0E8PJb4Avpp0H2LvEabnRuPNmKM/H9h8hXak6imcgMYO3NLc3mWI7f3\nF3pSozVY66YgVHQeDPZX04q5OemiyL1W1L9WbARYC+dnoQvuAD09HboCnTv+\n1U93fcfEh+anOfBXV9zMUl67tpYnSgOJiK0nHhO2ylOroLguEsWVC/8GDkYM\nvka+vCC0+RA3fX7bOOXjaCY6iJ1Zhdg1/8/vA9fuFqeMzb+lCKWqDNwnp/3P\nVGnCRDRa1/Se7UwmeqaIhhpGemQr0yYcUpGb9VHvfWrMgOwwIdjzmqGsWhyb\nX2P9r6XEt/49un/vMVNjSf5USdHpoVymoDSYykiw3NiLDWI072dl+XczPURm\nVcBF5c6Br6TDtGQVv3pXh6PxFBETv7fDbw7GpevJar2rMfi6BakFWCFqXIf1\naXyx+mdv7MXli5o9ErSUIdgWso7ZrEcloSi0ZJFZZcspgXE01+E/V1UNwhhM\nhQjXMDd8MbfPmA0yZsjkLgWktdS2PC79zwYf9nzTtnJuC7WAzCQNFOVVuVfK\nEXdE1hvLdocUXGjxiLMTROdVngTqSpeGKKKM03OCJ9pfKTTVeEZ7D+LkMOhv\nGrJdPkuqMFeVK9cPcxZ2JByyrlZXiHjD2ep76ZTK/AaPyELdlHC+KB6oViJU\nVIK1\r\n=4Opw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlM3KkrhOlzLjE5tx+Y4UBoWin+8UCVuQczQVILBfVVgIhANymRsQFWchNPQUW+qOtduprEr1YCkFbLDVRprBfc8vw"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2504-beta_1535146263040_0.5469723282162293"},"_hasShrinkwrap":false},"6.0.2505-beta":{"name":"meetup-web-components","version":"6.0.2505-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"2cc84c054aa9c03d8bc8b65b210e24ac40bdb5a3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2505-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-KdIBwd+O/0UPFIRjjyFfgxYNSn/cY7OVE2w8ZDGKCr9m1UdBblD0FalwDKLQbzAkNKu7CV+RkRR1/Htu5WU2Fg==","shasum":"569d670a18f892da7aa944ee3efa99ccad1a6d33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2505-beta.tgz","fileCount":610,"unpackedSize":7762200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhHpoCRA9TVsSAnZWagAAzh4P/jfJ12b91YEILjFhCZBw\nAeIVEz/U6MHTWvIkZGmEty2YLImtZNng1IN/rEtgg5Ua59L3+zVXdQdTH138\nKaZ3t9CchjY/y7MVdkFUDKdjodxNAbjwxTxav34fvvWBAfarEAHl9bP2ZKXC\n6EwVOF9xUesIXkM0BB0zYGKLir2j9zV1c9e6IprmK19bY77wvDNqhYzRHHS8\niNDUesFTjEv97a5nnNB2HIrs7SO9O7Zk8hBtvn8ZUmZgwtDPSH9ZETuIFHnK\nEyLfIIh2/U/qRbDlXZlmA+SodFkyWlkXlmduV/jRcU7LLhtscoDhMdIT6ktk\nFqKrZrNCCVjf/6nGC5bp8GstrFqd14HWLR/K5TnEhQimijrJ/IBqyc49opoW\nLwgwVXUyvmEhgUGrK/mVZ4Shsh0A9ZxsJoXCewVX6KHZiWigQveB5MLDycVs\n884gyzMNbT9FfMzLro9rnPDMUo8VXtSsesp6URw+t0eVrfcsqL2J9P9xkg/y\nvQ5ObptVQ3YhS88Ze/iqepH1pGoNV8564fFqJTlpELkLvoN5J2RgMXjvsr8n\n0POHewpe16M+GgqxZ64043B5NWJ0OshvIFTGKNu8KS2dn1ZUDFml9FughFjE\nE2FZmmbAeCTznFrbGpcbOgg8gbJCSlXbJSTN4wl2mZTUA4CvDzF47yAnYCFf\nsHmh\r\n=4pM7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHw2jdek6bWQV1I/WXt40sLByANbLw8XLrXbZirSUbRJAiBPFgufN6CsuphojpwhhLxd3e1+6IrXYFxqqmnQQa6FEw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2505-beta_1535408743554_0.26413970880674387"},"_hasShrinkwrap":false},"6.0.2506-beta":{"name":"meetup-web-components","version":"6.0.2506-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"bc7567abaa656f404a30ef84fee4a9dfcfe3f2d8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2506-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lp5dryxTGBiD/GyjiNzCaD4OFJIr8j/IEGtvspFj8TVYZhh7AlhD3rilnWFSGyO4tw2IB8/Jb148tiaNcJQaRA==","shasum":"9581618ef7419b43a6bfcc131f8f3e71eb5f681a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2506-beta.tgz","fileCount":612,"unpackedSize":7750193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhoM/CRA9TVsSAnZWagAAJw0P/iknHX7suIma+jZXEnCj\nBA2xl/52msPlKA+QauLJ9d2254BN2v7aCmaQ/QdEjVpUePlp5xGEJQ25jIyR\nXQrC774jLNQXI19eee9scBufrN7X/3dxArUBwu0AlE9Mh/5hCnzTasoLv5Up\nzc1udn5V5IrrZuMVYthKLiYeKGu52icXAZZI9Q0xBFWR5rMaoucbRXh6RRFW\n+6VG7Dgftuu82y2soVO7Dx9QCF9ypDAJLQBav347H833DdGuRP/cKBVF+FqV\np4mPeFf4BXT7gUgkF+jVly+/rGjYZyOeIyLsYTh4HSMm5Jg39Ewyg9jqEitZ\nmPhmbhtxG/WRJB2TtqwbOMXNIG16FmwZgmp8OMhqaM3IH25v7KFAjRLJM2+V\neb/SzPgR8We6lqM4x5LwAPku2a9AL2TQ2IQEfziQcDLPxEiHKsb1i2elN5ye\nnSvRHItW/dfWOeIknuUcijgPvO503YlAGE0haYySUQnM/MP3iuQB52nE0ezZ\nJ9FIWl96D/LbOL6afEmd+cJSLnNsgJ8jj5gZ9k+PKYx4hZ1SrvgmhEO/XGqs\nfXwWaf3t5PTNTp3pWePDglLfaTqKxvaGDUXVxM7kByv+ijnNWgeAWz5XMB5J\n1hV6Z9gYLJFQ+HHFQWPb4ac5KOm28aRllMDgRyFZhVQHv3hX2DPGqXn5me+U\nxplK\r\n=2b/H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyL7L8wQddUYM3izJoGTWi/43ocoMLVoOWpD328IiwvAiEAkqT0jtjSgaFvDx+3UAhHfsbSzHtSFIOiMRC7Qqb+NWo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2506-beta_1535542078658_0.9315153719755429"},"_hasShrinkwrap":false},"6.0.2507":{"name":"meetup-web-components","version":"6.0.2507","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base -- --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"fda67d44f74440e2f17b659ddac3f38a6058e261","_id":"meetup-web-components@6.0.2507","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-HxPSSs6Z9JZa8FiWB2UYdvgFst2o2acx/WHA6pp4+fpUc6cwO4kRkiAZfoO/7HgUhY7kLq2+MlTmrfRNLdUtwQ==","shasum":"3efbce1b2b3185d1cf9cfe42461a5c80b81a360a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2507.tgz","fileCount":612,"unpackedSize":7750188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbholbCRA9TVsSAnZWagAAGG4P/i5XvAaxClAQjcp9pJma\n/n17VNntNbzCwplaGkjjHM+N5guEV6utDgFvO9h4froj483GnsJAus6FBQYP\nPFe5E8HBtK5oTQDsARkNV9LZTSHkxe0yJizpsPaspsPCuKNcRuEGxhXhH3wJ\n/ldsa35fZv/trYhPqW4IPUAh9OsWDWF1el5JuIaeLTdXDjaB1L08LtfP53RP\niw/sFFlQnq1Jhlad3ca8M1xDTwrPpNJlvZpARsNsuP8czv3m3LafGQGZdV0M\niaAOjnQxp9NFERI64DvR8ByOGGym940jo+fcNgTYkjd8F0EBnVfFYf1J+hW5\naSK8FelDXZVfCfTOXUtNp8DuxCVMEr7uXPReOCgxZod970EMqDQvWAMdmiXN\nfYpBrRZUSm/QMdi7alTN4LqvjcWUzWBCw71B9n8kik2ngCkD1wTZ2t7mEX/S\nLi6my7fDglc1InHHMZUkTGN/uJpnjTt5NkRitDybW05E+EoJh0JkABTk9vc+\n+yZO7rZO4/8udq0vtXJhJf+jd/PDS9EGOx5lI1OzC61AV6mkA0HBm3F7fyzc\nNrlBuYt1wRQyberAjoDZZsuvNrGOUBfE66XOZPZU1jw0i4ZbgBk94XG3qkOO\ni62Kdv7cBll+KfaxrsAPQbfHX7fLg8+ORvzV3VSJx8/NQBPevNOdlWvPcLY8\nrIGI\r\n=pHBC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGu46YBiq1mL1hp8y/PgxfSM1hVJz4yRhYYOawQJdwR1AiEAryI1ONQ9kgbrg8p6kfH/oHavYin7qbVEmJy7UhuaI9M="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2507_1535543642614_0.4473759166774831"},"_hasShrinkwrap":false},"6.0.2508-beta":{"name":"meetup-web-components","version":"6.0.2508-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix"],"**/*.{js,jsx}":["eslint"]},"gitHead":"11a3c6177f95e912799b1ab44e903d092d0fcb37","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2508-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6Ob3LUgkCbbPRXVfvNK6rAx0CQ91TgLm0GyadT9q4DSBIWCdMwuyiVWbDXYXeOCd0rmXAtXam4/akWxvCNkMzg==","shasum":"d7a75e40f8d181fec7c33a6bb297532234b62225","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2508-beta.tgz","fileCount":610,"unpackedSize":7780387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhsU/CRA9TVsSAnZWagAA5b0P/2R6Irfk3AuQswc//Z9E\nAVnz+apKkyzD90jZ+R+VWSBTVre73V6JuMuyHTIQNd7KxBpHXXZVjLknthP+\n6CRXp+11qKjWBzvwcY1bA2BSB9BOPkMRp4QhGigzB3z/3/XI02yDtNiUlI6E\n8WP4rp/KztsfOU7pe5JtCIEe6GCjU3gGh05taZNvfZ4CsGdWhruqA0p0b7vZ\niwCo60ok7PrrEyeGJaWeIC/KKqKoktcHn35XynT4PY0IKGwvhd1qO1XAu7Bw\no7h86ANOH+Gq6caSJUe93jCth6vWZviz62I2mNyl7WvBsv+yuR74JfAz68WX\nPC/b4l6S9j8Uk1ezR1uVqfCiMKN4zWdfszJkKmSDjh12/n+P7MVBKb8uDqzC\nbf2YdsKKPz2SU7UzLtakYbpu4o4kpf1PosjUUtr2TPWih5XWyp8KGLJ0V4e3\n7zgQV+YMqCd3KVnMPaXeGtsFHp3iOQdBQDu8gUz1ZbBPf2Zhv65/fVDqqQck\nAl5r0tuiDg/KWtdeUrNPkylyXR8b70ecJIkFwl4hQ+chrZxePjZio+763eoa\nX3Y/3d9MRnS2VNMXR07yBiBzoES357fiTwSikNdW+XD6EDb9dwOBa1KTGlxr\niikvM9oNP65iN4oVWnh3Og9e5JvfV0rNs1aMLmxdd7eMj0mlbSqh6h6ekxYr\nS3Ys\r\n=4R3A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu/RdoeNGw6EXR01sbe56w91GKyIVanDM5aN6iLEFvoQIgIosf2N1Rq1atRihvndGbtflrBhOVj/n/pfPWj3h/n9A="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2508-beta_1535558973866_0.37594232945850226"},"_hasShrinkwrap":false},"6.0.2511-beta":{"name":"meetup-web-components","version":"6.0.2511-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f3615e759e2b2acf18a80689f192a16af8ecef66","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2511-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lm22/Hu1ln45bIghc2kLwXzM55iTQNx+17k6OjPTmHwA1GzXji4S49AGFeWILEFiZiuEvZSeVNKKBJ4k1KmVLw==","shasum":"3b5451626f1b885d2418f38b6b1cf8b613df9f33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2511-beta.tgz","fileCount":610,"unpackedSize":7776403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiCiGCRA9TVsSAnZWagAA2VMP/A5y8ymDG2467pcnizN8\nVgeuT0cD8LPgpt+pAbry1kEL9Xf48Zejs/SLoH/0YLWpKc6popO2IwrDKFXh\n/9EyEl2EhHSv6eqCNMP8ccSgcUtqdL2KNzhLBmyTsKoMV2f4DEIhuM5D9hmy\nwGFlYBT19F/jDpnZHYNhoarm0Ol9H7LiZ8MnhL3L8pCCLYPDNgEqrbRedbGJ\nwIScmhS7J4lV5sgZMOvfTITU2kORevxl2E89KQ6kjeuVP8zgzwqalWQFOZy4\npl2rxMtYwyoin9OGvSTIjQcyBEWRkiS9fCcXLCWsOjODR6sWaLwFX2PyJxI1\nWWoOjSvP1qWJ/fRdbnRzU1Nntv9SaKJW93W0DWkNPOwBXN5621+C1e6Qs7jn\nOpLW6GQDHL7xUrWzPnpOL//JPR7IGK6ckd3GG/66/3GRK1tkxVeaa4TLvTMD\notS6r5fe1tn/QOj1gCK0I6Ewyw81f81uvvxZjxxNfvTbST14sHLNdOLs/+fn\n2jLegEryl08yAsOIc035JAlTR7sNbhoapSHFvriKRsj0IFr3tUlPLo7J59vw\njFyOKWR42D+CQiXDNu6W0CgaYtQYIbvl5vGprY/2MPAl1PWSUSz1vt99rBVj\ngBnLwHdUyrR2TBmL/jSk4aIvTs9GnhY/tFutgU+ViRHIXyQBXA56XFLEEIWu\nfR9i\r\n=m0RF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPF602NV/xjpBIN03Fm/pCnWz2JXWd286oJ6leE/wWTwIgWYu1xzTIslNQjLCPMeGI5//tkHKczMMZnoW2qoFcKpc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2511-beta_1535649925242_0.43118924039519535"},"_hasShrinkwrap":false},"6.0.2513-beta":{"name":"meetup-web-components","version":"6.0.2513-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b042463f7a33e5fd8b75d6d5d9f87fe71a8bd95a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2513-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-M31qhMsMdkIL4VEHBZUfjH9L1pEa5zUgtpgBJdHiiOEWMiBdq8uPUq9I9CJdqt22q1o1ujHSNOsglAqi9+IDzA==","shasum":"8d7a4fb8f3e1d53c043d1752d44ab8af8d09e487","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2513-beta.tgz","fileCount":610,"unpackedSize":7776032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiFBoCRA9TVsSAnZWagAAmewQAJOX8XuptBVMChIM2OSl\nVQAfCCDfGe26WcH7s604ZkzglEIBi7R1uhrpmELetKRnmytJ0MvGv2sA+5EB\nCnHLl4NN66foZx/gi/QswbVI8AcRaCAmF6aP+hjCq96uCxWTiTVQoL1hIHHw\nQQSrZQmzYSz7HesryI8XBYuO3ZSa/WVF8clFXQIqXWNwLK8bjEoirIzDIN8m\n+AfIXn+Y65zEIyqFBg6mw83xoiO57VoVWZ38PfgcSw6BjF+BsEoBuIQL2shC\nKM707axrmcPsIs2EFn2UuF7W5o2CXt8b1Y9IeKHvLZfjDUoIuE987Jpx47yi\niNJEFgJRcenZmf9uuQm9AK7UHeG2dsmjm7fBcA/MoRyrMDRp4caq/7jKSKx3\nZWbk2tzgTMXEYYmzx/5//LWu7SIZuYCiwTk7QtdoafEPQJdhXhPohR2+BBW1\nopr2eDupbgTQckMNTRlJ22HSaRT52keGKnwfvs7LWq1hIWzXSkh6AZdOctuD\n0WMSKUFU3d1ZMulrISFopkxa0jg+ZwOZ5QqGjSk+tbwKgNmd1l39D/CZqO/q\nQAsIqzO5aC6J8vP55VX3+OSb/uxlgWxfH/HmZ9/PTJgkqG0cj676duqghA4D\nn5UvfRW8/LFmuLWovp5dgW9Zwldc3W+PNEyrKOnNzU9E99Tx1SUXTJ70CdPB\n/sZr\r\n=SZiI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiEKRBveeL3iPInu0y52D3lWK/FGH6z0Xi/vlFzpM8QAIhAMmGWT76Q/DmQ946ykNcnBLgLUosnlwypETNIIOHaK+q"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2513-beta_1535660135400_0.1914586436675516"},"_hasShrinkwrap":false},"6.0.2514":{"name":"meetup-web-components","version":"6.0.2514","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"010a542bb65a04bb546f8719fb43db9cd9d26b28","_id":"meetup-web-components@6.0.2514","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4YicbGQ2j5jFZXMZRYqATxiiq3kiQ4qyQtSCnEeMWN25HXTEaW5rGJWmA3fdgX8U/jUhcVnpKQmaVx3L86Zt7A==","shasum":"275ec3b21b768c0a679e456e0ad7c794bd7d87c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2514.tgz","fileCount":610,"unpackedSize":7776027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiFHECRA9TVsSAnZWagAAqPMP/RBwUsbQU4oexGFkqmtK\nWSLWMB3jlctPEXVsTmLq/OI43iccO0R3yk4WcKkXOBkxipWHfwIVt5cVgC7F\nYaiXFHGv0EOFWcInhv8K3YdkeQJYHcKlMySC1xWkNuIbQtaYgkb8SsLGmn49\n3tnq8tG1EjUJfnQAcshuMfjH7bTcZtTnX+HiflE4a5OwJ++rlCliOxFGHDrH\noQ/IU37iYtEAyu9ZZEKJn0w5CotyEah0KI3BcmFomg85aFRJV+SAB7swIJOc\n+OPtWfD1s1LJpNYNt9nMmsHFj3yeaIBWW1dFReKG6XK7vFVKeZ7OjXSeUcHy\nVzeQxER0MGQxOgEk3qMYK7tbuxFOcRICCfJnAmQLnlg3L20fPE/V8tAuRqIW\nVQgbD+8TiaEGEWDLAy4tuOP3Wxulf43g/fTuR7bgLysiQQAQv/KSD0UA6mke\nT5EpXh8jlOY+RhGV6qov4hCxNGYBh9grBRlztOzAyiP0t1bOrx9xt4WpNRea\ni1npG3dadk2u71McVVrxpIbuRufPLBGFG355sgcusKCbIjORzw9xnmdqO0xz\nN6eBH90shOVDbkxikIn63Z7S7Upp/B85HrzVZi6jMV6hE+oqIJXl8HjIQ6Sa\nAsPoXzytUkHKXR9wjF4CcyUUvrrT1qLCKgwKX1rgs0oNzJV8l11/M/Y4qMAy\nR5wG\r\n=Iww5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1r8npLC88F9HGy/CvwF5XCn2l1/xfBgT6ifOKcho3UQIgSjBGId/tH1l1H27TVvco4lMAo2yfZYabJ6SqDkJ8jos="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2514_1535660483878_0.36588482331036865"},"_hasShrinkwrap":false},"6.0.2515-beta":{"name":"meetup-web-components","version":"6.0.2515-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cfc9427bbe6bd1116e2f31ca0dc67b2655be641a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2515-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/lNEryM1385B3eE/Ag4r9ihrWvaaYqeVkpa5S3ddWUTYIQIQ8fz+XG/yUOGGMwsMHuOSXbzP+5gGpiJnqdTu5g==","shasum":"7b45f5238810799c1ade6b7dc735eeef6939238a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2515-beta.tgz","fileCount":610,"unpackedSize":7777618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiWJ+CRA9TVsSAnZWagAASEQP/3LMJo7Om9ygespolWMc\nv5737D9e8KrK5Una6qsICq3qXnH+3XPZ5JGm1O+UPDd/hp7BgrN451StXi1g\nicwToXBS8Q5Y8lw1+TBJdzdcpagwwbMdtrAJUvLgHOAdPy2Ptrfr8Y9T5oQJ\nPnZEVdjE/F2jOFnlwGxLDrGsa3mPT6ZD1NA7Qvwth7AaXVNNvXJTOlEuJ/kp\nNVa5p/gIg+gBJGzFL5yo9OERLCiRtDNe5al8VtA2EM5VHjugtAUX/dmZhT83\nMQoZaLnlvZUiVvhE0XsHRbdsQlNH2VOhV6qwBbL/IJb3Zu7bRQs5ql75R2fN\nJ7OSrRxqcI3IfrStf55+maxbcdvNFyMQTlp+HpLet6f05mMrKd4Gp8/qurIN\n5p91JdOVqTJa17VueJADUF2DRCfhCl/nBtZazOzs5aWDkLxSgWKCI8fo25HV\nRIDN0BZHne99tgdFyJrCOmj9lGGrPxIhwnue0yTBGQByST/h5AooNLvR9dII\ncIP+Z+4sL5F82FCxyNrNeL5YqHKjYOcffs7XH9MJEZXxJPk4aUP/E3uJ1GZd\nDKWYFrCpGkK1p0QK4EoAgXT3C719mjn5kmGApUaPQIe6Y3W6EXxTOWrcUE88\ncx32ptPqcl9j2pJZM81GR+I/E+/Xav6rViUebrXiYxcl0hYX0r75FSKFspGC\nJ50M\r\n=RcRc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGUCmL0vppmFvh8WV3Obh0s0YXabPQ00gOiDH4xIH7jgIgZOqDMZeQC0fvSk62fdPRhnBkq2Ut1eVtsn40a2eZ8+g="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2515-beta_1535730301284_0.5172508885810585"},"_hasShrinkwrap":false},"6.0.2516-beta":{"name":"meetup-web-components","version":"6.0.2516-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"544968bdb7b1f4ec55275247c09474b13fec3e2c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2516-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-PIZfZP7x4q53FZJHi+LfD5CxmTN/H0CaicYstWdulfDoHhyX77tP3C/T2uiC9qsdpWJDqFVDgQXm05Em8RYlAA==","shasum":"745467c1af8b990bb44fecbf9da6308f7d3579df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2516-beta.tgz","fileCount":610,"unpackedSize":7777858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiWU0CRA9TVsSAnZWagAA2YQP/i+c5vVkQYV30cHgbf9z\nCapqh4ys1DEAVUu/W6nakru0hexp/t+nu+P6JwIhkuEA7jxyLNVflbsWkALP\no67a//iiqO22MDkUvhcslVpcCwsghntS5nVDreQT8YLGPHsvseU1CYJnLSBp\n82riS+KmhCj7Brq6lDAu0yUrN6fjS98eeWD+1ImX7qaEvc3gj7tFR54M8Jbm\n4JWpeV1M2DCHN6Y69cnYu9DrdUmZg6psvwoyHHSpS1btYoCtSatG0B+5c6nr\nvX62jMIjFeCtDOisf03PeaW/dKbDxItk51lQimf7th3pcMqcESuagHrdV4y3\ngvSYo8KmXpMkGxGUoxIZY7Nj2bdU0615YY0f5omWtmjw9MxY0P37L/+WiGk0\nwFgyzX04UxEv5jVKdM9pIJ9SwN1rNjZ0iA/cy2wTF8yKFBF4TlAmFACZUvyZ\nI9dFeKZFeiOfNf6itLQbA4GtOJwBf2VzrN0mc3nUAlZqiEoU+SHfRc5IiYfM\nPWSm5HB/9Bf3pq8Hz7nIRCoyqtHKgf2bgN7bY7te4ma1w/1QkpOQgWku2ubz\nh9qI72tfHtFIzqQv9YGUQbv817KQdtEgsAeWXXOE6cgoEfrvGEdwZunYah12\nd/Hg4hXA1gYU6DKLXKwz1+WlWYQNS+xeMH6JbAl70j8YJA2sZW+l78QdVP0Y\nPwGJ\r\n=xjOC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID2xkHcvaNXB1QZuNDAa7aCL78oudUHaRpsT9qN+TOCsAiBT4Y1Qucj+od00ZAExsmLZ31ENiUHLu8fckEYlrba9PA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2516-beta_1535730995831_0.07193055805263593"},"_hasShrinkwrap":false},"6.0.2517":{"name":"meetup-web-components","version":"6.0.2517","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"aaf43027bba8599f5ae119ae910cf94a9617ce0e","_id":"meetup-web-components@6.0.2517","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IUH0GvkCv1SUGzZTIrxS2Ix50HBtm0VZjzP/QW1dxRI1Ohs/QV5V9lGsv91L+lbO3q7wE0fX9AJ5fhw09k2X+g==","shasum":"1b61b8b4ad0cc76c0d5e5de3f4ccaefb92bff988","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2517.tgz","fileCount":610,"unpackedSize":7777853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjOyaCRA9TVsSAnZWagAA8BUP/RsFdhMhjF9YN7y/2UAr\nyjf6aYPlEpmXT1vbFMuEUafKJmJG/NiDZNqdrr7s3DZ2hFO3lgeFVIo6P84+\np1kYRYcCWto2TPVkGZWDRYF2ZwndvAX9e++nEejZuf7ajRC/8EOzt7qcrpcB\nOV+otG/Oy9isbAYiyj/wkJ4basJmcMpzq6zvvTpA5cHEi8Kx8yquDYxJzs+K\n9Oz8zZgQJlvU4aH0gbbGy3C3cJ1HwVU7sI9aPm6JBCi4y/ysGeGNCsgZyTL+\npLVdgTcj/GuuiXorZ15rEi1BGqqdDIiG7kUGw/pHWgTUOpfRXSDry0hkn5Th\ntCZxs+qK2qkFxE/+Nl+MTfNfkYn+kTiu/sjoOt1kn/FaWnVPk9WTagItiFXY\nKr+fULXUCvpyKibbDQSgEfnSDlxV3lIh9isyxTH22WKHlTDiLy0+IRv/Dn8Q\nG7P1FxKrozM0X6BR7SUSy57oeVYYlV49y/3B2H9N9V+QXh8Sh0ouWvZvkNzt\n0E/GeB6ERl9vPMx7/pSMqO7UhjQBTRqh2cuEZ/wLaG3xoeHDOcQRxTjsOSxy\nWxv4hNYqQccQjhtMRJllevHUfs03odiw6J7m2rwVorBGWQOWQ8zu3ALhNrEb\nCIOkAy3nQc9NVz3l7yyd5484tic/iCLzn/rLd76RsEAkfdoRqjcJXeCVZ/zv\nbm5F\r\n=NVQv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8B4Q8jK5dzdOcuKwYJHMabmb0zzYOFLNR58bqI0d/qgIgMBVRBGW32eKaKfLeSGw9dPR9R9mO81zPhZ6GDJJ2iSM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2517_1535962265386_0.631092210591409"},"_hasShrinkwrap":false},"6.0.2518-beta":{"name":"meetup-web-components","version":"6.0.2518-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"face11a9234c52cbf075fa24da45006120a93113","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2518-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8eDYYzoZSVBuvzHJSE1OTwCtvN7ohgdkiz1BU3ZuUx/+w8TX3eh7SVJlSPYkr5wgvaRrgCkcdwDK5sv3kZAsEg==","shasum":"fa636e434b5a5ac802c29caeff0acab962b334d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2518-beta.tgz","fileCount":610,"unpackedSize":7777967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjTirCRA9TVsSAnZWagAAkEoP/2X80bHyYcshtz5XhjGJ\n6Qqvw4o7EcmRq4Udec6aYemL+0TQ60r4c1ljinP9FnNtTo2eXiVF69zSqSj3\nhG0i/oofF7dsiaAYAkSZLkFKkcD0Uk/mQ+z4udI4ME5EhtCHNRm0aJlhvXCU\n09NSl13YnYlWCLv41xC1ozeha+8Z5nB5i6QtzSo7viOHdcpGk54jpKKQMKZa\nMa1UlwNLl1biqyOHlYOw8r/0TiYOKR/lLtaAwWoNEWC26VJW9rBQgfGQiRnX\n4O8QKe/C4/cDp7G9OCazxnBS/7reoT4TB2JX5D+MjRfa29WKte/vyiU5btUu\n5Nf8jvLGcD2XrNQI0ZlM9ct91tVDzF8NSB87jOKPbHCV8tDdmXnvHvV0qX6a\nsY5TZwl2Wk/terbpQZOpT2mHI27o0ipsnUDQcyOGr01RuNf1GU95IFQR6K3S\nZdhGthx7eygVlvEBaE3VdrPea1La6uRiCn64C3Er3XD/WoUqfNmHAl9P5sSj\nctfg6X0tJXWOQQvlxDD3G2o0OwcyeAg+kGsF24xgB69hQqsO8kOndfRkDg3J\naV5CLZQTmcUMs5rNu0HdJPxs5VOJqUKFPn9MzzlncSaLAnaO2NNyjrGkRYiH\n1LV23bEDd3TbqjDiSdQBeLd9b0jfoP2SU2d1NkHuR4+gBGNTZe6ghmsRE1EN\nTI9K\r\n=kV5g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDayXOrd/aoXQLoukBf/zXjWKATcgrRiqYE//ecJ45kAIgEv4Ewk8JKYOmh8yx6TzBf7WP47UoMHq/aX5qfYgvWOI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2518-beta_1535981739013_0.7374529906939877"},"_hasShrinkwrap":false},"6.0.2519":{"name":"meetup-web-components","version":"6.0.2519","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"73b95178223e62159840abb524f161df353852a7","_id":"meetup-web-components@6.0.2519","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GRNi2dNCnBUfJ8SDT6sh+Q3ZSGTrgkpDzriC9TeuSQuaXH1Eg1Wua37cwEjcMVV5760B62xZPXTXWwhzuzzn6g==","shasum":"52709b097fcf1423f5fdde651c651cbc9d89f961","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2519.tgz","fileCount":610,"unpackedSize":7777962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjTppCRA9TVsSAnZWagAAnSUP/jl2Jja+od3RtT6g4NBh\nIpW6BuiDDYIJj9v9s4xaWTWZYV0E2RarVfYDh5DD1RJPk+cVlWqZosmTSUOo\nN0Bt2EGutJKrmvntfGywkn82viSDLVsVuueJDMCy/Cs+cmbyq08q1h82mK3t\nUY9gEBqOWKemu79+COOTalvETzQUWMXXArKba18ZqZrHmnW1xChT4JcB47J1\nIc9t4UTBtMBn0EPfIqe58pUH/vIYRO8aruov6mUwHy+472ZN6hiVcnxnDlGX\nyJh9UbfOulrN4HUbFirIFIG2OAxUTIrWg4hvM+qJmppg6V3IKX826rS8evzf\nJjzYv8BKtHtQ1r8CkOeHCw6B24mUSbqNqzsKlmtmiq69eSKt5GErkcLQazD2\n+O55xQyoING6i7MomjuvLP/kRpomyc10an6k1vRU9xx00tTjyGOFKHeJr4gC\nI3xmXeslw7IHzFKhW73Tgqj+5U03M9cd1u3IkroS6fZaxHAeUEysXv1pZXZd\nHgljREpLV2WZm5O72EMJmSfF8YIO0L5m3G9UCguyCCJ3MlUT5suuJxR5ylUu\nxZyWcrA8L5VuArStrHwBrjzUX3SsUZeOzrtvvHc7o2UhSZrzyrygBVy9jiLW\n6sdT6Ij/cywSuvCD4+1LVP0Sd6Y7G/QhCURDrJBlePD5yDFx+P5S4MnDuaMp\nxPjJ\r\n=LjfE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDkMSjSz/rJXJ5cdZArDUt7pycJ7IWmCQ8al2rXBkmcAIhALo1mEA8oGgs5dJLlD5IXfA1OBvqa3iX68dsVH6xajVT"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2519_1535982185015_0.14732997577077978"},"_hasShrinkwrap":false},"6.0.2520-beta":{"name":"meetup-web-components","version":"6.0.2520-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d2e87a34a85023302ab69fd5c623dfb6fb415149","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2520-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-54+NBfVFLqQL6IJ4VnR23KTyQUqkmsl8vqYNGsQhWjj6Wzoaqkz3cWBNx8NeTqzagsJZxJ9w6JAn6/ejkqx/ug==","shasum":"b5adbf538704b5114e76bd24da846f9c81e2c862","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2520-beta.tgz","fileCount":610,"unpackedSize":7784584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjqnpCRA9TVsSAnZWagAA+xcQAJGb9YjueBwLq4quV6Bl\ny6xKJFUTZVYMGl5jwWW2iybApsvxVT7F46vaIoXVBZ0SuO5Ohj/sf49hmE5/\nYNKuVeZxDi50SDlxN8Ik5/hGMkiL8ZYFn06C4J4jyI//nWz/hURld/aFtMPL\nBxgsRPKCJu0cMi7nPMjEFrlDdPgWekNuiTJFPm5C+bcQEZLaKOWPLBaiE8GR\nZpI3PbAem8LSQXlU6LuYrXLpp17VT+r4qW7UfOBBO/X9pMKy3yeNbb+Cq+uw\nL81YpEeb4fJdgYI+CY0j1rtXpitFRQ1VPtdVj+OkGH2C1EYnRkWkcTjES+D+\nQ11glSWK/+gTuPOGoqLRbUNDqUMo/171px73cq9eFyWC7N3tjMFUBjOUqFDa\nooqLQVonCQymW4edNivJ8SJHyjIYtsoKZMqUGefUG/x0YydqhYc4fHpHuE6P\nAlufR7duKhlwCx2ebYsvTLRz6mML00r5iLxmclaUlA8Tov9KATRR8SRfFn6T\nW80e3UMRF8W/E2eFJBwMRK+/u2PTozabih419+GCQPWUEby164Zthres8qHX\n4ZcN3Z6+6nv93oHAcOq35PpRWP6PwmjaPzt+HCqd1M2mkbvGw9van+HU4aup\nFfc2Stkpcn0EdjAFayD5t5p4KYQISf+cq+nvka6C4+lKQZY36APdspkjTVYJ\ntcx8\r\n=LMrE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICdYm3TOX7ALyOB7oxSRrw/klZa1wP47pbIiXbdw3RxCAiEAhuFOZbRl9NUjRFFPnAlgYi4ZEyxnHiqNC8aC+pXsSyA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2520-beta_1536076264504_0.4041154500089643"},"_hasShrinkwrap":false},"6.0.2521-beta":{"name":"meetup-web-components","version":"6.0.2521-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4e41a9ca242477cda8b133b6c9a8a94ebd8cc69c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2521-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nvPh0RlzEG6UuUML1DLOqyyIjbXXyKMpcd+z1yuvRdknM+ddtp1jXLImhyHQh6/ry87iq222o8o7TjiaveguHw==","shasum":"3b5c223316c108f47dfbc27719f646c6375cf428","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2521-beta.tgz","fileCount":610,"unpackedSize":7786458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjqukCRA9TVsSAnZWagAA9FIP/0CaJS+RSeTRb0jMtWIF\nNlW6quVWovPJ4WNOMBzrqhzPdNp/c+soN69KCFEQSf0hW7TIvIHDFJDBAVYK\nAzeVESKZb/zZvhlkU2qcoKGkAU6elmO9ixp6DSwLaaSGHoqlUMtyWRFZhIH5\nmCCVS7eiVRC51HEerssKm5zDV4ZHz5dduHaVAut4cUB50DTBEaQQtIAneM4p\nGpw4iRAHigEvqYplVGTSuOTRoFT3s0P4xs/Gc91wKxAxaBWw4MWnjZcp14sD\nCngMQKCQ9kKEeutSGF7FzACOGdFblrmacp3i2QfpPUlxDRUqaxMHqnV1dm9+\n8we6n4mQ4yA8UeCqaNGoklrNGkldalo2opSiOPDP07G0KBR8Bfuzj1XLmSnt\nJw7FO4mgMdPMO0yLBXCObx905PlIT0qCSKgef/rVVQhBRawUaIuNao2ZotdP\n++QqFG7aT1lCW4AXqpWyKIBNo4mgx8UqZ9lqxvna85YwqBbktxmBm2uFLDEZ\nQGgHKxL8WtFaZY+823RwjdFjL4qtUjt+mGKg4BpwJB1HWyJEqHtKqL1Xqezd\n9YaQLoIjCcq7NHnhzXZOgd8YOX4JG24mSM3QRv+05JUfW7rtsEW/uEMlgjGT\nY9Znkchombq0ElotY8vM6vVV0Cpn+z7JLe9x4LVNH58EJhu9hJga8j5dAnAy\n7c61\r\n=IN/G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFvMYmrRe4O1XrO1cnUfm/c82+c53rX0rL95pZjrxDMvAiB8ewTTSHVrgp/+YpeuvPh9tAfERN4w8blR9Wixl063og=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2521-beta_1536076707623_0.7180597413289105"},"_hasShrinkwrap":false},"6.0.2522":{"name":"meetup-web-components","version":"6.0.2522","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"838522e1c71699b9f828a6f2aaf63ffcfcd29c8a","_id":"meetup-web-components@6.0.2522","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Dv8vzovzyI56e/2xopYmvQ8iaL7M45qbate2a7UKl84kWnRiku9cMpsdnwjtTIALCQt6YrbC/VYQJGx0YF/Sxg==","shasum":"1e4966a072abc61f4791f166a3c04d0282a03e48","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2522.tgz","fileCount":610,"unpackedSize":7786453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjqzJCRA9TVsSAnZWagAAa6oP/2wEzzMC4Aj2i3Zx7n8w\nJfw0ff3n65Xbfyi0rlHHTAt1YfXmwF1DwDxVPlrQDo4UHO4FvuveSrG54f3l\na2YtDWoELg857/GNsj7Shwr53YT9pexPWlamZiQBnuKNbnYYnFqmivA6jYEm\njNiVsEs34XXj93jUtqdp2N89D/RiY6w6lkat9PCnOt7a3JgwFm2A3JzJIgsd\ngLnYBwZ4GPLCE+S4lMGhDjcZEL1xZC790SRUO5fHb/TRPUiwjld39kLx2Naw\nToDXvM4LyDonxsp/dwlE3PNzqnVcPL4VHk4OyLq/ImOWzGwQHj/j1rPVdgNj\n993AUnY2BkVuWC9N1YDJcblOxlLgneba8yHtJfPWzm+pKZsj7x6rUTZYH4zG\nGbJaEnQkT/mRVy/OqTqXsMc98g/jmEIPLc34D9AB+UlTUN10unWrTDUub5Sc\nPp3FYyc+91FCyyQ9gBEmDcx7SjvnQq7gDsTs64aIng9x6agR/U/fMTTPEiWl\nCX+UetWaPXR4LjEjnaQOkVtrSy2EH/3YCNI555MbbPId24jq5uizsNmOv4ks\nTtFKQCCUR63FziJSbyvbB2ymuKQ80oBrYRDzD+oFRdZXTlUZZLjSg9hyVspq\n5U7KvceNeT0xuorBXPKHu/nva9O1hydefpNZlJkmwLhtTx9/yMH1uKT4AzQ1\nk3an\r\n=RJZb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGzpORYDq0l204a0vmbGEYDML2IsB6qUFwwRATyYcz/DAiEA40/aBafJPH7UjOfdoyudBCGbMU4B87RxOF5osma6W9o="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2522_1536077000759_0.12714730391840212"},"_hasShrinkwrap":false},"6.0.2523-beta":{"name":"meetup-web-components","version":"6.0.2523-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"521186f29b878d8f2568c4ad645d7e3a5fc2ef4c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2523-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UlJNEoLFXnQ3KJZE/dpztDvou1wgteY1PyVvULRQrf4Z8rzyY52baWvc8SV1n0sC38ZRze8RUUWEDh8TYsH/Vw==","shasum":"c1e1878ab3ced1444dc5a304927e8f0ca168a6bd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2523-beta.tgz","fileCount":610,"unpackedSize":7789178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjsF4CRA9TVsSAnZWagAApxgP/RgR/TopNA6apoxe6Y5H\n1IYcE4nQNUIsUxmUwhAkOem3SjnDwAPJwr14aIcV306GammEh2VeqgOAIFWX\nnP1ZT3Lqu7+D2BORd0vrMasa3Pv+YJfYELBNpdgnE533IIn49NygdPmfqscW\n3C9A5GmsQXEfyf6txk8GSQGkY6vyQ6guRrniYTNTW+mx9JI5maScNGomTmys\nPvWmFzkRNMMp3FunR4hFu5mxcQG/HxFFPFstj1+7jg81hi8QCLfZ3FfaeD/I\ndOsusE7KRBmcsC8NyOA9c9xaURCV8SHHAo+8YKYHl1hIoNo0FFZXjgLz4exe\n8RTU1dH83t1EfJTs2F9deryjhdQOj1cpr9W81htsJhN8lCuMmRgJAYnU0JtJ\n324y6hTvfr5MR9bIcqZhfq536mEG+bUNziNsjiAp5LXWdiPcUBQqACeNvu5a\nGQHG1eKJX5puGH80wPXYt8Ar46DVItVQjQV7wE7CUJlH4h39RGtVdGETdIV3\npwFZs0OBk8MO511C4UuVg63sygoDCS+UR3zpB7JQu/OvExAlAz1wSvvWpRkO\n1aZkcgU7nu6llfG0sM2ZG5+Kpv4Tv1jrSH4FrjWdIOk4sHZyZp47I7TFOzLe\nxTA0/BT45FVjvniuBlQ/FF9qyTIMu87gpWLh58VcN7mBIJhm5D7LCe7Wk6zn\n1Kub\r\n=m6Zu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtz5HIXBx4KH5FTRCtt7NEmgF5e95UIkgQDlXe/xV+7AiA+8pwDVKSFOomWSn7kS0Jdr7qv573it/iV8fKz9WGOhA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2523-beta_1536082295233_0.5033257118984822"},"_hasShrinkwrap":false},"6.0.2524-beta":{"name":"meetup-web-components","version":"6.0.2524-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"50f6d4acc40b8e5df3001d2a8be3509a0bcbba83","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2524-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-BUS0lWyYjQDJPyVA6XfyL6860aZODgvUbAH4Ov1OlTg3KfpL8btRxJjoZV3LhDaz+ob26E9/eVn3tNohRqvPGw==","shasum":"b479080999cd75b17991893529c66d2d8575333d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2524-beta.tgz","fileCount":610,"unpackedSize":7789473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjsIqCRA9TVsSAnZWagAAwOUP/jodyVRfK6V7XQxsZaTa\nGAUJsmesmoJr7ttzQRGiCAuVjf7039VnfzulTLuL59p/Cz6K3Cn6/5IBDZRi\nZGsg7Duw9V/BcnXYEPab4UL6xBD54ck5XloAvUffhp4dx3UUm/dKUS47y/Id\ngTx5fwNyr4AsklEToLc3IZKyUKr5TuAo+2rdKpFl38Cr7QHk0fNDory2gx9Y\n7H5VXBJAWT6/N+xeGdTz8rVj4gw6gYrQhZJbBb/nSWQ43y9UJ+HAeQR7GAJU\nztbzK0hzW/iMFAEJP6ZhOjWqVCjiI+yrf60T5CT0fXA+wU6qAX9oDC9qbvqf\nIaaRN39bsD1RA8b9FZfFM8crxO+v30zoMqoL5WrDBlgU3CDMibag+0W1M3n7\niHDy1nIwxMZx0fWIJtS15yXT8k+F4fW2hEoPl0iY0tsoK5TNKfw/kXnnVjLl\nEqxRUlwO+IhKLe7izjjrl5QbpbYTNAYXH/Vq5qBSgs3uUTd7jl/o7GPFPVzX\ncbHIV7XapS8qNhi70/iLuwu9QGx2xHJGghqjKOlsozrVlAkXcV0JpwhVlpdV\ntx1TE2jYPk6khrZsyDEiZgqqLCJvBLylWzwyhli2XHoo120FeV5wfp0EbEFB\nSLnrGtFLf1ABSlIueBYVuLjmyjAegxqgSWyK81jwnz9BpkL2KrOpIGN4QQke\nZORZ\r\n=j9PG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjk8/IO5iFR+/I4Rfcvj3v/F2sk5VGh9Ss9zKPH/EzJwIgRwp+Qwis8n71PHRSkoD9zlD9o+CfeKjdT5TXBPpdn0E="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2524-beta_1536082473424_0.18863017719171227"},"_hasShrinkwrap":false},"6.0.2525-beta":{"name":"meetup-web-components","version":"6.0.2525-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"93eb9884853676e5313e66d1b675008831bb5160","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2525-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Ppcj12XrMa4Fd9sH5od82fC7CON11dlqtGzywRjKeVX0PX6E6TKJBMRJx1Wz5xFy2ExHXPjaIFHjUtLiOK7pGw==","shasum":"9a8374005e779228e09cd416107cb59a3c81ed88","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2525-beta.tgz","fileCount":610,"unpackedSize":7790709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjsicCRA9TVsSAnZWagAA13cP/04tfPdUkcLHz9t8b5og\nxvxtP3q+IcmDRrr/7pouCxkoPtxg+OpdslCtMizxo6wNlE8TVKEpxrMlGJ6S\nuZZtYqp+2tUcxMZsHZTmfNiRhHFzy7FSZM8P9ZKxmS/sDdnNPZUIy167RT4C\ncvwVzOoyNgvi4APrNe0AqDyVMAs3tPMA2Lc3f5aDhQGaYwtQff4qVyY/66/3\noYxRhBOP1eIRGIj0c85vhVlnsaXCgFJTUi/uQVRT5xTio3laQB07tc2XhyE+\nHT5JJBmj1yff9QKENAHMGQ7t+JAUuQiOA7QvEA+IjZip6UPxL0oEVFXpaOKi\n6txGvrpvQvQT92UsJgqTP2GpRHRTSGngufoohvfF20KF9V1vnssZVCQ1pC75\nzb0Lpqj4ZcoOozl7lmu1r3n0itsyAmkD1Kr4BT3UDcF06O7sWK9SabZjqe6f\nLZLMxZa5efGZD0FlI2vjTBIrsTj/PM3ptHbqI7af4ynBCSMFsz56ncmf5qhY\nEAHlf+em9k/MUDSQJIvruEXPfCOEvTPOwpfl1gHUCh+BPk4nJuEU1mKf7bHF\n37oX7abSo4inJNM6gVQIoDc8AIpuYFWA+Zue/GgHaXKPr+Xuh1WpxlrAyy57\nMDWYtcWemu6PuDvZNC54kBsoPgUjYeTXcEc9l5ihSLOSVOZOrQ4jV1zWg8em\nmUNg\r\n=xrkA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdpP1FD3LyVyh3B98aOFNTfWsvxJtyvDtkTTsiZxebnAIgdnuIzURIGMf3rALlzzUH7pKS0zTn2exvAPvp4HD2rKc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2525-beta_1536084123803_0.5438412121910523"},"_hasShrinkwrap":false},"6.0.2526-beta":{"name":"meetup-web-components","version":"6.0.2526-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5eef21ac2b8ab241b9b8fdfec1d4aed07f9bb44c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2526-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CK1Lrf9WZ0uzcwnxbaOeR1SRDzt5khlVvWWWzczQZHcu4ERoyNBhOBKRi9NGPoY3Xob+wqYZUm34wDdojB3+dA==","shasum":"87697cffd5d1d19f59c5721c9bbbee1539ac8a62","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2526-beta.tgz","fileCount":610,"unpackedSize":7795188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjtMiCRA9TVsSAnZWagAAKOkP/3oyC/1I8crvVi/Qwh/M\njI7/B74Cx7NjwE+4MFD4DfTv/8lbukFVk0Oa3uriGjTF2Hx+FdeQnVrekJG1\nMxxwyAEJAXVaSgIwg73uMz4Y5bGj7D+MVaAtR2yxc5EYUmbuwAarSawU/XYV\nhrRBfYnqMObzP7S4lmd1tcIW89RMxi10h3GBvm4OIu+7BbpcVlteJ1Fwmoq+\nOcSf1lIYQeHcp6eY7ba7mEu/+L/Tvxk8HAx3IGKwU31cErLbvHdS+LQYha9f\nNo6arT0G7PZjFFLrkDOL9WYNNacjtwrFKWR79eDEbOqsaHq2LUVq8pKN6wxc\nZHjmLVbPoe6sXhfhL4GbXHtapgkPyUllRvUdnzkcA1OzgQonS9QqPvtTQaUU\nugQnqE5jsSHSGTFcq4ev5V6B1idHJqHS87a5gFL+QHgkoveitg2Q/YWNrJjU\nxPHaQAVRbQjR3mEUhtbuigpLLkt9o7SzBhtZ0jwZNKOezMhEsaa0jOA58COY\nz8kDlE6cDNJxtE5J4phU2mFQQhHJWpEz0G3ZmZiV9YT+NXN+RGPQj6nUu7sn\nw8zDadnRi5BTiXgKUPqsQQXXi2wo312CTrVT59s+Z0lNqMP8rxFUlvnmp4A+\nhrPqkLYj31PealfjYa91x6Dtt8JaXgcyuyWb5KNWy7DJ1H95NM2pqOOzzfHq\n0Rz0\r\n=YVhf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHl7Tg8XhmG83c7vW5YWiZC/nSqrzkwcp6kRfEigweYAiEA+4enIE9GapaYNWYS28KIdZKq1p4c1iDIz2QrOxVbbKs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2526-beta_1536086817676_0.4781679698856325"},"_hasShrinkwrap":false},"6.0.2527":{"name":"meetup-web-components","version":"6.0.2527","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4a4456ca5913348b7bfc20e3375d4b2536a26497","_id":"meetup-web-components@6.0.2527","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-M/juXPN0r6QXNF6tg29DRfCZK78VwMx90jGbfDFjiaNf73+Oxz6vEc5MSExJzagA9AoeMPo1boAWuTrKlxjtVQ==","shasum":"9132e1fee41b87b40851ba2496a5ad7633714e97","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2527.tgz","fileCount":610,"unpackedSize":7795183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjtZ0CRA9TVsSAnZWagAAqCcP/i4Cjbt06D/Rv28c6fkj\n6+YtV4jy4A/f/uQvueFWnvEvqGWhetAnaM91r3RX18dBWpYTlNThRvrLOE7M\nYm5Be2UzYhg3FsxVxGF3tGI8+SjsT4Ah1finUoXc870KjKmW0AP0XfBKXe0u\nr4fqk/gkvDET4bG8VOrN2gm05KWM3Hy+sc6eNb2Gcz65v+xYs+77OBAOrdMH\nkOtLQ4ItmdAffYa9MOZ7Na1+i5isPDnzIoOj6kBgB3t+4l+BwPl9qMjLR35f\nuhDHEJBjepinGfhfVN6zBHvaOZgZSDl6ZAYs75bU/XGn4WuP4b8k79UtRvoy\nhB1tVxt3nFwc/8K7kutn/b9kkNCq0OjTVYIqAyA1nq+v9mtu4SoLFg+AcIxp\nfOvWCnZIp0SzMelYslrBnYeJZU9O2P49IkjtdwxwBPXaVbenxbFdLxoAYfHB\nxcHGfiaHaU7DEUHs3o7E/Zk9/8i+MGk+P8Hb7QOASPT+rVNdW0kD4SQk+F9v\n+VTsM1xR7e2/rOkM64/PoCrD/75iwGvYGYBgizzSBD6cQ2W9Fq0/PMVAsfJo\n+3MdwSBc2TZnXYfAMSqHFARTBEaUFjXdBFgRlRm+WM2e3Ftx01NBW/VqUoM7\nRcC/d8GORnqBdAZ2IkaUScdyFxM1PaOt393xoUK3xEyHUVlKcSwyY91f9eSI\n1bdM\r\n=0T/x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKF//OglREyDhfHI6bbTRIuWSV6R018XLD/KPwh8/LzAiBzLdBEQPWH3vb3mP8gYOFrOr8JpSJVzxRvz5dko5NLAg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2527_1536087667324_0.796823068902504"},"_hasShrinkwrap":false},"6.0.2528-beta":{"name":"meetup-web-components","version":"6.0.2528-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3865276b98a6df317040ea657e08130207627753","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2528-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1renprJo+m1YdYjR+cNbRXPihIJmEbCqHTy4GCrF8iiIjKkGWMWkPuqOicspZwDoBfE6vkUQ32HTIzSzMhtBVQ==","shasum":"27b689fa0d9d8806741814f6402461d6352ca081","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2528-beta.tgz","fileCount":610,"unpackedSize":7799394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjudoCRA9TVsSAnZWagAAbCMQAITFNpgkvUfaPkTMvKZm\n4jRrM2JUGkyVJoOKD/UqmRqPZFMx6JMkfu0CpTr3F4rDBQEtqt1y+i0/yWjz\nnlTOpWUfepifjR7qu1d7rJAOZGmfKnKwcGIpHjusLmOmSBqRBRaoUhPL4mkO\nhv0hmus4uVIJ/nWksbAsz3AO7iLylfOopk0dq1d1r/SCyma9N5fVM/qS5GTt\nxzpE1yPrmnwFE/YfhL26JzrrwtapsQxdk/qM7DPf1sxX1XO6wwYubuGq6FKY\nSME4RY4jBPP4r0jZdQ1wbdjpY0za0+dcc5qPs119Nacm98arLc7Qy/NyEvVi\n7gUxBJhvCEGeLVxpA+5gH+m8EkzPhABAe7/7BP9VsWWhOkdqhyHHOozKat2E\ni5douwbQZN9b5Fg17rJcwdevBoKBwSlcISdqKURcO2R2m+JNU7ISzBGo2UAI\nfMrc0zr4iB2UPnPRxzD2zaHwoVZuaCVTPaQYQnb2viHfwGkHOWqO2Df5wBLz\nY1cg/tqEuoJXHWtIeTS/4Np978K9mV0FTDU3eTlQ2klGOqacVo5+iTXadkMb\nPZyAOre64AM5+d0LC1/tHLYdGqHagIS/4yxtnup2PKBzO+qoxVO2Dd/+P3bp\n/1Je4hlv3RLGoKu4cBYUTOzSnS7ZFiOaDWKQ+xkR1XjegymSpHiR6HffysOF\nYya0\r\n=YpvG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmP2ZAzgGInins2jl2AvX1ykJRWHXEK3v7eQFdSu3TfQIgR8FKw9ldAxGLA9qXx64jucRjd8F2e6ZO2jvOTazebog="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2528-beta_1536092007818_0.6088431615290502"},"_hasShrinkwrap":false},"6.0.2529-beta":{"name":"meetup-web-components","version":"6.0.2529-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bfc81c10d1940985a41a7870eeb84e016127de3a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2529-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-D44B4jXqfnzElgmABe0rxt1auzPGLmQM+DMLDWweIGmoKbppD1/0XTKa0UlV+6363ghG2cNySr2MgOFkk00zug==","shasum":"44b8e4cdfcc2514f393d260f4336db2120f64b04","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2529-beta.tgz","fileCount":610,"unpackedSize":7799426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjuijCRA9TVsSAnZWagAA1uQP/2Eyb0ZXn9rfQSJGi2Cn\nRaTwfc55SpUfdCq4X1/7yNJe7pG2RCCse7bw5zefJaiZdiAWuQWN/TYW+vf1\nKqX5rg900tQ14opP5hHhxOgL8En5wRlyJRqlAay8o+jS/AYPr3rKfdSlvaxM\nckYLJV9Qeey8I2NpR3SToAr1zB4zr4VgizVsycG6dZye/HFVTirWTDv/YgTm\nargqaB8JznXmrEgemIhAZoYrqq6uG9Ny3dfvcOTo4baJthxxioRp7TMFvJkU\nHMXcqrymTqy/wGkMj0pIK7L2RNIr4+4tcMw/El06VsdaCg/wQdUIZUcjggQK\nuU4UnLErTwufo3OtCVZxs5jz4+4B7nae7wsZ6foTHrjMhx8E4TUHNmxwRCbj\nwUiVn+Clmege6QpEn4dp9d3SO4aNH9MiPQ8QCCecOtyatYXyt/8+pRVefyn6\ni/rrkIszZaQX9Tk4lZNuy1mtoomGhtoTwLb3OIUy0xeem2CUo6/WieXcYjIt\ngX1OTt77hPjUZpYhbJdSS/aHiW7+Fi08JPvjF3Nbcnf/MYXjzHj5yFJFlKbQ\npdMwpKropptOqVDmeScbxs1UoSwrqa1SPUSgD1vKNurVoL6upMi9bSlRCiFT\n5C6EF34IcUohiuv6qUnjj9CS9U49vDK5AWW+PD8Fyh7gurmiDaUQ6o/emjU3\nEEmk\r\n=yWVD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEcx9raUd4tptSKu1wnGTOvsUCMnTwXJKHSKU6TvPuYLAiEAu4NCu0XB24atQ87lrgxCJpfIuSTK/TKGM72S8mwZWXU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2529-beta_1536092322416_0.19861161114405124"},"_hasShrinkwrap":false},"6.0.2530":{"name":"meetup-web-components","version":"6.0.2530","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","file-loader":"1.1.11","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1398f700addfe28ea4fbf72e284556b2fed5ddf2","_id":"meetup-web-components@6.0.2530","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-u2pLDU0EyFayZK1q327hD3byLAJyjxIcD81rly1oEMkHLdquizeQwqFCgIThtMTepQo7VwstdUBmddQj31+LRQ==","shasum":"6bf4ad9d806a357ba01c294781069841afe10e1f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2530.tgz","fileCount":610,"unpackedSize":7799421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjun4CRA9TVsSAnZWagAAmL4P/0G8670TUmZ7/1skPHT1\ni9m0tq3Sx9eDYO9Len2JTdXq8qbjYc0woGOnZj7LlWB7QUI3vX4Ol49VnlyH\nT4OfkRl8O/PtEmRRJTeXriC8ae7dFa5/V+crHAIyHTrIyx1mxsO7CShW7UOG\n4oYQ4+U0O7+B2KUZ5K8eH88riIeET0CrXjPPtVZW7UkV5hN9Z3LUPwuqaM5X\n4Ug0ESLG+qJunPGmPFxg7DzB+zb+ji66v+j0+JuaX1Xo5e1BSFQ3za/GSDpw\noAwEs+A4AoFenriZXtLaNlFIsR0IHWafQKraVQCxZ7U2sMwLUij4cc+iCsv1\nMS2uO1TSuoqlHIjtiPIFv8+ax+Uls7jWwYxme02QgJ2k1oRjHFqNcFw4vKPd\ntc7dQ/iy3kyI2uVG77HN6hozWYWgrdbeYL/ep1R9cjg0/V61HkbNTd8CKA14\njD/HS6KpGa3X/CNUUgY/A9RZwIm7PsVSTDWZFjTRVOXG5d1/O1lh+6+dAvKg\nDhpgmFU/eo30YvmkyjldVX4pFLKLG0ov7J2oAsjG4dykdrJ521xGcIT+dEIB\ncVUGT6WpGItD3gvI0OBmeDvpo1U/0A+eW4XO1PW3S3H5Pqhql8RgUdRvuhfZ\njdL3T47DiTP5VN2o8RrbWlF04cxI2QbuufKVgq7GjqBBVeUk8Rlt4BB5M1Jl\nWW2o\r\n=FpRL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC04fhQpQZ1bpdHlLEurWAiYnJnjx+fVMOlM318DrqKYAIhAN0l64hji/hxLB5cZcPsGZ/kh0a6ZLVeZAUq32wuSbcf"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2530_1536092663941_0.24944955892215748"},"_hasShrinkwrap":false},"6.0.2531":{"name":"meetup-web-components","version":"6.0.2531","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"05a60add603ed50e1ac5cad20af9d553e0cdabed","_id":"meetup-web-components@6.0.2531","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YhGANyKbzwC7yDmrfDJikfVLGHOLyKy+SgSA62q3dCQNhVGyGo5JuJHxcnMKuGjRZbSN3Kyzwru0g9gDtkkf/g==","shasum":"367c235d1496cdf7c7e2419cbcc33778977ea0ba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2531.tgz","fileCount":610,"unpackedSize":7799421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjyNECRA9TVsSAnZWagAAzPIP/if32PHtNjKkuPy82imk\nYs7WYhsqvbw4s5nmG57hBCDBmn+DnBXDt37vnLuhN+NJ7fIimkVn4ZprnKxt\n6tyIGH9p5VH901hRezbTRKfsHzlmy0gZ+Uhj0oUFoTSAMELxcQk/64fn0MBb\n4LZ1jZYHU7YN8I+5cfALqSxiO38w8QuQYQAki11uZtTSnGHjjYFfzPHimUOb\nuwIPmVHeisuvDcWTouQ1+A6aQrj6Bh1nisP5vYmal7/nPBBd/lE3Wed595BD\ncgYT/VHXpwC31rJdkMoOYnrFcjjA/ukC7nqXRFd0dIleDx30+MmrUZR/OKaQ\ndjVlV7Yy1YtuW+qhDliTg9Yi3p+GdMvDs6C1BZLjwHsTq7j94XCPyAAvUKtg\nzWkEwa3LgU7JU5/P8/ggQz4oAotHz02ZRAYUuODOf9BpkrmanPgQRtbdir1f\nB7L8Kk9hqQeIOGjCE9oVinWx36Cl8rP/dDe1ZS03wTg4eQpMLRJ8F1o9mCa8\nkNSVpV5y7vvaKiUxl16y1IXhuKsFTJXs7YDSVGq4dAscpZBLdgAIgnSKVxk8\nFOiSIGSJx6JYxw/ahkKJVhzMGQILevDGhnmAo/5lqt1r3oSXNixQsL6H+Tnn\nS7k9CeUVuyAqWobJvgYw9fR92J41BSuM+OP3gCmO07wXhWSO1lS59dAqRRDA\n20Sw\r\n=bjM4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1EZj5WqgpiTs0+R9eK0+YsoLSFPx0skiVvd6xS1hfTQIhAKwntCK12XIUFmgJdYQl5YOVDVIf2PMfW28KElqpQWpJ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2531_1536107331591_0.588040468301601"},"_hasShrinkwrap":false},"6.0.2533-beta":{"name":"meetup-web-components","version":"6.0.2533-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d92c4c9a4a40f949bc1bb03367a7cdb17dfe9c7b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2533-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6frmFmAaC/7yhlFMGh+N8hbuJiRzdTpnTqGJX8xrOVWyMwXTa6WMxE3Yt/xNTak9C7qdYl/g+unem3a1OQTT/w==","shasum":"cbdbb1d35fa7518fb5c8bee4cea26071922829fb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2533-beta.tgz","fileCount":610,"unpackedSize":7799422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+qDCRA9TVsSAnZWagAA38sP/2Awif5eltyHCP5bYXo2\nwQ0KYvdvgkUsRIW8QSj3Yq+KyCROmSHEOAZ2FgtKkKC8HWPdhifklO8VuAZO\nhTLwESMxsjdi5IDFAhrwWv87K6844zrbUmF0ddiPNBSApBKBaqEtnA8AdLZl\ncdTw6ypNgq20G3tKrK2b1bJIv1D13LPxval0rh6SEC5lhSibnCOvYkwYlO/y\niiAH9MKpt3O8PuWanraHwsY8CWd40XiDDcCV/gA+qBJPXZgQlt5Znbo3os8O\nv8E5ACJuwAYw8CMLAo5cJWi+oLhg1y6w6KJUJ+QNTkl4aBRtQSOkHjP5/604\ngTUfH2Sy10lDPBdAebesmCV7PDYuMBE1DfLgJydJbj5Pl/wjOAosOPlV/fJm\nfatvnfpXMnp9UO2C9GnLyAWLTdD8nr1ZX2ZAs/zwiDnYQymB+KLJlK93IXtM\nho/tGtkkA2vl3y9jGP8/iOhtGopalP1nhoKjvnh4hkWYtauA06MveI+jvpOL\nWXEtP4eH+YSOsy7t7KlUdonUdQuFgzmrKgvNKWs2h3Ou5NOiequQpUloHQql\n5O0ERa1zi+f+ER2VXQ6opXIDEt+O9YaTgFmx6MncH0M/jSglD77slH7YJ/XM\n5rd59UJTSAH/4R07Cb3iV5uPu4uiBOytrG7SOwV2MPyh+bZBiPeXyUCditLs\n9v83\r\n=tSP+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDste9lInku+dAXBE1ndPAv2C3Y4BVd9ydm/wQbEHwA6QIgOYMUqgX5EH/ha7W48rITm74bgGaM1fka0jkhdI7H40Y="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2533-beta_1536158337885_0.005182900259793621"},"_hasShrinkwrap":false},"6.0.2532-beta":{"name":"meetup-web-components","version":"6.0.2532-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0a39c420cf84e5cf1c5d682de99d16081aadece5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn install meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2532-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8pupSGJWt6ZwyQ+wmCOLmF95EUW/dwxeHoVwRmmIwsDNyTCnUab8antmZQSrlIZKF5FpidO4l7dt/XF57wq04g==","shasum":"a74d6020d3c406201c913bf4ebf7681d85811c80","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2532-beta.tgz","fileCount":610,"unpackedSize":7796275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+qmCRA9TVsSAnZWagAAZ3cP/3gdeArT79AX4vGuEThZ\n8u/2XyjZ2h6srDbxsFglxgLA3Gr4rMxtvfV8OHKPNw2b0DLRKA2PpfQptWWG\nBJllA+eNK/LsHdTZGheXx1U7qMKWzxjdApSSgEBmcntUPdub6loRtIeztTnx\nMkRhY60xYV9LlP7uy1iEHPcizMnZcSvnl84DlD8QZOeR03LCNPWQRu539LIM\nnTYSFWQjbqrD6zEA1ddJrGjvw0tqYonLQ1KuRp5AXp7P4VV+pwFyEIf0h1sa\ncj1p257EwRTGZjIlGhCLT+CMtUZIqVosr/YiY5qFzcAL6ICJ74K64Hc5+doO\nePeSjLQ+nVjAp0+Or/jINS1NAMZzp7VoVAplqiwoP/nX91yWuoyZadHXAIpP\nEniTuiVhCDmB9vB3nj9pZirSyYHq9j4VaakKU9CFFGR9qky6drarGxBSAtzb\nnvgo0xg3FhwRIJjOLvVWNgJuo2pDdC+Dx9PNQFRmaySe20EYRzUIyduGuzn+\nIXzHUHTPl4ST91QKVm30cQL3ToRSWeFHYA/mqrV1O020cxr9yclpObb8eZyo\nAoWqDCbUszRQ4Cy7RiUwnTy70tb/Ouf6d+65uxQuaXEhoty2uKGLEFNbsIi0\nJWlmru1G6trQFuCp5l/fTC3Kx17A3dDmLk3eQo+Ioo8q+SQVozDSRsqjFP0v\n3VHn\r\n=ixPc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGLLKz8yaYIGIZE/PUU8zCEMrYc0VsFGjjC+1IAfE6jxAiBKDaaceR9GplnHttCrjrwmd9rUSPsn6t3iU+zx8MRwqA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2532-beta_1536158372659_0.7621777949911137"},"_hasShrinkwrap":false},"6.0.2534":{"name":"meetup-web-components","version":"6.0.2534","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8b13a16420ffc6f2c9d07fe048b14f8cf046af9c","_id":"meetup-web-components@6.0.2534","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-NA0E8Jn564es9Ukg/PXskRcVIsgKjfFZBXibCtbFPT88B7wMA2vJnkbWfa4CGK9gHEm3Vv4q3F1U6WOHQyy7xQ==","shasum":"84108aed5a7881830b3d0b3f58c33db22342e737","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2534.tgz","fileCount":610,"unpackedSize":7796270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+9HCRA9TVsSAnZWagAA+DEP/0fs6A7xefWYqAo732UV\nHsAFxEg7eBFPWLKLMQWXRKRoS2r7uT9jq7GY9AH/uaTrqs4S2VFFekQQ9d3p\nfSF+mnVay9MA2O/N21pzIVWno0fgP3LJ76sr+wAoBgwSdjPv//UoFQQE5Qpd\nwjNtdm4TnEXdMDFjvhGCrQJwrxw19oPkYLH2HE1U9kzgOPtGnnke1vh1J5Fe\nW68z7j/xfsGC2c0Jfs/hgTd63AUZTv7E0IDi7IWkLB3CtQwYuusem8GrvKIx\nHaep574vJfQ+ikqfUtgF8DcuQYPEBnlI4outrI2IFcIhVlCIycGAPlHFz3ag\na1GTJ0AXZzdL9+/NrfVy1Ncm63RkyZTCa0ygOOVBE4h2JRbozFxQJG5Vrv6t\nifyN9LBj7Ay0SWSRMNtz08mEWkmFffoVGUDd77GouqFUNVNCefI53s+oGIQU\nYIRFk1RwQClB2yCJRi8m6IYJrO2RO/t8UDcCodtiCMBWCu3bEIuMkRytidxJ\nubD6H0HBrgYbn3hh1WeHOgcZpOh+jIdyCqKhcmjiEOYxwCW0XySvD3RIe7GU\nNix+jxep0p+2x3Q62U9vbWmQu3gG8eoBBsudgCNoesbr8AEGxsS0APidtN3/\nyIi9HkObggdNabf25aZ9FA4tyefP4PWKU5FrDOYwnlyVA/DkwBX6Uv+C9b/L\nAwID\r\n=tgN/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIkuPgRj6fZTnyNAKPxKNZAbXgCdXXvya9sRHjJvkI+gIhALgTsLArJ081hN/hJFvzkhRQbO5EZwzNIeneEEtN3riz"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2534_1536159559014_0.6360778881040998"},"_hasShrinkwrap":false},"6.0.2535":{"name":"meetup-web-components","version":"6.0.2535","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"^3.4","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9ec62440d229c6a9436a81254b6e263a68f81b17","_id":"meetup-web-components@6.0.2535","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VfaDiicnhT8PJKRnaw2Mrev0KtT5D36Opd4HNPMLEFmUZu1HHIBmchLi79NwdgS0eJBgy2J3VJhulZCePsXElQ==","shasum":"820c1c583c145196da72eed18cbe4d42ef21ac9c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2535.tgz","fileCount":610,"unpackedSize":7796266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj/bzCRA9TVsSAnZWagAACYMP/jUXExyPNILcwNLnG3zW\njXMENJP667QoYftGZwMjowf2a7Pc0sMczCK4rScvkL5axpWEmHQXluNIACWZ\n3XOt5eJjoGEv5D1hBDdPDhyWr0K+2Idn9WH0Y3Rxg1viLy1hMs4kfW8187Ud\nyC9Bx5CCkYLbDK64iYP0ud69v7318u42T7Gst35LJXm6WTpP/LRW11TUfFaH\nCieQ3apbFTrBtnTFHyRt+bm6EupoAtNbK8yodKm0gxaHXfJs2qcXomTQEsud\nXVYVwxoB8E5YilyMxcmsBxiHr9cf4Tp932EBzRdhHt8izbcmw2ldzFNuLuNF\n9U094tOqOPdqQZYjiZFdGfwvkC/P6d6nqL1csb/ZxHxrki3DJfU6UV+2WaEk\nEoUsgFwg9o8NCiuGROiti5y8nZMhpHrYaBw+4DTK4rXlxG+1v+oWR2sMpjxq\nKy+Jx0QmrwBe1fbRWV1oIY35GIUU2GYAJiCBOwkaRsoWzJPHSn32ZmrgDUEa\nR9KRzQQ7apk6DPTVVkmcQhFoRFGYHuYhkNhkLjZ/ao5r+IziAfmyA8GyA/RM\nVe1LCDbpoK251l0C8p8dr6HDeMDdYVElaLhVJ/4FT0Bcslnt21/bgpdx25c9\njngHJZQaCI/hPMMiD7FhS2ZqXy3AWuTSBHYkJ988a8ECv7J5+kaMbdMy/Rb6\nE6aU\r\n=qXTD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2gLs8sEB7zQ+loFSK783u5TK0uwOVWhPoW4V9hTTeaAiBfb5HU40o2pFMpZUfOdvUlGxLHDJhomPxqLXvEmopxEQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2535_1536161522662_0.8291045154256247"},"_hasShrinkwrap":false},"6.0.2537-beta":{"name":"meetup-web-components","version":"6.0.2537-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e7d0d493fdce83a76940cce52ada4e2c59f6b8ff","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2537-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4iZRObOJOixkj2ufL4iHDs3Peh/kmcRu+y+toN+p2s7fQUVYgwOWbugzSa35uWHh3i1lFkb/skuPVjHDK6eFbw==","shasum":"dd188a5cf6bb2bd2fd8b7fc3c49336c4eebadac4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2537-beta.tgz","fileCount":610,"unpackedSize":7813728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkrfyCRA9TVsSAnZWagAAQP8P/0jdavT8EC9FcS6vgN5d\n+r/Co2aq80LNrN/Ulh5ousXMJTIZ6llaH5OPRFURMzbK80k/k1ofogICk1QT\nq6BSpwbIWQe7XFc7Be+aJRsrUFBQTJqjVJIUM5Ijft+6lcS97sIwGmGiVawx\nhWUUvHZ0upjqp8oRg45gDqPXbSif0BdC0mBW5s+enmH7REBtHh3rglD8fTqu\nzHlhKv3JO2pEih4l1uys4V/srj5fluCMpKEsNI6mZBrhi1ShmfKETsMkD5N9\nShc+zswK6YelQxWpfbxxCd5fwnanolaSOKMizCRBKSpqilh9RG9HPNQyeijs\nZaDY/7u1ge16oooJM5bsN4sLiaa6dOS0tHMJxH28mJwwam0mDzimhslgg9Ic\n09T16RU7vGFIss1yyfG7FPpnOKJI9qtEt6VluHklZqTBkNpf6hhAQ31QYfUV\naRR2cFLkChMED7DxG+woFyXzxFqPk+Oo5D5k1zTHSieezowBl0cZEkAyh/s1\nnLhnUMe2mkE8hg9gVfytFbW8hnerlbAuYvb5SmauoD0Sdv/Us6ZiUpLMS5G+\nnvdfFPjgIxfE/U3R8QKapyyGMsSvshtWb9wHEApPdeGCE6XgeWD47EZtQHSi\nCRVeyyzvzbWb9JUJHl/1/msjfdSrLiBYDEf5TRALJ0nkcpFPjdSYTU7N0a6W\nocAu\r\n=Y/o9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCws8Rw8BlwRg0wSWq/fIe8swR4pKvHEeVb6wHY1WHlgIhAO9AjHoi0lCnOBn5X1QyNtL0+6UJsPi+auSCm3mS6UqP"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2537-beta_1536342001915_0.40652944280455916"},"_hasShrinkwrap":false},"6.0.2538":{"name":"meetup-web-components","version":"6.0.2538","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"26bccdcfbae3e4fa64ca8a8dd75f4d97fe50ff12","_id":"meetup-web-components@6.0.2538","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-L9kmcjJpK5K0cWyqZspHkLXJpe9RKS/DEGPRzJFCR7HZTrTSBNCdtnBPN46WtLrGJO88V6o7iJ1laysr1zqycA==","shasum":"39e0c9282dc1089baff3390fb3ed35e2968a6073","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2538.tgz","fileCount":610,"unpackedSize":7813723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkr/aCRA9TVsSAnZWagAA2IEP/3sdWNr313KTkf+OPSK7\nFZZn1j9DEWLiM5TEF3/n74yvC3D1dgXMPiRBpHC1Ee8+W9WD90m4fNR7L3w1\nUdbi6yPaln+a2zlDr8UoAJtnIIh0+5N7iMsDCR9V7+XZsK1gxbgeiNyAnkDF\nuFd/AD5N80oZ7RaMJX/NBxF5tFr4PjisqIIKuTZD57Y6ct1b+fgiKpqXah8E\nvrt2u++awMFUxWBlrxusDBV5b0e3UMrrEscwXfaJydgrxM0klaSUYx+qaYbS\n/iKpbyfVBQ2LjLdQ536rJ9c6aBZxmVor9Kx7Wi7D0y5RtsL4RdJYdM4YQSC3\nfa3NBuo8E6AU7VjxwiZQXPCOA8vYFxKh5RwmH3Q4t51CtSZjrfApAdzxxjJA\nGxVkgi3NHmz9QCZJX3ATY00CJo6tkg4Km9yFRuFItloByzShUidMU4zucMn1\nEchN2dOAzVEaeVwC+J8LZP4PvKcUxcJaYjeU9g2Em2Iygf0cpw4ln7+J2cUf\n7/wPoPW8gSVFKhOjfXXZYsPNxXISE2094mhYea5K4tJyrZndiK8BkTtOqqD1\n+3p/fLh4gpYvadoZK8W8LnvPxzEs15dxLn/gOetjWPjvWZ/EF6l0a5bVErgQ\nlVQnh9HnfXmsWu9PObhe6KSJYhRSuo5E0F5nx5CwhV/omWI0x4/boXJ9EhEi\nA8Hc\r\n=rs2h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDmcA56/n6gSDquMITwIk9k+eBrBqc4c7cfNPRVX+T2AiEAnulIuH+tl/y1tb5dooE/kt3tyXxx6OFXi1fZT5oivwY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2538_1536344025696_0.4850569924929824"},"_hasShrinkwrap":false},"6.0.2539-beta":{"name":"meetup-web-components","version":"6.0.2539-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"30749a0cca52e70bd1f3478a39e14f2cf6c5fffb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2539-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mD55pS810QMWaDrwYqlDiBoFCwtLpvUPO17ehFszsS/2XNafQ1Eg/yHrrDrBXFxCu8rxPpMNzkdsBCth9rGkHA==","shasum":"97e715dc8bd8cb9c6dd73be0d50f147fcc118ff6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2539-beta.tgz","fileCount":610,"unpackedSize":7816201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl4YICRA9TVsSAnZWagAAnDIP/01XryuWbipmMbfI8n3x\n1JmSmrctXoDCi5iRiFNa3ccUD3EGA687Yu2E9jL1yg2EE34qGAAjXC8xbwhF\nYNX08XG3K6iJwvp5jGH51F4tNGB4afI58TmzFjIAdID7AiWUcJFyVNuWU0lq\ndhgqh6iQMiVCv4lONKQJ+PLmp3wjUH2+wYYi7RkWtvA9S8jiV4bT7zgAFBQY\nBPKWE7voHEaCB5MSS1OZWVG4bJhUTBpeXosHEEoHUp3W+fdy5rON0+BJ9Lok\nryU2tIjeSy6p2CmyPKU7gNi3NnHn5uuEE9775w/zokd09HxaJ37eB2S5zPRo\nHaTCNjJ+k+Rped6oV6zo0KCU0Uw/jQTL/xkAxB27t+LYrESzEd5sRl8ZQf1T\nXF7Ack+Oeisskcb++JJ2XilIm36+V2RaSPdheAQQxkYPPl2VnhLZ+RxpB9Wh\nxQfQqQmoeKnSV+g6HG/oFksqw9LuoOZFd2C4Na5NGJhlTnzp8Y48GswHzGUc\nmp5mWSiwVG44Yp/No3imaB4mjJklo5H9ZKagtQcWJpf7PrKkZXbd19OtMDy8\ndvFs3OkEM37xl5pPdROPVucX/xjqELCVpfZqj0FXN2ZOSW8dHMxrCr+79t73\ncCPPY4eyiAkUrX1umsVtQNaExn16yrn4Y8MSsbSeltjaRQPaJ1YIMQ6q7Rad\ngSvB\r\n=wbft\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw5YNxe7HdZD6jjKQaNwqod/1OeoqlRStR3UBfxejeFAIgNMRB5EMHQi8hyASaxDQRncTZJLm3AjQzugos4s2hgkg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2539-beta_1536656903068_0.7551262323749934"},"_hasShrinkwrap":false},"6.0.2540-beta":{"name":"meetup-web-components","version":"6.0.2540-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"07c3f6b731cc020f8504a9c7a1b634518ee8dddc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2540-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-x8jtsh1dX8kJZ96WgYvfmZYftwyoTxYPJ7YYS+sEobTxE5/EZTlYRiqHAVu6uGAb79JHEc8cMQeWosMLHoeNgg==","shasum":"0613b195a236f1a30f7ffc9c4b213d392b49bcbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2540-beta.tgz","fileCount":610,"unpackedSize":7815029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmXPYCRA9TVsSAnZWagAAbnIQAImG6mS+Nk/2Ddlloyn7\nNI2z3cQMPQByVGAwTrt8Z6ZEeAPT9J6MBCbkSqjNJU9hSucObPTBHWMPH9q0\nKfge26/DCd/a1OO5Iow0Pc8a9VUvaooVye3ASxq5n95dfvqZaAc/gBHVt9TZ\nkOAHlw1tMlnaYY82Wn1neq5uUKXQCFJoOLvYuz9bFxneUO3CDQ30glvQjuaY\nv6ZN0CJ3NH0FOxz+G2XoNUMxVXJoMvSpbEyzB5GmEnfoFA5iGzmE620xq30w\nwPToc4fd7QTJ9qqRsnoBFnS+nld6q+bAMJ13inRyLmeE8mFOiJuhTWAOroiA\nAOprhOJ+UOUO/yatkneBGgmqpNpIeCTKea1TBkFoh+RWf4rsUTcukTFdrpi0\ns6/Sb43twAFjrTaQDN1XTE3bIoQN5U5Xq2fJ31Ls4gnunHRK3TImJKuQ8XrA\nqhD93l4qFIiOS8+E5IQmVSM0DOjLkB53DxOJZvnQv+wDCrD/+N1L6/a3jlly\nnjYu+i0JWpXIvTr+OiCuCSz6+2AzfHKpDPFgcQXDhL3g18TlYv2bnXPdZwns\nAb2Em6majWsMhrQ4xoYmiYBgyDdsn/hffwB2GD+J/nhDRVR38wvxXbUjiUiR\nCft8lfwrdn8IvLrmp6KNEACDmNILrhQy8CLHtbQ9sWG4j8Wmejj7QrUuQ9yD\nJDri\r\n=gnIK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH1MWB+4BpPDe2L0KccJNAOEgtj3TBN8KVbYRbDwlMLgCIQDy8+nwVzd4yKn0aW8lU3vl4fTHF7YP4CkGg7z8hKHuzA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2540-beta_1536783319695_0.2888206216356224"},"_hasShrinkwrap":false},"6.0.2541-beta":{"name":"meetup-web-components","version":"6.0.2541-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ed22a00930315e1997a9fd7c08d57b4efc32b8d2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2541-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZCc+E3s2zeQUA6X98apnEer/J5RfS9Kq/vaqV5fm9RGF69DnC/nSZKN+p3RVI+C/1IhvlOkmSpS9y+xR+ftd7Q==","shasum":"12436556278572ee16120dcdd6271f68efaf08f7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2541-beta.tgz","fileCount":610,"unpackedSize":7815004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmtxtCRA9TVsSAnZWagAAH3kP/RIGoMRMO0plt4fKjzF0\n+1/haQiBeVRNFqFlFuWFZOXzySunzV6Z+KruLbna6IzmNlHTPV6LZrCf3ll2\nBYKzzNbBpY0+U+9Qt5iltUkW4u0aqSMbATcwByGQ3cNkqneFQVmRy39Q3nuu\nZo/JyQYRxxeCPF/JPxoENPoqN23leZ0lqj7Sp50NN6JcNUD4UJ3Hw7Ezz5we\ndwKnzMBY3YGVUOqpmW9yON3mEJ8Mi/u2xAuP404sJ9dlberBmJ2vjFNykZu9\n57NLwTJJb+BaNqMD06lq6iALn3R56YViksBAi36RZ32QvAnkDBRFw34NVxCK\nEy0HyWUgsj464cdWz/SjLbqQMZrRGGrW/iaKcEPsgVanMo8SY0rY0vsUm+nQ\nY96J4QMcE/DR/hHTVDqOcOro60u5DdPzKlJIg+GicTqKg205By3u+5QxtxfF\nHo1jiBhBhJxWah43mAViz4gfcQIP2Pt7eoYToZp7fBSMt+BkMkJmuC4aRpdl\nppPCWtgNwka5Z1xusKzH1bmrsSTdJc3Beyb2MOpaXEiKhkhOhCQiH+DIL7/5\nT2k2FZPZf3JAHdYWAy0nzwnugNQi+SP3GcFZXlwjd34kaNGePK8VDHB45u2+\nIN3zCvScmiJnBtpxJhd5145+9P/bJuvL7KBiqYowFaX3oZT07758zyxhLuLX\nspKj\r\n=5BZH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBS5QIRVMTI92o14KVT/1UeGiEj/8R7HkfRcxQCBY09+AiAjumxXr0ar20+L9Z9eEr13MlE7iDityht4W0Fh8CUoWQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2541-beta_1536875628289_0.5311911971425345"},"_hasShrinkwrap":false},"6.0.2542-beta":{"name":"meetup-web-components","version":"6.0.2542-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fa0e85664a2efe0252c4eeb45e7325e87559583b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2542-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-d6vCZ2oXuUEnWO+WQz/ooC36tflRvo4MRZEQ+QGK0Kzu1IWuxO9C9QE5ID4wW4gsKr5BdA+HwkU0EDltZYwTeg==","shasum":"8453919300d9ae85875b53b81347808a7f601bd0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2542-beta.tgz","fileCount":610,"unpackedSize":7817509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm5RZCRA9TVsSAnZWagAAbboP/2atk2pZd8fCdNvzv+yd\nQf6+4jq/oT29bTOaHPpRUTwVDYPWvDvUtN+VZINMfCB39geEkDa/zP7BqxvY\nSppVDGB/GkI3SER5ejfZ03VKKXbZgU5Z5wN8Sf3ot0EwbxEsb1/5TuTKuedf\nj2/vBlEJjSw2RvF9rbd/ONlC/4J5Jo5Q9FGyvLNatzZi91MvJxs+D2MHrU4I\n3YOpLMAEQP04vnj3DjysapSDxbF3Ow1JSn1ihuuY+W8wngAIgT6DcVxt3REZ\nbjo+yb3V2qFhTw+oq80dUB5a94rjk0yHimhARN4yicVRtMWecCK5w/H0XHRC\nxRlAa/hUWWOC9o7E+nuGw2rxb4q41Zq+YYQWo0q8cQVS2L+Kvrspj6040gfG\nAiTvLFBk5GIiGLNeJwWLR06zwqAw5voPiPDpk5At4/tyQWjE5kIGOzu/c9/v\nkbn7pGHI1CmWAMkKW5JZsNR2+ThkCdAPFY3+LvbXRicH3zNVlQcisEHtNQ/n\nfIgu036jYL2zAh+o2TV5TEjAXMYQ9FxnmGIqgUPeTWRXvQVSLoxmddlL/btS\nO+DWY8pO66gEkpu6bejbnIQLBtQxeb05Cvj6iIsLWl8QpTWJFE/9rOSxyrRs\n2Z2AJhJHcbFHT8OU20FVIiwokBV+9uaAOoPeSKJhCTFPnAnmPSYdkNd+2fqV\nNoJn\r\n=f8tV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0g65KJDAprGXPY3nrvfG98nRaqF43BNe1EOi7u/ZCagIgegfesJuQdnPEYfhFs8ml81A4ApfT9rN0cEZawPSc8IE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2542-beta_1536922712528_0.6520598281636423"},"_hasShrinkwrap":false},"6.0.2543":{"name":"meetup-web-components","version":"6.0.2543","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bb433466736dd5abd8b240deaf337a7574699b04","_id":"meetup-web-components@6.0.2543","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IXc1xplGK/G8c5Zn/hp8acHiU2vx8EyPwvJ4cctOk/SNCfggdMozUMtQ2muGp+CWReyohXC9bVml7iJpe6c9Jw==","shasum":"0fad1cb7a852c269f2bf8b278b3ded930ce3a3e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2543.tgz","fileCount":610,"unpackedSize":7814999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm82CCRA9TVsSAnZWagAAKcEP/RStO4ccR2Dz3yNy2JNc\ntEBJPOguApi3WgRJZeVoxq2n6dyZT/yJhaCdabW+C2twhZilJoUONq7nNx9F\nEWWjfWLrPocx2Nri+FC94S/KWk4mLadj/5cu8iFlCc2wuGr2y7yiABJ8yX7w\nWMVnS6v7WDYt7tyCepzHGZG5T2jslFVpRSZ4JSKWbkomsWRHKXWaBQtpF2ZW\nW53lCDGB0eKmbGpaEJeNgXUzKJZ7gu87hBtQqbw/WT0TnoaeSwKdl1/Ku1l+\nC2+DrCugbEb8NqJ0jU1k00hdDoWlqHhMB0ujufKCPDZ04fN7P6XS01Clehwr\ny31Yejk401Heb6UzPVnfCkCc6OBhU6JHo8b5eSs5scCC8qkz7a9n1ENPHldZ\nvh1mAWYrV2ZVvWa+ZKaNyzgm00ICmShd1rUJf8to9XpAuZSog59EXee320ru\nwM196wj+pXS7UrGXwGtzo/+++DNWtfmGum6Fm3fxQ0TPISW2zgb0iCOdd77t\nTE8keiFXRuGqf/haZbEEjqjmUG2ZRHevX0BK2IhzB2Tagtrz06uuoq+CEKDW\n/R1ShIFXMe99jI2VydE2xfftqOwOvGJ8urJsgoBhl59NzsMy5EyYx1lV0RD1\nD+nppuOAkBOWCkd2Rf7FY1qbZtiGh7G8OS4I+gu2rNgxKFH1DZKLgNr6kGgk\nli0u\r\n=Pg/c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHZ4mg7fPRFoBLFp82/haNkiybpYcRsupmhufOrkRUO5AiBFXVMm08eypsp54EF+eeIj1qsMGD/VDfpkUyKI6E8mDA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2543_1536937345747_0.9489262466137858"},"_hasShrinkwrap":false},"6.0.2544":{"name":"meetup-web-components","version":"6.0.2544","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bd315b9cae6c7d4c0aec713339bcff2b0ef54487","_id":"meetup-web-components@6.0.2544","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RUkvn8pr7+GtnfQZqOKwwJsR9Ow3nG/8jMSRonJvNhWA4ZsTFx/deCmlkhWCH8FmV/IW/VX/i+Bd1n5DlaBtyg==","shasum":"d1fa05403bc4492f35ad3b989cdcdbaca08d7278","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2544.tgz","fileCount":610,"unpackedSize":7818780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboKj+CRA9TVsSAnZWagAAxJwP/0GHmcd5VCzGv3Wd+9il\nlAhnfpboKvl81D621gfARr7ziAiyJHWj5t/Kk7sJt5IaZ8V4qHjWPxszro9m\nZGwlcvSeStz5KpqPlAIZtS7Kjg0DSe2HVGpbZ8Qs4aQqblmVMP4qM/jM4av3\nLpUx74yJIU3/dnMnlQmQWSsSymn2wvXhLVSOrw+L7qhplvQ9rXHAOElyTEk2\nBTegXdoRGahDreJ01ETUnP8TzrkgfF9v0B/8fBjHrh1FzH6p+B1kdgNyBA58\n6zxkb1S+S5GjaBd9wOHQdkUzuRV1X5U2OUb5g6y12L1vkhYQBCDf29VFOOMq\nfbf3ugsnpHtRELApBv8kshkohxp7Cj1OqBLeG7fJKU99YMSpoW6oFtCWVDvU\nyGyWej9cvsWguFv0zMKaGoVP5WFbX+7lxanj97seSa0FK5jdYbN0NUvUfbIC\nY89oVJkEpbUEcXYFxRiwCIwdJVXqJoh6cFfuBeSilj+OtGDAaMQmTYGyrRl+\nNW56ewVQrhjxufhDuELLWXQLO8baXb91kamEzn1uz4vEQ/tV/Gc5aVH5QfE4\nY7j3weWVshHfcRk//YcKQIbSVRWdBJ/dop7NCaLurxKN5E+xDobY5l4q/pBR\nxE+I3Y5SSsRfu10TmFwDTzEBZI+g7kyAP8p8L2zb6kSxG8CXaGmJ9WguRSYg\ntinO\r\n=YGos\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVldi3EAX6dnnNvl+uFWF6SQtRArYe1VhEzoc5PpCHFAIhAIYNzIt6PGPs1un99nHREpBjn77GpHItTtpbtySg0uSS"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2544_1537255677593_0.4333267051947731"},"_hasShrinkwrap":false},"6.0.2545-beta":{"name":"meetup-web-components","version":"6.0.2545-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0df8f8716300238310a98d5841fe2093af350961","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2545-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hD/hvF3N9vE/7FF1f0rMcU76tdeBhyoGl6Srd1asTpkNZFpaovwRQcoyUoew/P3ACPuqHQ9lOLFrNrhjVzTEaA==","shasum":"0be208c7bd24494ce66cedaf6cb2df57bd33bd04","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2545-beta.tgz","fileCount":610,"unpackedSize":7819785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboQesCRA9TVsSAnZWagAA15kP/3G4oabCGDlAIgNTFh2X\n/V5NkEN0oKxrXsQg4DuGRcCkJ62lawVBOWaRI72xuvfyTqNWR3qLjcadnwyA\nrZ5Hpdl2eXPm1i0eYYAi1I+vanO1y8yXjjQxdgkXP5XcNkC6RZ5+9y7mUNtn\ncxNxk1P1FTWPEUuoDQN6PU05sA8Vq8WTJaKZ4Uz50JRbTJ9Qub9vrpaAxmDH\nxwdq8AKZ21JTJ+8QfLg9YBXneujIB0q6B5hjDJLkhA04CjbGETwzY/QXkGw9\nWd+X28XdZTQffVGFgMXLUcBLtMcc2j1dcOI0rOeY/zK61dh3PaGiWeSDjUbS\n6QLncc4JgIn2/rXGayHimBYI92LQfp/zlJOATHPxPnRZBy9g1zMxEsB2Phpz\n82B8tWP3bCyQiHX8vHDns7Ah7JqB0wNsP/U0LC+qjDWPJiJNfQLkzK0CjsOH\nJLN6LeO8f0cqJH0Tzv9DuNvWRnI83Q35TdS0pjOz7/E6Xd11IVMcdhRuR/GE\nGqZTDFcsR0H68V3iRRYYgXtvL6vJklCInqsnpGmSocCDWtZ0+9R2CnQtV3mP\n7czWVT+vfRtqdiIr/f1J51FJ8pY68Nf4bhiF1S0AZ1qKzf6/JTSSTiTOBT2f\n/Eu7+/W1+fOUKLjkG12HtSRjN3TxQ/TfbdvYOkVZZKbp5PLb8kyNAvVkm53/\nmkj4\r\n=M5Pe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqsEiirzyR/w86leMClNwI/J8k/QSA4vyBRACNU5AcTAIgBQUQJL6hWzOutNNDdu+ZUYu99szcCDOu9bRrctU8Vxs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2545-beta_1537279915554_0.9022683785388093"},"_hasShrinkwrap":false},"6.0.2546":{"name":"meetup-web-components","version":"6.0.2546","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"41bb8999e5d578c6ba447cad8939b8aa11a813c4","_id":"meetup-web-components@6.0.2546","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-eGToAniAWlFs2VZoD/xLBeOsfMFChLdK6jT+wfZBWLiUNAraQ5mOPxg6saI0MMf1ozgjt/MDIe9UVcdkZcPhYA==","shasum":"a9675aa366e3caeac71c964713385981285e49a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2546.tgz","fileCount":610,"unpackedSize":7819780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboQr1CRA9TVsSAnZWagAAVrcP/10c+OwUO5Udyz91YJu8\nplB+N6J1VhPV7uBDAdrvBzj/6D3TZJK0+N2ax2IfXxEDNiR8rCOysrPEJKLn\nrZ07e35j4XtA4EctziB+Om+kAprv0IWdWDXfLr1xqp6Z94MN02XD3/Pi6SI8\nSubzdhwXfDKQh8zXg0SqJqQc3g3jfpA0b8lRkQvkTP++RQ2SuxX0YUFvKXGB\n6jbm1r37Nq17+laVT1ayXzRKoPCp1WijLTy13xufiLP/ksk/49/K/7d7e8i3\n6RHmOJ9XtPQxhoKlDhMZ823kJ1q7uoD4hxS17cWD9BQmnNLqPTqh7WcNtuXN\nqNRKLwGF4s9ehPHkYzVmgi2GESpqz39c2xfFr9Lx5FkNYblYceVZebtZRzpA\nN0zVvC1BaZddvTuzfKslAmdsBAu13BkxyKhEeeLTncYiApHtncLDrQr8kkrW\nhaCbWMnQtY9S0pzW26PzrqDCTPl5zC+5i8moVDHZaQQyfdINcHsKA4leJtIo\nePq1oFcfE0P/gDjc6/P7ZgqTxNZAlbvThhBzkmvG62MARQRSaFYdiHEFbgH6\n2dPDbpyXLcoA6lAesUR5eQDHKbme7ykmf7hEvnBmtA11lhwYluWxTJmZVxC4\nbmQUuP9tSjncSzrGGwRYtl8FX8cS0qH4TnBmG6Q+At3WmsyCP1G/8bSbvNYh\nJCwg\r\n=JUa4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDj2RTWs7w4HumO/+Ipzo0pEIIN3Z24CcROa/4cQpP1mgIgMfQcy4uuomEoqZY1hEzdk3F1pDRjisXIh7lPsK/JIdU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2546_1537280757195_0.7725983144088939"},"_hasShrinkwrap":false},"6.0.2548-beta":{"name":"meetup-web-components","version":"6.0.2548-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.1.2658-beta","mwp-config":"17.1.2658-beta","mwp-i18n":"17.1.2658-beta","mwp-router":"17.1.2658-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"40ea440ba8178bfe18096e7c7bd17b1da914694e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2548-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AnCxAnrF3VqwgkUF7S3rPS51Wqona2yzqY88MWMe3+cT1hemUGRLuJ25eDFUqYB35b0jxq6kpZqgfjNCmeh2uQ==","shasum":"51dbc7f3ff1dd479e623e690498a79f10afe96e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2548-beta.tgz","fileCount":610,"unpackedSize":7828470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboo5hCRA9TVsSAnZWagAAMNgP/RbUyt/lWnPrjJOf7Ynb\nBk/HglZmxa6/4UHRZZag85O2ZRK19DAoJhNSIXjKVcw+C1GSWX4Pvtaqgk4A\nVUKwxFbxv1CrngDhVRaHDK87oCpAwil+ftPnF0xYNrggR12cIgaXPWgLHsVc\nJgQJYyl/4iAFmopLCtuLNPmNYsvAy3bGHT5Oi6k9fHsIsXPJno8be9QGH51q\nbdxTBYwa+hKAy1tFr8Edg+1Fyol+PDlm7xITe2NLfYjL2VgRGCV2cF400/xJ\niLs8+QMKLWzGavNxeRY2Qz8qeD0r+VKnPKwdNAhgoRCczsDDFXMSEz4KNqdI\nNc0kw/3YH2KZCK5SDw2DXumKZWqkVr9GEsiIfMwV3S9eQmQfO99glzv2mSto\nS/3LyUzjPvsdUWcUs2Um0f5xdrFFQAx7BnHGekutA/gSNamrEmW79hXw9mm5\n6eWH2USaA3ICcYApR1Bnpvs6XAYhBP/KhmAaEHNbOKc58t+9IOBD+PAkj8DU\n/PPX19BSos8uWwZxZM/F6m1e0LNZFGTrt8hm+FcRfLQAvWGte9C0gZs/pNJj\nuYD/tjWg+YCoTfcLVdnvAPnsXUb4v0gU/w9CxYRYPcMVlba3a/I8I7D879BB\nR8U6xFt9DdqqMUFcN9LOtrNxLq5Upd1bMaujd5TXPbnDWx59KPkCKFBQkUhi\nbQ3o\r\n=+52k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXK8IGZSfY1bPNvst7/amO6RQiofHO8zYLwvIVRuw3VAiEAzzNjHbYkc0f2EdUQCr+5t19pgAl9bHTsr8w7xHa5i1s="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2548-beta_1537379936150_0.6777776788500065"},"_hasShrinkwrap":false},"6.0.2549-beta":{"name":"meetup-web-components","version":"6.0.2549-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"20e2349e6620a57e977eee85441ec16a27f21e57","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2549-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-oeb7ryFawnvqF6zxTTl+3LbzLRPEsI2LgDTubXzRF6d1Ns1mHVbAd8Ar8lz+PlHiryyLHHNTA8P5yGBFglL4RQ==","shasum":"c353a270562ada97a1d49f5bb91ac68eb067b7e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2549-beta.tgz","fileCount":610,"unpackedSize":7820343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbpBQmCRA9TVsSAnZWagAA6fwQAJnFBfM0FvPYYypceOj1\najUo+lh82KnZRM1/f+OotN4I5I1dlRleJWug9dvlqC2m09wmHwZHlRAqlMqP\nTSFDSL5kCM1KaGisr0lMlnS3oC0t6MyEjmk2YYP6okiVZuvdEX7mquMhAIIT\nKgUE6aKP3OT9hKUXyZGZKZuw5rMb8qPeSvQeytKpOJbstoKe2Bnqaovz5w/3\nXj0gGBDPgt1g0aBl8LR8s7Cn5dhFu6C8dnKIwyhnPFRIUw0jB631G7hQX0mD\nPzpOkRielQNhZEgdlqQAE7m4FLQBIlppUkY2Oi2l2THpaRY3aSH6P2Z717pZ\ntSmd+mcwCAwCGY+KEk8Uq3UQELZL9mTW59s5ch8+afpB/xdAJR98GWTFi30B\nmtrUqC0PZsJbWhSJnenPV3u3SLPdQgSCdPcL5RryqzQwiqA9iIWcHrkq/Zav\n/RpeUTkhRT/v1ux5/j0p/S+afluDm7Nyw1ttrIHaZGJw1RnaB5Wdg7aO5U3v\nejqTwAchjhe9898RlGdKG/IQwTspTCFyvv6TacOIGftQ/U5fENMFqYhEz58x\n3y7MbrWc7ITcU8HnGQiqlZMQJZsRujMp0QCguuybCPJSG5z0fg9M2q9ADPOs\nhmowrLawFXtE+4ELuO3qKthfYEwqwKUTi95NQgJq6qyIbDCx1DcfFHIHhJCm\njLFc\r\n=u2TC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs51B91WE/0JrmBjbsyJ/Sj8d9KzY2UlAWpw39Y98ypgIgEjR7CTl61tK5w/KnqnYyRN4WF4MUjD5A/AP49ZRDsGc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2549-beta_1537479717205_0.17025819872725334"},"_hasShrinkwrap":false},"6.0.2550":{"name":"meetup-web-components","version":"6.0.2550","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a30405d61d39100d246a2fae14e5de1c858f0a73","_id":"meetup-web-components@6.0.2550","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zcDgY/ShQq/9qihHaWHjaekt+dAzH0m596OL7scjrBkALg/mIoGtIlsDBurschqj6CZy9pk/2ELJLqQ45V92MQ==","shasum":"71a1aad49809ce0aeaf9f323d1ecd2a16144473f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2550.tgz","fileCount":610,"unpackedSize":7820338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbpPCdCRA9TVsSAnZWagAAj7sP/0PeQO7y69m9yVfW21hg\naHS1qBfmg7aQDfIYCOPriaMKtL0WivPRc7Z0SZW7KNtk6XXHXXrOaT6Fte3t\nl0PhhMMuZzDKkzftf3DFrWUNGaDt2vNCEVQQ9FVrBmYMxH1MGTMBYy59rtDr\no/+EgIAVL+TfWSvmTto13a/6vpYwqdlz3djpBKmdN5ET2KrAKqLYE/9gbkL5\ngBTjMjUb8AcEVejVEKeQ6/+FqKf1LALtNepyvSw0QWtau6re9qHSiAE88+o3\nlH2WN36/kHO6lvD2yG+LJ3ux+JUz+JwWqVx0aiv6x+6uVwgJiLnpF/qenffI\nZ7elje+bobhKbVdosY7mQddUf65KEh/LCOIVYZgBPicdpiUsBbJBCOzcS/EL\nYuSxut4q2JP/BIgnZDscyfbuyfr4EPdHzGXEGVsGA9mJereVR+hoarG5BjAa\nUfQhlBg7BRQZGzDipogVKCcLerLdzHrNb3Mbt5T9rwirqJh6EAWQHiW1FhhN\nV4/NZ6qxkZy8ma0B4RMkkGfLymEUK5tDtAtq8Y7MJ0+5bbitxGOXVMiEq5zl\nP2rZG+/2k/ccBfBNdD+er0DvK5b7JoBr+PKh+ph8sJerDS7L7LXOlrKXMv8y\nhTvGNteCui+3l+i03pYuaolfUJ2I/N6hjp3VOqXmMP/TpJch5D3WKGlPQBaE\n2ati\r\n=2Uxe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDSIt0g3mZqij31qpfrTs/8Kg82HkNtaYGwVPwfKA+9KAiB7WTbzrvowBdg6MadN3ewQbNkrIt6nbOMe/ssFtghezw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2550_1537536156511_0.003272311810360584"},"_hasShrinkwrap":false},"6.0.2551-beta":{"name":"meetup-web-components","version":"6.0.2551-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2674-beta","mwp-config":"17.2.2674-beta","mwp-i18n":"17.2.2674-beta","mwp-router":"17.2.2674-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cd52fe52537e1b7a50bbbb8072fd7159f37d1a62","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2551-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-38ZzcWT48S2lxiUZ3xoD1+LLjPn9GRliprjZucenc8KT4DUwPfP0KoB1f1i3qYUp3JVbWXj5eb9Wu5bmRrcaMg==","shasum":"0d55e132dc449bd2d0f0d96dea8e891d0259f745","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2551-beta.tgz","fileCount":610,"unpackedSize":7828590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqPjiCRA9TVsSAnZWagAAWqIQAIQ1Jh36wvpLFG53G/TJ\nqfyHlt/Qc8AedJ8f/idMWdXdxeiDrcKu4zChoI4N4mM+U3kYimPb3wUMgw+w\nJCyzOsCHjAKi/Q8s3+I1Xy2diI5/q40AXMVwaj24hmEHXBpuo/gpw8sZVl58\nHBFy9x42mp5dp5vihkYz92ncSqvQz4Tvt8WC3RztQF+HLGdiV5kDzvslR3XE\nXlP0sd7rK0mUOPEA+10agQv6qHqbOjtesm7B6NekVeC3jYuztNzAEXY3xqV7\nVPWYvam8b5P/SfG3tjTZACTuCvwvZ+4aD3hl2ACYzz9P9xpMsc9lgtGEs093\nsz+NdvFhpM7rAaJWJfWK5MwRT7ENhDLxLO2nQ66hwmLxgUzl6Rv7/+6BaAow\nOgGBGiFRRV4R0/MTq8JDaMOmamh5EEEMHl2Mzx/cevq5LgYk0aGSNDnNlaNP\n3plWrKAIdKYQQWWtNhxz27dkd092wC5oGuZyqYNgyLduxB79qtDu05tTP0mR\nAfHp+FNF4O6FrWo2I4HhfOUG+jMJJs8Cu0lPmyQp9hhcRqFbmc6NzcoLrcr7\n0HXas9VPpOiRsbcfxa9k5xljUvXSN1QlnFEXf4hrPJeYJA8mC/ASvVA9RbyN\nmlbGbowbSkh0WewzAcjr3z39LGHAeRhzMuJONekCsZ3TZgKK4gsWg2d1j3rs\n39Ba\r\n=46VE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjdpuAES5ayoQJ06nbvsQQgQBslbcj6uGmDu3Bs/QmyQIhALy+WIujk/hGrbds1RLGHkV8gMO3X0EjtJYKL/qNURIC"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2551-beta_1537800417513_0.039043624198660476"},"_hasShrinkwrap":false},"6.0.2552-beta":{"name":"meetup-web-components","version":"6.0.2552-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2675-beta","mwp-config":"17.2.2675-beta","mwp-i18n":"17.2.2675-beta","mwp-router":"17.2.2675-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3ef1ac3e48918a5317a99f3906b3ded2ee249fbb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2552-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-W7EpCiFkmxfF7dkcNhJ/CsnjbOWzTFJA9xb/pCUAKMqz1d/ZPIjOB1rGRKK5eIABzBwlOeF4XEMqblgRlXGM6w==","shasum":"19105cac87e828ac3c2a04969c5d8068472215cd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2552-beta.tgz","fileCount":610,"unpackedSize":7828726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqREuCRA9TVsSAnZWagAArrkP/1Tr7mEPnDFb2vz77e20\nxCQxdWfjYxP7mRCdTbb3VWL+V+dX88vipKK1+C0BBrroqG/XUk5dqvvECm7V\nPC/klD/5iG4UvNmg2kVefER8E/a+NCdjXZp5T+aQYMX9SYSjnxRZvOgaQO1u\naJcU9l+O8TfCtoHQkzkU45/VzRTGQbEgAQ5OUyGdr3YRoZiaGFfP2v4ausbV\ntmWO4OKNFimajW5dRmlBoOY7m4QfP/cgqaGOwE/sQVB5FSch4p38gGUx8IlQ\n8lh1rcvK5mOnXpzN9H2fP7sJtZU+9t2CqpZJNQB5CNU/vEPwfxzE8mlbt1Ta\nrTDo6gX3mWbvQc+PASwDlBlHegexLjHyrToruMplPIkWYiA5/bVoJLB27Dn6\nl2JtJhDXsyxXn0X24oIimal8nebcPb2beuTv1c1o8PnskcWcA4f55bXOj8Of\nZqm1104GzU1jTJVEi6VzLAoX1A7Pz7OkkHP7sXHHW92dAOOqZkaPhy/lIFot\ng7DfShhqDRAWKMWiOhk440gkZeAdTt90XS9geRLXHNSMt0yRe+kJjaion2kH\n1sbjo+pVQ1VR4Muql2FzhBWHzZrSA/eB5RD3llNmzYA+e1LRBabxLfh9Dt0t\n89oT3NEXBGAcguUGX5Hx79oQcnnJ1MxFZAA8CfQG/Dvhd/QyZ0f29TMpbOzH\nHpqV\r\n=dNuA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVsl7AKAJ/JKcNEMj278RCxWyojFaPtNkuPXz9f3GzsAiBlaKwdaTGQr9NRjPexsadJuCyarjD7woUaOTTe9f5sgQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2552-beta_1537806638068_0.04143004558959085"},"_hasShrinkwrap":false},"6.0.2553-beta":{"name":"meetup-web-components","version":"6.0.2553-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2677","mwp-config":"17.2.2677","mwp-i18n":"17.2.2677","mwp-router":"17.2.2677","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"84eae86652ca231c82f2a9ee1cf2dc4ed38ea09c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2553-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AmPBjxKhMi8iM1lldnNYFXNvLHTtJKixMBjJ2MHUSdH7pHhsWhLcNZH7tP2IZJO1Eacv+sQ2w++nmKK+n6I8+w==","shasum":"29e891a9c136d61942dd24aa8b5de0a25d36e351","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2553-beta.tgz","fileCount":610,"unpackedSize":7828626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqSEcCRA9TVsSAnZWagAAwXoP/R8ZHbgetqWzY81iAwl7\n5u6whmAA4hMU0MlUbgE+pT4ssnwPYiDNxWJ1aBUPIuYGze6P4xCf4tlWp3g5\nPQ4Kfm8TlMwIsBK53wD47JMyBOFM2tRB0GLJlX9clfPa1tzg89pdrJMMVi/X\n4+3oAmhn5vk8fTEEfjsKhyGAto4C9aJ+p/4VAYD/qPgfFIalUbe0oin0c0Tm\nDnb7YWX7Xn2XGU0VSnrHtwmhefU35A/NpfjI8mywwogy/nWMY+Ok7N8QP1EY\nlRbcA2NltG/rOWKqlnnZLIegnvChnVFRqNCqXAYgBE6/Caq7cXvnenly1+UI\nJiFij2Iz9eTdu6qDI/EPN8MyF3lQ8GTygKvNP6oN2rfjh0jfBXG5Mu8HxERg\naNLR9UPIh2oNzs4EeHZoI9byYoG+sYtAgukKpqOcNZV+KHKHFT9wYtdpdK0X\nAuW9i51ZsIKEbE1aD2TbE1na5qx4GadOvSu/lw9A/5oWEn+lmfcwyPxF4sbq\nYvuas9pLxHg5zQsToG2Q+UJ8Z7qOl6XsLgKSMHB9yl1Ojc9VE+pyVsQhdxqm\nq6s+K+dkAOYtAmHJpI1MrfSGxXXh6eLsZYrD+/YVQ29BQ4Rpsws6TWeTcSfB\nauLeph0Db01ijq7f/es5HPKj53hHbGm3TvjRO08NbHRLdNDHM32zjyQvRXr5\nOe+C\r\n=lN8Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0Ctp5o8VNTn5oa5w0PzTg/KzDapCzscL72SL75yMQRwIhAIJgUUHo0zZAm9w0LS/0zvqRvG1lfDDZJ3j876gRKhM/"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2553-beta_1537810715374_0.8767982383265676"},"_hasShrinkwrap":false},"6.0.2554-beta":{"name":"meetup-web-components","version":"6.0.2554-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a74590c83dc5b99b9cb58e823e421447e84b732d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2554-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cfkfNxD5cw/ZXpu5pcPbltCLJBGgooHUk0XVwswaBVr45yEDGZMYRuqE6PnGjG1j0+z9dfFhYK0Fnjk2CW1Q7Q==","shasum":"8a606fbb03a253da80503244b2d28b17248a678e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2554-beta.tgz","fileCount":610,"unpackedSize":7820558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqWU0CRA9TVsSAnZWagAAZvcP/A92SQDk8wR2Sv2owfdn\nI0n5ipsYvIqrmmuxGJRmCaPS7/XKR1WdsCjf+K/Ny2l+kyJs3teq2WHyRJkA\nSvbq8m6nCye0sxqNy6C6bmGDXdPQVyLPclgKaFhZMWhj8QbF017J5GKBbjf7\nyNX/epRJNLdfc3BPPxKV2QTGnPFiCX39GFmYN4BbxkGrIF3cmIos9m75ZlKx\n4KIA0WQhrvTyl3PWYaaumTA7N3sIfyw5QA1PcwtsDTYUlq+DgbP3j01yHpCn\nqoO/2ARyKqEd/ibCp5uMPKZ4PAdrakIIDwCCl5KhGEQjZBaC0kKBugLAeOQN\nk89jxAME8A9NNcR06bEehZz9ldGpYxPvIMWUpJMkyfRsmHKPyHKK1mkCxhhm\nuMsB5Ccc7ud9Xtp4aNy/1q98Ytiy+DKGBG7fxmbizHPOqpWRBftNYswHL8XN\nyrcJ5jLJR1Mjhd1AsolcKUzdzwimyF077Twt/zIU35sDcS2TfJU3ZMJNIKeN\nJvfU70K9FgMJE8fxyyEwl0g3RBcAa384naP7/TevLImWNzrZnSw89dDQWcRt\nRxBwS3RrZphV+xrxhLO1eZ6i9DoDpd+u7SvBcUL4e3Uw8wvUQuIWR0dO2l2l\nJDOjVXaua7ZD5ZKQboqW6F6sHmyPhzt02prdp3LFNoxu0LgBv9dsciEwy09b\nnRPF\r\n=h3Ob\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPGb2LBVFClwGWaxjp/GrgaCHM+XJyMTAbBa3ZIdca6QIhAP1f1zOeXCnno8DrPdOa82mRvztOAKTY1g1S55Ca9cdj"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2554-beta_1537828147918_0.5685779919128813"},"_hasShrinkwrap":false},"6.0.2555-beta":{"name":"meetup-web-components","version":"6.0.2555-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2677","mwp-config":"17.2.2677","mwp-i18n":"17.2.2677","mwp-router":"17.2.2677","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"409d79b5af29e35f6fb3160961909a073d7ad212","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2555-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UCWae5u1eXkTuxKPAoIAZZWI1Mekq5Q+0PhbyqsodESL7lvClEcUZzfMVEWnpxMC0GbkgmDi2tBRkCdVDfYCKg==","shasum":"10275578ff15bbd884927c67685842074686453b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2555-beta.tgz","fileCount":610,"unpackedSize":7830000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqX8ACRA9TVsSAnZWagAAcSQP/iKzKYR436o6SfFAZZyA\nqn0rcwQDcg+AcC6WNgw/Rq0EJNbsDTETxrCeiQ3B1uW9Zst3S6nQv98yYFuU\nROn0cAWUmgqQihXnZyS1qOEQMrZypNgSubmq+YDN69srStrRF/5LQkpKD2SZ\nrC7zqb7QMKmvwV6e6Cj8A9stLdUKqf9r3O78fJtamFjaZjl4VcmTxhx20CE9\nBSGCbTbT3fcr157LHb+NGeU46lmOzPfaWFkv48QLPJ+Jeyoo3tYz0E2cwQKi\nq7tRGSOtACYM95NxpAEOKqJRehLX9iRQUiU6QbbnhmPGm5mkhGrxz1mMDexB\nWqwG/ZpZSnY8GxKYv1s0pDelMPItXLNEy8KhQZpO7QxK6q6DphZCMZ6rvt1C\nVZdEEdga4QN7FUFv0jUHby2HiDf21ueQLUeeuBEDCtbELpgOfDfBj0/1OfLB\nHgunWduabynrLeDfqB7kWwA6bOtGgcd+O0Su+ibjLW5vTBHRHjk2j2WrHbIu\nLiMF/sawF4/V9EVXFEIrncdT52jhU1Dv95FBcOEJcTkVhrbZZv0VxTwlCBVc\n+c+V/PjxtgrdZsJMbufGdUIcjYd8AEyFPanR4Y37uzhg2zOh4rYXq/McfN1i\nG8u6xXQ32SC1BtXra3WlL/9Uu1USMrEKb3IOZl1LpdkLC0ygrKn2dn/LmtnK\n6KkO\r\n=DbMn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgTccWa+YXc+RCxwuLnO7BE/wLwmdN8hPCD2+XGNUptwIgETJmREGYMMAtAQNumjNKXslnE7z0uJF3k8K6sta0ypI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2555-beta_1537834751330_0.36083263131851195"},"_hasShrinkwrap":false},"6.0.2556-beta":{"name":"meetup-web-components","version":"6.0.2556-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2680","mwp-config":"17.2.2680","mwp-i18n":"17.2.2680","mwp-router":"17.2.2680","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"840e1af2142b70b70624209e13ca7d85eaf53551","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2556-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ljZJkE02vYJ1KSF6YYxzakib3crGT751lqhs30fGObFpwd93TRV1XzfW/OSVxSa/gZ7T/5QWp9eeLWZsScYLpg==","shasum":"df26c6bfaa334031b533e71a19fd36c660d282b3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2556-beta.tgz","fileCount":610,"unpackedSize":7830000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqYx4CRA9TVsSAnZWagAAw6wP/iN+Gi5+lw8ZQApZXLPo\nWtlNntrNPxTFmwyyB/LiK1OFL0vDY2VY4nLLGYtTNOUrBDhx/IpxMdzhY2KA\ngkYPPn5lUxBD3RE7rtV+oULWx/0ct20OmCet5L1DM4yUHoSMPXAI3NvvUaTw\nEMk+uWc8sB5JUOT1SLtDtKNtn0eks8MHH2/xA61btEl0DRbdcIXR3ejPe2QJ\nBwO5gyvrPwWMioLZLENuw9buWhsWgbpYSw1UIx/FhQ78CSPPSdZcY61RDJLF\npBxu4o3egGCCpqNSG9L46Z/xYRUanIVFn49koKu9cJNpjyG1ZQzOOHDZiDhs\nG5t0vMsnD9OWe/59ODHq+Eoio/PzKiovQWMt+Q4VJjLnkE5g7RlNWtGMCDY5\nXdmIYf8HprnqgP1RgcFoJRMZIRxCCAD+E78ExHmZu/4rDdSBuZVHsClzgMMy\nSIHLh7BHCIszximFGUNPi7UaR+WXZ1NIj9ClEMXfcbqn0JojIwy5ocEv7Bjg\ncohte7fZMG53y4oBXjWiJrNGQQLo2va4RPDTH1XaM09iyMaDPwv9v5Qd794b\nNULcNdPPE4ZZHy6N9NTv6drNW286zBj1gqoKe7uk2zp8XLyXIYqiY81NTf2e\nxq59Yq74gpP2W00/9xDPMd7fuGEqr97ZcK9N7zQ5vrD3cvoUK8pNdqgDLtYU\nS1vx\r\n=8uBw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDywWrpoGpJK1PY5spkFMCgnl6APQkeu7XocpjgqsbRCAiEA9o8f0217m8eaJUKq5eQdCCPdmsccQh91QuBxmKhU2VA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2556-beta_1537838199300_0.3201492308089222"},"_hasShrinkwrap":false},"6.0.2557":{"name":"meetup-web-components","version":"6.0.2557","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ae8975d6f97069964de583e39281fc53ed170cee","_id":"meetup-web-components@6.0.2557","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VDEFZvItoI/6GJmVox6qJVQMZu2mhxwKPfLyxy8dbVAW+UgBIvv1HkRJRqUUfiKdQMc1FQzBMcXUDoFumlffOw==","shasum":"4ae1c81a7174b892e0145ea17898f2cd98a42396","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2557.tgz","fileCount":610,"unpackedSize":7820553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqk1cCRA9TVsSAnZWagAASEAP/0ojfkTnuo9Bx3bU1wUb\nEOEVhMpAslEIjFsJA3ngOKtSuWYYcdX4d8+vFdUqWPO22mup0m5Gd8ZF1eKL\nxsu8ku+RARqfIKxE/wfgu/g0jrrvFf8KPmHf/QsQSzaIT5QrXAlgTSi1jaVH\ngpf2+ycENh+PYU+P6Og9Fjg+TBtiLvPaKjppBnaBAkLMKvpTQE5Fc61sAHnh\nV1XzXFwt9YPgZbXde2Ouh3xVnDA7F5gbyd4jOCJz4jsBpmJ/+PdL7gd7GaOP\nrOhz2zLVbApm+fcSLgt/rBWKWVNbhxePfEwfvgkdD3/J+HzE6EDEhgh5wOiT\nvw2HZmtMaRHL4YFy3fTWofwUOEZefEThH9GgCnBrIHkSvKarTZOky7UGJdcF\neAUcOpvNGDSbXevNlMqmKfNip5AF4BH3lGyVMQ41CmOK0Avmk2SjeWw0VrIV\nboXuhnoPc96J2f7/ocmwg8pVkzEpzX0SNkeme6QG6TZWF2rAar4KRgyBgGdY\nYJxaoeTUBRZ7eHl3tWaaCMuiCu3FoSbbv5UW/NdJ86qaQ1cfKPLxPuYEQnJc\n5thKcVn4VTaNSa86F7F8WnlRBHn1zYXbR3RUTXOIXlFrCWR+ebLS998x8sLH\n9cx5wbEbDsATni/JS6d7ypWeEc5C+8y69GgdGDIOXtKLS83KDy2cBXhnUcMe\nwDtF\r\n=UAul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYGA/rowM1wTRUx/ZgfrMg2NHZIaYItEUHOxfs7OSELQIhAIfS+ocWEo2EIBVPhrHe0XkR3rXNvYJJVl8DN/C2AiZN"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2557_1537887578913_0.913808813659494"},"_hasShrinkwrap":false},"6.0.2558-beta":{"name":"meetup-web-components","version":"6.0.2558-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2690","mwp-config":"17.2.2690","mwp-i18n":"17.2.2690","mwp-router":"17.2.2690","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"acc7536cc7a31356f40298915c44f39e4902dc06","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2558-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vtnHH10M8SpYqeUTa06kvSyNDfGdvFqJU9YB2R192jhL00K3HqHCQ+P2AD4Zo3YZsQyBJtwQM4t5f7ZELVBvrQ==","shasum":"2632047f7cc5e7e8d1fe9e87a2044231a12cc8f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2558-beta.tgz","fileCount":610,"unpackedSize":7830228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq7fECRA9TVsSAnZWagAA/jwQAJjNiWpEhk5ouImhIuLp\n8oCkarJ5Gg/QOGw5pp95szC+RQKIX48Q70r2KbRnMmEoacFWMMwWvXN6fMbZ\nncn9tIgnlXpeSvP69QK3N8kZDO9b0uD2Qi94uFvSRBbuyPIuwnz25vo7+JjP\nGHpDpEyiBwtur4rzVaO/e0E9cGkfgJkRTLqLGt0Gwipu7OpeD5cFJkwCQoln\nV2hMBDGq0qR/sm//v+gxiKh/tSxe8TfBrQYEJ1ge5FLRiPXg5FdU0JnISmy+\nehbwNo3BsaDbz9OmrQQUK/CEDF0pxbciUUIw9Tp5FatXFzzHhZx+no43R/pa\nMD7z/zh1XGCnHPAXHjMHMsQL5t6DGnoyLB5d3R1ucWvVTx01MalwxZuYCMqr\n4g/79pVEApUpMu8EjwZmv0a7xvkXTCfL9awLDfrbbylPmYZT31j7PcYhfnH+\n45O70MBbsMJCTOCv8irOK+RX1DhdCWcekhx/frXpTPz9lPQDdWOzumu5ldcS\nSlhthbR0nYV819/tB/tU3V3XKEnaRWCD1N+DlHonRkOG+pGhF4CuQZ5afFL7\nTwAzMKMarksfI2m33CotDJg6uAE+C2dTN4fqwdOBj0MsVue6yfAd4kPbTkXN\nofQnPUAUOveOFbU2HdpdNaRy+/sjMf/MIuqud6pVU5gaFOWQyi0SaiRuyS6t\nQX6m\r\n=9FYf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQ3XimIcAd660YMEk86ZsiCRFgbSmX+AH0iLcZYpDYfgIhAPuYRa7YO1RcplkEwV8YIlFXH2vqtgZcoCnine//tm3Z"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2558-beta_1537980354715_0.6259927292674239"},"_hasShrinkwrap":false},"6.0.2559-beta":{"name":"meetup-web-components","version":"6.0.2559-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2690","mwp-config":"17.2.2690","mwp-i18n":"17.2.2690","mwp-router":"17.2.2690","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"03f4b51c8487f3e627e1341d131b06028d0096ed","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2559-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DZPjo6jGqeHV5kmY4vKslLRd9EJGq1GKSPf3lcgQkQwqq0KlClB3Bl4xCfI0LivDcmS58TiaZEmGH4Qvb7j3Nw==","shasum":"3aa7ca89ca7313dcbcc18cdf194aa0daeb636af6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2559-beta.tgz","fileCount":610,"unpackedSize":7830228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq7jDCRA9TVsSAnZWagAA2RIP/RiB2Zl4MtvJDLaxHgMN\n3To4nn2XXSh8WK3yZXBnRjqoH7adujbtjgUUlGGiOIxpkc0MpIxQTUpZKR2V\nrSD7/3u6jfSrf9bEVMBB1iouP5gCpOUtCcuxI5hb3X9Gm0HNfoVLY55bBfjj\nHw9tqwFCDI4iZIFZri7C4nVE9cfULs1O2Pncv575/MQngM5EkRIDDbyPMMG4\nJ0Ah0I+/eUDZ7JSGCSojHUshLmd8Gj7ae7jtdirj12UZWyb3PyhmQ5+8KUl2\nXVlQbEunAhH9YUZefXY3AOwH5RlffeNm54gBGtXI0vMQvHgYYFGax9RX2TVh\nW74JVpcB0pBw8n6u6m3jUjKdR/rcZ55WaEY0OTuWwws7Nv0L144/6igtdGtB\nFSgsmeATmWc8HgglYsCIFnVWo6HRjp4ZYnEycvAfpIEsdy3Oh5fiD5hgV3FJ\nktLXLLB6Jn+MUV9BszZo5WLlEKZIWu/yoAuuSPq4APbKrB7vHg9EvgdOXJE9\nIGagJPQKVnhLRbmAvAQXntMgfxhxCOkpIwMkG34Ox4g+UTnkaleii3a+Sih5\ncdW5VQBjVADXUyC3gdncu3vaNtKA3ypAC6mbXavLMdG4P4vKCSOVv3Ihx1EH\nLwgJmlv23bRjrypj9y15jWqLAgyd++9Mqts6HrMfhINwvGHP655CsP23qgA1\nSizw\r\n=bgWi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWf24GytTRUWLT4gHqhcnc/avzf39pas4i6GwN2PLn3AiEAlTVbxiCqRyDR5Hj1TT4A9f+43pN44Cmt9y3bYKOkSc0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2559-beta_1537980609944_0.7283388387598275"},"_hasShrinkwrap":false},"6.0.2560-beta":{"name":"meetup-web-components","version":"6.0.2560-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9e908baec6d1b95e4b83d019b124b6e5a9aac694","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2560-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-MOQ/Q53oBBPzpUSq6S9RGTCSmSTs6B46Pk/i1Hib/jz8e4Sqf89oe8jvmpym5b7jzYD9ncMTYv6Re/l+o+5ZJQ==","shasum":"1507cce8c967d712fcffbfcfbf9e7e7b14656150","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2560-beta.tgz","fileCount":610,"unpackedSize":7822634,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrP+GCRA9TVsSAnZWagAADN0P/jB8c6Q/9yH/8eS7WN6l\n+USnTWUmQWnpUuFHzo/G/xtHqqwXTMs9/t6Y/DZKcmMoQQo/uiB/PtZoqupe\nbTHLkq3T5DPCsdp1nMlpp7U71nKJpSgclxXM/uEOLFSqGekhGPg1CjPYFcNt\niZEdC3nVxocXDSRKL0xx70NYqRXMitFWEChI09E3OQVjRwnVmswI6/Y855sz\n6FGgPPs/rXL8lLF3akibWDT5skK+uxgXDEns72V/fdt6Zs0zP9+r/Gzp/xwa\n9u5ww2AMN6ly/EGmA0kuy3meA7Qnm1BPjU6uYJ17NtxKdd0ZnXUFCgR08fxK\nXZ5m9pDFOnK6X7V+0mHkcObgd6pDhnur3ruDZdgnlCEcTqZaOi3pkrFt1TTj\n2atPlAdvSezLQoSKy1SYvRrS8RNSy+sPD/dmoFxSbNpAcS9QIdgJPY8pLoyt\nBcGGBiSfuEWWUzMzNrZBA42RrNqsqjGiZEkGY8dmHRxvNbAyU4+E+c+YC8Qm\n5zbJdS7I64q59h+UlnfN0u4qXJqCAv1H8kEo6yPlWz5lSSlS6H/h0Ey9EtcJ\nAQcuX0dcsA4TxDh3HomYQaRJwvnnqPfsPP4K96kfh5cyGdDBp2qe9k9snooA\n5gBfwMsDOXkeDx4gjLvKF8eRNB1JbK2+CIbUUdFo/V/Zw4h3XmR3JoSm7s8q\nbycK\r\n=wDxW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICNzr0u4jmB7Fbl52JbT9nbhgDk6Bf3La3MMY73CXvc+AiAlBeTWFyezt+dOWtAYGvRbiaKCmrVAk3FyT1DzssAVPg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2560-beta_1538064261034_0.10924502839798178"},"_hasShrinkwrap":false},"6.0.2561-beta":{"name":"meetup-web-components","version":"6.0.2561-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"67b16cb23034a64b1fee2ef62dd64f2beefa8f9b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2561-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fif0/DVI2R8v5O4s8KnTdxu3oD09H9mGiB3K672LLep0RoUbGqFsYZPcCNrQ+Atd7JdNOJzIHjGJ4tkKlMNPHw==","shasum":"69f754ffb1b4d952b1ebc9e67a9c877dba1b8b6a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2561-beta.tgz","fileCount":610,"unpackedSize":7822948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrP/bCRA9TVsSAnZWagAA95cQAIRRhwv+HKSdUOt5UxHn\nEYhoVELoOsTfzmAHtHL+CjsIAckIuzxHJqBkjPYwQVvsM/FrZi1/JZ4oyz+J\nmQpkM/cZeJfwQB1xXEDk3Zl07RqmgQENtGOMwQG+FFmJNi+dDT18e7bkxltk\nT9x8uy7PwT6KvXtzC5UtJWiUkn1rz4bHw4ZWg3Pf6pKXgKnc2ANpcARNX8Ih\nOmV0fGLi8kyTbuJp2MoOtu6ePkKmlj9mF6mEI+LbSgjRPdrsIvwW1y4yE93F\niH+U0lzn8Hp0aNqvZGHow2sOmyV6tXJk7QhbrUdEG0SZS5Deq/Fd0tkmncOL\n9wXJpUCPm7hmEAYWjJkJpDlYkg9/Z7GUZ6dN6GWnnEaKWdJTys0Epw4BXEry\nEtEQtIyF3TSiskD0yE+6vkn7/S/hcHX8m2rUZDT/BbwrrXHe09ta2VNs+hDC\n9UyZDwuL0GDDARMI0x1QhCYgAxRK4E3/kRsfXKyVPOnuUJVghSfKuhNYsCdV\nbDSAE5asfzXZla7fk1t4kwB1YuaJPWOqo3bpBToxJazSN5r1aI1yt5OXwzsT\nxYmxTTUvJ5V7JvQNDQ3a+hRCsaE/r5pmnGB5RzrxtMk/H1gcBTLSSaf+fwyx\nPqZckQJs+1vbF0BfDUg5KwhW3vc6+VabCCudeuLBJ+Lw3SJCSPVVo8nEgxWC\n2rBw\r\n=Wbai\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbfk15I3Za1Gzq0jalCtZ7J9jkN3/CzCF3Fo5d9E+XhgIgZ3xUHpiSF2KiJXCkn/IajC558mit09ug0onXqO06/tc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2561-beta_1538064346561_0.23644952643113704"},"_hasShrinkwrap":false},"6.0.2562":{"name":"meetup-web-components","version":"6.0.2562","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"344257000fb119de0bf045fd54edb93202fbb22c","_id":"meetup-web-components@6.0.2562","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XGyIlw9BT9kQWv5/IVZzAT8nkEu6tZYrU14yAwix1RlOF0LeW589lUDkepwGZKuHun3qLP8q29JllZG4xqVluA==","shasum":"32b40e193f6ac81ed5d2ef35616a38f953018139","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2562.tgz","fileCount":610,"unpackedSize":7820553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrSK6CRA9TVsSAnZWagAAGmMP+wYLA2SPCx2G5digSYw/\neHTgCnLL0Ohj0V5CC0fezL/y3y9DkEqrYyovdr5PFJZhh0VkVkdkyABTK+/q\nlEEcgXxS1I9uzPHBnvluo04ZRod+Ijq0QAbhWpm6RixSHM3HM3LZn+zg3l5S\nswqssyVdwH4Gk1qH2c+ZNNf4iC0VkQ0YCAFLYxzUiH0BeLVKmqwvwY0EMO4v\nxOv1xuEY6RbOwXDUrpHYISUUUGPHfTwfesYFV2GRNc0fZnp2QTfa/aC7Sr2A\n77WMpSnB1C+kIjHpq0dIr+w2k6LgbpZRDtSsuEXUY4oI9+DJmo44JLKXKYmX\nMUHmZ6LjDQRFIdljTN55HsDPR+a0neaYPuTPlZ44hvFMDYJvPtQKHZt4WRdL\nVR8ug+w2eQ7rVzbI+W35jJMRbSPrngOQYtzThIrKOqAIrd3bZKINUa/eCr68\ntRqJASTAz3bshROAg4O2DcyUcS9Dv7BU239ahrNHirP4eo6awAFTWDiXL60L\n0EGRE67NYDiurjEOMQgLAPa6oV0dc9hJ8rL3Xib1h5WwnxY36ijlUNSVqrzz\nsxQ2tsnw05GiQ2LqIGOFN4h2ihca611G/IQAxuHd5yrlJzFnfYNtMl7iF1Rs\nF3lvNcVpebc4uUF8TXKn74gPmTP82iTHrYd6fTsEzSocMhgkcRZEhTaP0fDd\n4S0L\r\n=Oq0E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAC8E4zttg6GKG5T8pVFnJEwJwA9TTNlvAkGSQhRMpc+AiBzXg/LifSJ5xf63u/pxKpOquys2BYrI1aoGbfix6dOag=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2562_1538073273605_0.3325280493320213"},"_hasShrinkwrap":false},"6.0.2563-beta":{"name":"meetup-web-components","version":"6.0.2563-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"3.4.11","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d863ce9332e719242c3a809f899cb8898972b3c3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2563-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-x1l/HnJdjx0K1ZjIPVhAUS8TGjeKMhol38Yzu32m8gbxtvug6hBAoKsA+N1BP9RlGFaxZO+shg53CQ4dTEVtPA==","shasum":"23b78442a4cb65afb71557b4ad6c92bd10f08bf6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2563-beta.tgz","fileCount":610,"unpackedSize":7930984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrS+WCRA9TVsSAnZWagAAo4MP/2c+7Tsf2wr7jHtWM/Zz\nZs0r+lXUj4Lu3Xuog0IdVhezXfl+uHWy11q93uMQ9otCPA2Mhy0j9iEbg3J9\nm6nMoNrdRaPI5prR2CWoDAupw9AlqlGgS9f33ayb+ZQ7tlQDygRibfw+coO9\nkRszshiLU0lqr1DMPEghPwvM8ODeMOmOitxrQ5t4oeI3yqivhcT3tEt/r6qV\nQSYkFNWGcWYlUlpNDHwGIwmS/pZX9HtvYDvK3lwgJYH/29QGHiqCC/RkYvBy\niXEKxCUDH0/joSBcQEYXyr5M49dmiWc8YRczKztK56QIxVqhHGY6ZuIwgH2o\nEa/M6nsCKNxERBSZ8dV/TUAdqM2SgMFhnDbFKh9kbpXhFgHi50xgmKz0LAWK\ncAsisNlS8O38TuKZ4H6uatxujuBQeR2muSlHPhpid2y/Tv34ftHwfChiV0fn\nSScxwT0rRf7UfN/YP0FHo49cW1c018ggrA4s77Hg/wUjDShorsGWGb84BSx+\n9Sj51ehHfv9rWB0TGJe53op3DTdfsH8DM0ak0LSnD84lWbdSnGDRs8FMBoRR\nlzq6tka5KykZEJvfV/SR3D62BvsFQbmg7QqMj9+hgIHF9ve//Om5hDM3msFv\ndKcz+mUcLjgwvApHAQakyg5MIfJ+qyKWSGn22PTXyLfK2fNVq+XE2tXtMjpY\nNQ7P\r\n=7o4g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCN+5kCD+tdy80d1hLqdwyKqHAUSymYp0H8Z0Gj8OgSAiB4oe/jEF85A5z4G+E6pjQB3IwGRKcnwRaNlJXy6V7hQQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2563-beta_1538076565358_0.40160066409595774"},"_hasShrinkwrap":false},"6.0.2564-beta":{"name":"meetup-web-components","version":"6.0.2564-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7de2803d9b089411d7d8940f2d739bef8cca1bb8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2564-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-JFZO/A/aDbQptvvDBdQ8Y3Q7cycLhK46eNZYprbgm3pxSqzx0h08ZG/Ppkf+42U6ANEPmg7dcyfCzEErzAPbpw==","shasum":"72c24c1227c44f8555395231674f4625a94a91c1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2564-beta.tgz","fileCount":610,"unpackedSize":7825540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrTCuCRA9TVsSAnZWagAApt8P/1NwXrtLhmJkFt10OEIv\n3Efx/MEHs+xhsWeDEE7ajXTU9qnTQEpb1GD5gCTDD/YEf4yq5worGHGmlrFG\ngcWZ1xohBw2Isk3sI3D0CeIugWnBKYN2jnKoD2EQGFuoqeQk7/plY3Fp2tQH\nE4fXMTeL6XTqGI3L9N6iKWP6KlN9v6APqQEQ1GKvzIsZvuVE7O6lJVZzzZ3Q\nvblcqD9LzMdpehjwgadVmzYkqjHPVN7Y4vtcIrrDcq/opiszsbaBFlOW+WoA\nNvS5nGZzErQRA4YUNzMNhsZKCFCf2vXPqUygaXJ1V2xg1FRFazjh3rsyzgFr\n3/lqu9BY34PR4ARXjJNkwciPBidjeMM2aFPXX/7O1YEIhS7N6rI1OULHUD2e\nG5PVy9cJbJxDVWCXy0QZnocuaHKovN96fYSM421f8u+KuVQaMEN/zXXenSYS\nuuQB9p6GdHkTJR+Xi6y3mFYyLa4N9bd8hlzf1TWkuf4FsTusuPgA4n61UNv6\nSg+aylyDyrBilMli1t/VjbZyl3+3xdnceCwlqa7DSq5Fbe89e0UtDBY4UWdK\nE9JVdoHGo5Opr1ZcteK+rswd3Z78TnDa0kyWNp0eXeK5DEMtEl2DJBySi6Bx\nB8DZi5fTrDqrIpqUUTL1Ejl3GVhk1rYc+K8IhE3llwVtK4LkU/Q/PHIOQt+q\nwcOM\r\n=cHti\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICTERfNhUHW3oy8HUh0aa29JPibo7fMKHXoma3b/8cTEAiEAlYb6shJnnflGt//yUfunmE6/srYWFMAMKMd77HE5PWs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2564-beta_1538076845807_0.31383619462186063"},"_hasShrinkwrap":false},"6.0.2565-beta":{"name":"meetup-web-components","version":"6.0.2565-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a8f8193e87550525eab3ce8901645329e7acf491","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2565-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-doWo9apb18y87V7kR86X1r7m9n4/pN8mWlfVjg/+UgDvFPQK0BlC6hgKmeZK68t5fKPT5CWUZpSwSg/CmLbq5Q==","shasum":"c3b365ee3aa36b12f8001ed46d133b15d38f6c94","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2565-beta.tgz","fileCount":610,"unpackedSize":7825752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrTXYCRA9TVsSAnZWagAAfa0P/j+bsXQqAudKfBEYm1b7\ne4Ji+lDGN74Uv+MbN9fobT1qK+Ji1YRlmn3JIDy/ghi1afXl38QRb+f6Q/yl\nYfUPegKva7ACalrfOvxoDChshk9ujJAq5kAa7xousP0jqeNcxECmQ+gY73Jw\nypS/+f+u9ZCeCIEIogKV+6zq16v1MROmhD9D6bQzUT36McWMbdVbYagRGURQ\n4xeze2AP8ylggqUvHuLAqzpvgUINyzbqFvHKq00q4jqnQfhOKGfzt0Av7WUK\nwK2hame+LiuGuGzbaXzJhUfGlynSSMS8VA7VJHW0a9lr93sqiPL/2doJ9F+S\n3wEPwLbCBlqnAz4NccEEOUzTDWS/3EXx2kFMY8FSYkzXBrM1tjE16OyKd9zI\nlvFf1osO8qe8y4yKzZORmqmKggpnDN+sHvNvplcLxTW6suDDM1ciXxFyl2Rx\nvqBiW0vnoVX1wS848kgXOQShk8HkuhtpdgG92amt6+lJT4vMa1SPxp6KXKq2\nI2ygD/b86OEnF0aYgHaVq7XSFzT3q2Vfez+8SZ7g8eHddVsJVzkcW137NW1Q\nOwMpMEug0ZE8KxMDPURSQIR1QQXIiRh8K8+veN98Ip8SJMhzfD4rSL1MnOsn\nbPiT1Ptur2eAdlV3S9CUnMtGUxPts5jWiKqQwyS5Y8/m6nmjFGpMe1UEQTEE\nrWAC\r\n=KkAg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJ7/rdhg+vSakZSVpoAqm09rjjeLNkjidICftOxPjpBAiEA2pZ8nO+HrfW/JF3gpBdRSw2tjlZl6gxxYm2RQOa3UN0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2565-beta_1538078167844_0.2457997406107888"},"_hasShrinkwrap":false},"6.0.2566-beta":{"name":"meetup-web-components","version":"6.0.2566-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c81210045f713c08a3f045e2e6fff0819beb0d21","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2566-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-3jpe1filNteIhrwXm0hZe/sfs2/YWiRWewUtm8R8dN1apTdj8/svBPCSjCQ9TYfEmuRvRDD6+OH4hEoMrir/vA==","shasum":"4505c6ac13fa538333fc6e9122cf80dfec11ce9c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2566-beta.tgz","fileCount":610,"unpackedSize":7825841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrTnKCRA9TVsSAnZWagAAJwwP/0nMtS3kfPFZgntxowvr\n9HDkKRW1V5PxiDWoVYQzTVdyALJFdFvn837BuTB1vzUF81QFbtXBJs3Akza3\nEv2EgsBJwUZbeXDb8HrCA9QDLS/jd66vR9UZnKU0605jkkR1h1sJFsL19PjC\nw+IT+uUlC81YtR9sw9nHdSqkzIl/85tIHCewncXe/tRPSQTvzfkIxLTLZAi8\n/7b58cqC6n7KVDoAoEKsido+HJGPLtVbKNS6hre+OIrstzSexMV9s3NAdQPx\nSBq6/DMexasfn530j18x0RIJHBLYOYxKzBWON/c299WF0CL7YUimoAUCrsNO\nqkA1ylCYC9wd1ZvwUPFWDxzrr0S8U2YoybDAtTL9ubwrDOUmtzBz7q2oeuTG\n8PsnBD9afH7HbJq+JgPzVo/Txq/vwCCjcc5Ocz/9oaK9OjGgnY1YEfqoYhlF\nZNgLtquy0D4Ae3Xz1tKPDhHKTwQcuDsdomE3pHD0ztX1ikQUqVutzzvnnaHI\nSzDda6NN3FHJTHPQ8qHM5oblfTZ0N0VjW+EM4WjB4I+2FpAvP/0iDHFzprrG\nlVKIfarYrkLGGTVYRdWAXljMQeJp93o/jFfy6Fbd/epS/iTtdEWQ4z38ptW4\nv7N9jhI2p8Er596Ilt6AHKS6GipApCJOhoN5JpnsjDmPA+NHZIFe8MzBrS8O\nVsPb\r\n=nxq7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEx0RU9a+tZV95bvq2RMXShDGkBX96t08Eop2Cu9E/IWAiAvVnIMIqG5+ayyehnv4msPcbb7kFsDV3NJOu/mqbMrNA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2566-beta_1538079178200_0.17927748447422354"},"_hasShrinkwrap":false},"6.0.2567-beta":{"name":"meetup-web-components","version":"6.0.2567-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9268745f2cd92098aca45e84a5a7d45ba626a5dc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2567-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dNerfcR9ldxM7x5GyZGmcy//3HQik3cf9wm6QkNZWfxp78+FziCKLibL8otKnKZiwMI+bRD564CZOZwURvfrDg==","shasum":"04e3af98b67f9a4108a25a03650628b0e692ce6c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2567-beta.tgz","fileCount":610,"unpackedSize":7825879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrT0/CRA9TVsSAnZWagAAFSEP/0GdX4gMUteCyUZAIqe3\niPr0wZqHHm7sT35p2pCn8k1rwH0kGQA/tGMxopo5M389t7RaNAXhdkhc/BHQ\nzblZ9nyg4u6XlzuiJk2W/tlWyOmEaygQ5iyTJK2feKMnfI2J3IoIrh7S1WH7\nx4nYXE2w5BLN5/odRXsLH6iFz6McGNzr6yCgfDPYw69d9e4xLBDlpnh28epa\ngBaHkK32Uhtf9iEtMgzdfuBKCojoaNkhrEm6MrkFbTLKM/hlblRtmF5DSsi2\nKT9rhmhM7hpoYEAHQnZaNb0sqODK9uDt2+05rLjiLm5u4/JBMs5VSEXMNH6F\nUR11DoTIGv66JUZ/hTkWxgUfu0Wj55fSxx0skwerCAtzYeou1Q8YxLlZnI10\nEccgFgo2+jjLVsT34hjPrK0IWvZGtivILiKxLFUD1tAe3uJX/vy4QjoxXl3K\nv/U+eCYOCMhgzGLpt+5DfeF6oqecvpUj80rnwjPG9dduSGJKUnW0rb3SPJEv\naxTl7qk85SMbJ1rE3enT7MC/sCgqtf9dM/CM2VZXjq4iPu+I5dtc0/QBcqFX\n8jVvqvGK07YOu56jamXir8YozXoUXUL0iSuMiWtSiKxQ/IkOIrNG5NUpyBAK\nbt5vYm0TIp3bk6gIxYBqpUmis2QXl2sSzZtOYZhM10dATta2hq4NVqhVAp3Y\nvMii\r\n=gPPZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGwnfMGAm84B1mJcrpC2FWuFinf+dDaV8CXG0504LU1wIhAI45Ov0MoytLiP2YWW26UwlMsObSzzo5yhMW+ztdjhCt"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2567-beta_1538080063072_0.3486995035786955"},"_hasShrinkwrap":false},"6.0.2568":{"name":"meetup-web-components","version":"6.0.2568","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"735ff366f87e884cf3240eb088ab42ccc88beef6","_id":"meetup-web-components@6.0.2568","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6M2Y4nbum0nk7GihYlJGS8bKflIwg2Uow1va0bHFlQFNYVJxhb79sUTh3vPTy3/lBQi4mrhLbBGDLMY+pjXkxg==","shasum":"82985a16da0849089bb930df726395d344cc3ba8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2568.tgz","fileCount":610,"unpackedSize":7825874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrT50CRA9TVsSAnZWagAAlpUQAJBHMAFSooNo6U9Vdgm4\noufDeF+RKhzc9fPXKHk1Jk0a2rbJhVMJePPLOjOH9dSq8ITxbq3yFrHUnlEa\n0gfAGrvy0Ayaw9x5Cfq5K1WYW4Bvv7Kbl65W98/hm/ge+aStT0Pnhp2GxyKF\nhguPDeHIIm0gVb3IZqqzcLcVVos5jAif1O05Cq+JIMQ0EVHExcvbPVcLw2d/\nsXi05WnRJS4hA804TBCy8TShLCMzyGUaFQq4qLappjNuawsQHgip804hWROo\nnIk7AgT/fF3cYI2z6//EqFgXBUKdEujAHXDBgfV9K3wgvaZ3fSkKIZuIJTC1\nwXUuz00Ljn8PRKWGTdr32r3CHZvvdOAWd9K6RtpxyBWJ4Ie8MI1ixpDNuQsk\ncxshsbF8YodLx9yLuZyU7LFJiOTIXF4ldaP5xjTLyiiyxuZcx8/n/l6aXC0b\nFwza/77OSHNJ3SKTT4TUHt6+4wG3eLwV6Tb3yQULtD2SVdhV4kL75ALLbsNx\nZKSDy+B5mUOeFOcWOJgk2N+/NPpwnrAYApsZW6a3Rn6IYArawmZQwmaTH2DU\nkhTTnczdnfQEYyb9G0UTAu5dyBBzZfOePmdkDHV5Jfs+DMQH6z+14NpEV8O/\n13tak838bFi1aZ7BdYfhjhbxQp2W8G4lFHMkn5BorKBd1RrdTF3pK/3LQPK0\nub25\r\n=P4kd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLYh+OIcJ0y2cDnPmdrL6FhRAGZTrPSBJS0a1Auxq1QAIhAKQpAmfveWbPGDPWtG1wMd7So+n7thMFaA7wpPEVxftg"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2568_1538080371095_0.693328498623963"},"_hasShrinkwrap":false},"6.0.2569-beta":{"name":"meetup-web-components","version":"6.0.2569-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2698-beta","mwp-config":"17.2.2698-beta","mwp-i18n":"17.2.2698-beta","mwp-router":"17.2.2698-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"95c078806bc5afa0f94617b0ad6fa1826f5d62fc","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2569-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-KWJj9R42zJJrIyGd0BwQIxCOaW/VcjqHHBXJWEMJLrytdHpbSlWv/cmZA0MH6I1iuaqeaqraunCM5jGe0PiRvA==","shasum":"9f02dd75e4eefd4a83000f19b5472bd112a0ef39","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2569-beta.tgz","fileCount":610,"unpackedSize":7835627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrXD0CRA9TVsSAnZWagAAzbsP/3rflsbhD9tu6a9BpHwC\nbdNisqx6x4BztKoomv29H/MrBytn1hBZG/qxGYvEgRB9y5/H+M+b9F31XKgy\nXW3mfKu99V2ZHIXX0YKfINARvWFy0dFGXyev9oBPZqZSVlZC/e/UVJvHXqp+\n0ALf+O4raGpGaGFTGROPPsKTd7a/hF7r/tI3yHPyoMrYANUWX8JU9aBT6SMZ\nHzHtBG15g0Dw/RJ67sPck6z1HbCIZl5WdKetTbxd4Q7cEMnH15BeH3qibXlW\nXIXwdrwLCPZFgE1mo1ccpnJVWizzuBgyHQbgLXQAy/ubqPzl0HNzKI38kPfA\nGcwtPJPKo+Gs1xk+142osOimNeLP2azWV9dx+9IzHXxw9hTt8PhbkcJuchQ1\n5OKQ64EonrRNOrLbPPlttlCK2NUn8Ssb2/L/Je90SkixydqcZWkbaXG8vkwC\n3LqTWiojy2kOLwZeQ3rdSqd4sUVd8jKLRMf/CVr7Vecckey8jZzq3X+JBsSg\nHBK8WivXLphXPbTwfYGFjEpPj3HfvjVpE6ArFDMpL8shDUOsXqy94vCoxyKY\nupVD6UpjjeY4mJ5bI3EP/FPnZuWLHBZZOwGmutqLlWCHc36x9yX5VoC12Fsp\nfTT+fesrc3iOyl5ohFzfGWbuFMFt81ouVVg+xWfz9Iegyb1XYJE4pAC5IYGa\nD8WA\r\n=vt2k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICLoEZ58PSWn+l67TELBNNgup5dcjFG/1KL8T4kWfo51AiEAtTDEt85Jy+UnDhGRuedIt31vTPnVJ9d5d/SA6xiUXEw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2569-beta_1538093299191_0.4147207466086389"},"_hasShrinkwrap":false},"6.0.2570-beta":{"name":"meetup-web-components","version":"6.0.2570-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e0aa8a8613212d35a6154c1b95688eb2fdfd131c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2570-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-moI3wf6XaJMSEPDxcwyFaUVDkXfzQflHIvDTyMs6lzn6k644F6ybabc85gnzfx8bzvT49RI6NOi0J0fQd1V6QA==","shasum":"034c5049bb011330a7b8c0fa0a7b7055cc2cf763","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2570-beta.tgz","fileCount":610,"unpackedSize":7827917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbreV1CRA9TVsSAnZWagAAyj8P/ib6A51k6vEEHI/QuZJw\nUaJmyIFv2XXChbHi2eb3efIVwzchmRXjZL8AJh+dGGddImCTQB/rNyYqOOfg\n5U9wNNEILlpIfz07HJaV5Ay5n/GQwQk4CS6XGHisgqDUWVmawDj6YBvRlHxa\nR9YcW3jggvn7XbwbDrDTs3aOWh1wSCpwtUgiEVF5o+54MysAld2hb67iynKj\nhEt/ioP0NyQV3jgVO8six1hogrsqUONr/fujiW/HPpotC/ggnKZKqZu88zY7\nx0MfNTx82IMRYpf7h8ApuC9U+98uLlZ4xnGUAapn7X6d0J6yNsrpKjLKpKlq\nl6U9ztIHm4jLAU7yDkCkGAsZuVvq4GjOj1f5OmBXkvG6VwJkBt79tnCZeu0/\npu6Mhdw2yglSh25MQmvNsWCh3ya8oXtLKWujXi1unI5fEMvQ/IGI9xDCCH5Z\ngeM1C/ViHecxLXlHOWpyKhgKF4JbIiYlcmXidc8y0bfCbq+307xeIlS7Qci8\nU76/8zCYlaHwlpw41LL0eGa/FOZLb2T0Z2p4Bir5eGEMLgAOIb4/Zl+HcOKr\n7pTCTEj5Tph5gRD15Fke21im8LFboBsGBMtdl2vtrC/l4cwHyuNnICa5GMJl\nI51Y7zkduXUDEVncndwJ+e/AeYzqXlPcF/EbF8eNFbMrJhWbCppNuJ1kvUqm\nGR7v\r\n=L8NV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoqeoQeFjCp55txrsnQ9Bi3eHhJHlQy7hIEsGJ5wUJ/AIgJEvowKYr/Owc1GASoMFdfubEV2EKvwV4jfR4UxDeqR4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2570-beta_1538123125059_0.4906217580998966"},"_hasShrinkwrap":false},"6.0.2571":{"name":"meetup-web-components","version":"6.0.2571","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d38662a4de45e37a1156c428bfe672c059425412","_id":"meetup-web-components@6.0.2571","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FjTKks6Mz7gn6mIbsCCINo2iwxKyKUJrJ8ih+gND/93oDGTPp22ZAY5ICO1rHvZTarT36WcnEGpFEcDprVXS4Q==","shasum":"7c93a6ca835d8ec80ef990a297a9f95611148f26","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2571.tgz","fileCount":610,"unpackedSize":7827912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbreqxCRA9TVsSAnZWagAAPtQP/0OBM9S+USN9f10J0o/M\neH7GCiQ9PyocBc+LLJfyD3WY92rahGjNry6O8sEWIEfWkb8RK3hLxZ4Cwg2U\nmSqSBHFykZ6057tox6pN61RHNMTJdYYY5AkiVneigX8jqYgfdD+fXt6z4gra\nWuX67E0K9weQ86xWoQu+sg07ihTL072hREweOHogy/tYUeysIZtKcsLMKZoF\nZctRP+VMUHmuepzg17TzNAZ25D0ZPRHVWFV9oqf3b2k97ve9DT9y5MmNW/Xo\nIKdpxPgh8Jotjvfv9vudFTNuuYObH+gNNPW+Kyv1sHDs+sDwD9EOa57rCPAB\nNGlOy02wN1KahCrH7DNqDCO6PWTn5fYz/jJ8AS8V/RfEZIoZPneFXBY0GtXg\nIFOvJQ/DaehhCzRY7vR3Rsfq2tEG9x1uQeygmhTeDbOBnNJBez3JYRHzIm1R\nffm/s3woUyC05w4lehrvhQYy7WRHpLVn0TN7tgWxPLQJlcRekeBhtvhsiDe7\nw7T+LZ+hSXr3ex820QUs3zXixMuD+ms2JSdiPZ3gX9YsS+wvTuSDQJ83nMLW\nzPSD4IvzK0eWYsKdDRObOQyIAiLE/G3LpMuD62y3O1R/Sq88UfG5c6LrWce5\nvDlXSw503nMzMgBZ/Yb9MnDoXqWIc8N7zmpkMqpMRbeXdY4fNUyQlXCivL0T\nBspI\r\n=j/GZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB0M4GRg52zUUN4zpJAEWVqQ5uAbSNB5tTJfr6LFx5/dAiBv7Zwnscc4g4v1A7D9hMmbxbuKOrO3K+MeaSvtsj2hlw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2571_1538124464606_0.12867672373503547"},"_hasShrinkwrap":false},"6.0.2572-beta":{"name":"meetup-web-components","version":"6.0.2572-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"804cf63309654ca4d4373e95ab87fd407405a060","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2572-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-CASpRGCjqn7DfyfqVfb6KriBhjD2TpDQ68ZA/8dBTtXP7ShAKPBVmJTBtNYDc7VMuAU1CYxrKAnz1fGVYB8D8A==","shasum":"249567986a31317e7dde945742006cc737566091","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2572-beta.tgz","fileCount":610,"unpackedSize":7824547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbriK8CRA9TVsSAnZWagAAgfUP/A+DsY3oMyRExKW1K6jT\noYhFFNVm/4YJKsXIp8b78gaF3fmGjtiDPHyH75E+eP5satRwUmeaC2jkEhtE\nq/79kJyWyLk7GfexIh1Sj9m/QQEaIS3YbZ/Rd2EetBQUCRDEF+IXDRCJgpag\nPUIZex8pWlCcikwlLLuBGoCxmJAKI0hey3S6q5ys7TR+FBxflybnRgPUNfb8\nX+3tIgxy1xrFGFVlo+ZKv+anyjxBBVbgDmbOTKZmOQ9LoVoo39xT9QiLHgAl\nIrtB+rIGdyqPCn1eMS2yWSwrF5FcV944NbVVXc37MEoYxUE1vn8LBpfhtTHE\nrAAC+zIoLqtK+losDKq6M+oG80QLLQI0sbDNi2znruYQt+A7orrwK75IejvF\nYaKsTCDuvGLOfzmauYXfdSg+Q38SYOq+JG2trejODksno3SDUvrUEMoSmJaw\n54y7srbPJlSYssmd2rJfw5iESVxyilQMpYdLrcquU2mnQhZFZHetPF97vGwh\n0VpBMcNbkvV0QpHqQ7uP0g8Pr6fHoPerW/zWvKnrQ1XaZXHrdVpfGceV3RNf\n3x9h8h48lkVUPEbP753GKXbQz6e1UFVtQTRlQZ9/lUCInh1LNbZOLDJR+j0c\nb1CsQm621Caau7/uwGWuoWtS2QuY8EN66gVkIWps0VCPT9epSqHCo62d3ea1\ntUbL\r\n=9TBy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsSSa9RXH00C9eB+cDry+xRiuqNwkAj8uKDKMPPz6iEQIgUIGBUtXBNUjjFlvK6JyrAwj0GDKfS9nB23qphyaxq8Y="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2572-beta_1538138811824_0.18289524712369087"},"_hasShrinkwrap":false},"6.0.2573-beta":{"name":"meetup-web-components","version":"6.0.2573-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"42aa541eb124cf2d1cb8714a746c36c03203690b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2573-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hQ0MP/0fNAcesuNI0jDEUINC0fPSrUzbeT3kAA7fjTHnSPzs73H8QWjHw81SkAH6MnAZJQkaUJHIoZyjBgsmRA==","shasum":"158acf851d8456d863c7c79133769ac86fc39af9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2573-beta.tgz","fileCount":610,"unpackedSize":7824711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrjh4CRA9TVsSAnZWagAA8jQP/iu8Zd37XqMGHDHFqB+J\nuVUOmvNlO4Qgz54Jbndxv3Rmubx5jrVIdPuDJMY+OvhNeHlS7dsWhlIpdtvA\nnvHXZdpgaeMLR/uiRfaG2ODpI/VH6Cswr82jOpEAiIIy1Z0hB5/snHtPqNXg\n4/+cckqzuSLJyPbqGvyBUnPkvaSu/eT2uhF+5pXvN98w+60vlvQjAANqtO+x\nGs4FBAvR1rKcUw1eJl7QMX/RO11I28sL2NTYPkqfUxsU5KBg+GTCfyC4gGtW\nIISKd9v5809eGk2ZAbSCbcP4uAYHIgy1Bj414zMguv8ldTjJ6/YFeXpNI2Gn\nG+X/7ZEIqdufY42v6r7sQ2B/l4bNvi5Dz6HbsHHMikiWGfyEybrgvvIUAHbU\nWr1tHWrfQjbpCVvIEOIuj+VNRvIBEOCRbs4V5Ywlq4N6B8ztcVar7Stv7Plb\njaXVh8p5k8UCSHjr9jWbQNuA6LZnZ+csDOYhi6+/k7Xh9rqAG2ofyB35Ux4T\nglnXJMEcEiypDJPU6balVQ5TcvHSmKv7lg50jPYf0y8glXQHo5i1HTJgeywq\n8tYu96Xo85+DEYdDKmcw/bboIIOeH/+IJaZyhBqL9IF+to9195nPgqUSIc2T\nIP9jC8HsCw0EohDvXDdwFP6xhA4L2VkORp4pp7S3ypRKictJ7H17a5TEAy5o\nKCPr\r\n=L+g6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQEd652PIXZcKpkOIFzour+WizjQKkg3VNa89c/F/WEgIgEoJ+Z1MgUqnnoptQnShGx55neqwc6+Pqz4dbI3UxtAM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2573-beta_1538144375381_0.26956194871298833"},"_hasShrinkwrap":false},"6.1.2575-beta":{"name":"meetup-web-components","version":"6.1.2575-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"36d7543fe0f058cec5e38189a856e845ba59e5e3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2575-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XFgbNgKFoEsPMXMbD9DOEBGUINAoAXg3o96NX8qtvzcKWihh1aeVl1c969DYgjIStnZD+8o0PGG/TZOZ4r/Hdw==","shasum":"b537fc17740e0a57de8e86a5e25bf3629f76a5d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2575-beta.tgz","fileCount":610,"unpackedSize":7834593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrmOfCRA9TVsSAnZWagAAfjYP/iAQ02Yt3sFlgpLElkHv\nQnQ6IqXa9agKVP8dbhmp2IgCAkTSm6ETNBMDY7W/rsJdqnGiazvSn/emVf7m\nckz9kVncfVB7hrVeCXf42eMY9KzZnJQ85SJpSyqC1w/JxqNcPkmOleyWuVs/\niABWGFFUeIPAFPKDjWm1GVFIvutcPAsOymDoX2L/ykA1/nWKhN5F86lRkiQA\nX3C8oqoHZtCUeLkUAKqdqdSHebxcXdyNXqt+f/tNBZj9Lqm81CiiRa8kqEqq\nuvhWZsps+OH+7Vffevcg/07E2VPkp3zNPc6qesGHHRvKuT1p1LekqYxW15id\njWiwwU1m28bDuNxBIHnONOZdB85FDmLAyyVNFyd5JuhWLsLk4JyNnPYPQo0D\nm0DNcDSRIt/p4/0raiYRw1/n6YbGRmo4HTLiqVZA3RfMwh5bqURzMwWCr3jp\nBJlaccIi+IBT8pMJSuCB/mVU4PoxdofE3bg8s2sUBgZMxgji7e2TOS5JPJhQ\npiJ9Jp1it61t5RMJ2KRPfzCJmVvnFgptQyfEHczCEiFFHrSlL92uFSDz5taH\nAJMFmcqDyi3uydAFyRWnO6qY9werknfIntHGFRW7Mj1cKZdG8bvabtB80nAT\n5GQWMItdbjcJgiYu+VDkgUALBH5siZm7aif6rm3sD5vHgEimx19BwZewgEzq\nleil\r\n=GDC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBNb/hbzUxBZiz2kn9aupmsyo6PD8JfB19t6gBdyXrp1AiEA7DE7mZ5JJIDFjqxXsVpN7rfGmUexZOj8RR9YvdDUFic="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2575-beta_1538155422114_0.8771764600788376"},"_hasShrinkwrap":false},"6.1.2574-beta":{"name":"meetup-web-components","version":"6.1.2574-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"91395147c9329d04d67e95af6c9d798839ff8455","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2574-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-NQqKp5z13IifoBRrG9kPbDPdmU4C0JKolztue8O/WU6Z0rtvaPgvnE8Rcyl6nq1sJJjQ25/G64P5HeoX5GZS3A==","shasum":"2f8a392a1caa28f60384dad5cd973bd49e173125","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2574-beta.tgz","fileCount":610,"unpackedSize":7834593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrmPdCRA9TVsSAnZWagAAkWwP/j+9vvF0/ndsUOC2P56M\nLrNOEiXkDcyU/AFgp7u0qL066GB0futGHrm4Qf9qY4CL7ZhgT5Y5c/QOUJsX\nSIN8jemFhjzR+ShTEV/em5pVDfP4+vv2dO3yHYsuR+wh2x35DSSd4BXqRtDL\nPJ0v7rQG3FhyvKM6b69ainiZsYdBL+Wq6bHEIhJun3KcBGP0bHfgPwT3fvmx\nWWQ/RMtvVswscqfPDi+GB9M5qpS+9q2P+67arKY1jAKLXrSWFg1qqFyWKtYK\nsOG8Ca/Laviu0NosFqrWQa8DcKZrnVzfFyg7ukuLaMxlXAMfoh7000zr2Ga3\nDuaHHjbDiu/1s+oHkGb5N3+mXbSwzYwkgX+LeU2CpYqmCgR3iPF5sqbD7XGb\nXPhuH4AiV5hX+wVdLll/MQPlZkE2dpgGJifIxpMcaqNKhewrmD8327EhxW/v\n9Tw6lf3yvT1dJzVKw6M+rgbOLezMIfOlpDPPamhgUILSA6dvfeURk/GdsXpc\n4zuTOXH8DMxUWXsXIgFcoEVEkZuPmtYuMK2UXFlKJdlnZjml/P1jY8ij6BLR\n5JhrLFcTsU1ubgexgAQ97qS3KRDPttSN77w3kSdIYtVX6MMD4kryC371Zfwj\ncFzOZ/2C5pvYC/lxm29Delu6ciwYTKRibE4LvQkIGA8JTxd643ZccAl5LkUH\nw1nK\r\n=piVH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpAShqK7fWg5fE9PP6N9zvy4rZSp406x78vHOuxfFPfAIhAOvwcfFGRN8mbtKLIHhYGkwLHPAgG5nijd+yKC9bxQh2"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2574-beta_1538155484427_0.2050209964825327"},"_hasShrinkwrap":false},"6.1.2576-beta":{"name":"meetup-web-components","version":"6.1.2576-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7b72591cb2e97a1f27fe2eeb101cd08a1e9321e8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2576-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jSBruTg3B2hE0xQzNmbN62YasLCDZbJHdbVKNSHRjGjZX/YGV6wUqKn8Qh/HL9ocNgj58fk1IMVuSivW+efutw==","shasum":"ddb14062980b83c5acf6fa51ba8052afcd9e60e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2576-beta.tgz","fileCount":610,"unpackedSize":7834900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrnWHCRA9TVsSAnZWagAAYHgP/1g7oUg6qLYeJWKCcOkB\nLBf3sycOnlqOrXR6QaGtwwdjxCuxCYA9v1waK3xHyjXYiB12sXncH8fMPpjA\n+/l4G6Ztw/uafGP6nEMyO8DRzBcNz+kbSbQuAK6T5PjpuXeuY98eqoPEsYrM\nwJ96QRf5ZUMkAtxwpQAJ2+HQTPVqMUnweFE0P+q1vlW6pkchXc2onjCl4v2R\nQ7KMdrZHThENI+XGCrfxepHofKtFPxevtkn6hcvonc+gBoCvd5pNNy1LnhOl\niRYBfBUOZMp4bdsf9DKw6ulVwLPB/s2KjFldg2HINT68G8YWmaA7FRmXkX/6\n+M0dXfrfB45hDkiLaYaTWAcTMBD9xOcj63mqYsPuCz440QVb/TiXrRKofUKU\nghoLdFs1RbTCutt9DmdK1pa8UospiLFs2iyh1a3gqNAgY0itzXLhlxWy0R2x\nIJU6dP6XYjkY6cT+OYGHLbMQ/aYlm9ehDNkFHWUVc/qEXRUHDHoNevGRYnyd\nrETnbiKwrpULXgGXNOd/K2bhCt6Hq36+h4eanaa95HYxR2wnZOVhxT8Q897U\n4axfGDjXGcF/a/gOu5QMNcH/sOHB+VzJO9wbcujZxbgW1LwJ79zBTHj1ILg/\n3vL0Bcs/T3vE3It49//EjoCJw3nFzYGg79S/mqW2vpJRwNmWFxoH8L9fnBn3\nMB/z\r\n=96ko\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1rSvUovnHw6PkObzOtdXEPJmlJCcJC/I5taowS7c+dAiEA6vAiBgpIOHD1OzjRWUg37fbC3kuSw6EXGME8eNPHX8Q="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2576-beta_1538160006340_0.6127719424075311"},"_hasShrinkwrap":false},"6.1.2577-beta":{"name":"meetup-web-components","version":"6.1.2577-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engine":"node >=6.5.0","scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-config":"16.0.2422","mwp-i18n":"16.0.2418","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0d6263897bfa7d448eb0962527e058c08cb4ea45","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2577-beta","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-wMXRfLMsR18kGwPzULckCoRuXTTrWARjzpxH2gwN10Ln2ZmnWub3gIJEbxa5KLxn9/+yfuZgbAKu4wt2m+En5g==","shasum":"a361560d9a56a247fc2e0d93922a3bffb7aa418c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2577-beta.tgz","fileCount":610,"unpackedSize":7824754,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrofeCRA9TVsSAnZWagAAC0oP/jRKBKJueFz0ApkQxJZX\n+vr/HidHDWvReBUCFByK4nb5XE2ON7xJ8o/RRBrE2KMlxlqIDsEL/ucVPNq9\nRfmnnr4EVc+SKOmLxZi66/c1UE7H9avZNc8rAdPgL0WIL2Q7W3l7GelFfjmU\nOz7XT89HX/g3vMEg23S3ZtQYFN6CeB5HumJKoSDIERPO5nR/wHiFRrVR3LaA\ncBH4tQPJhqkyKM5z5mkskSIHXIaClpQr6WiqrDInF1RAgqSglRCJDb/d9EuE\nqyLaORVa/5Dd5VO8OBIKdjgxFnlRs3ReJw0m1xILFG+HmdVrlwCT4XpnIe3N\n2Nyj3fxzgaj+SvRRGrVHx55/pGLfTLaMsn+YQkL/4poAsTP62jTUJSZAKMZR\nnKHQKZchw28vMIKOLntjbilVsS0bIewDsymlWFlzZSdwsUt6F2SlWOBSJEBW\nox113/vXvL3Ijs6PW280/bd51Z9JqIlU3duqiuBZ0Zl2C7xUSDXM71oXa3s8\nxAlM3/tsyqw4kYi/9z0z1hiLOzuSUuPJ7maxawT7p0AN7APTnWnzFvmvFkVc\n41oTyh365G8R4nTzKlt0tz+lTj1pMz5JdSRswIwvCJUi4fRNGmPPevt/3qRO\nJsOY0asc5urTOqkq+bcx7YtE0q+N16xYxNqBI2IPfkWtHQuW/nJEzrSe0pcF\nYMij\r\n=kalb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuD/lopCOPxCcwu7FXUPk8fHD75CII/relxFTTXOwDVQIhAKeYwKx1PPG2cUuTQHaW91Xb6LPiSgAlJf6lq+EyO90I"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2577-beta_1538164701826_0.3754424786142989"},"_hasShrinkwrap":false},"6.0.2578-beta":{"name":"meetup-web-components","version":"6.0.2578-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2702-beta","mwp-config":"17.2.2702-beta","mwp-i18n":"17.2.2702-beta","mwp-router":"17.2.2702-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"508fe968592d20fad0f28d113459205a004d9f9e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2578-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Lvewd8DTrYRweGWeNlIJGOBQunuhxPIw/1/4Nx0EEdyTkLhNMkAsw66PmE529XGPkyGeWvCvdSUhIhQfz+QqdQ==","shasum":"28fc2ddaa079a1c37fb94ea91a24952f0c39de29","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2578-beta.tgz","fileCount":610,"unpackedSize":7837980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsjqICRA9TVsSAnZWagAAr+gP+wXmVHQNSWgSyTV+epho\nmrwbZdq4HU//TePo5nkFgrps09M+PsAw+RpvEFNwRsX2DPTAKnfOfTvhJye4\nk4MJSE5ip1aziqBeILit01a1sdlJMxfmFhW0jBrG4e1NdsAujUsRpavM0+o/\nyBctgcKV9F90CTgP6QFlxRwo5KMKPff6990KpVVRsOQSTPdk6jUjS59bO2V4\nW437zMR6hYV8i8ZLZqFWoivTVIKiQ3osB7Mpn//zJcf43vHWBVAghq9PG756\n52xag0RDkEwoq/smtPFNcuQ/Qq/xELGoalQ/Bmf7U4iNb8SkRPKFpsS+54Ve\noAmLsjk8yPZo7iZ75/YJ/lLwL/stJI7MKI2eTRnvCpLwYT/4GsL6Vy4Si+Iw\n5sYD3v8+Q+etff+wVwBO6jW6DMf/dsG9fHPKDaw8vURSrCva+aSy0XvVmKK/\nPbj63QIeeH0Pl53BAfAv/DmmxDqM1E4mJnDBeAoffgBxVNT4mCJ6MTBlZd2y\nskSN3HjdZ78PPlN1Ur+YLeXMVtPxc5LNGOBBtMuxIwtqSHo8XfqphnID5/Pz\nWQf/ZUfIyie5RfRMhIKGlPrCTDqbBzd5L5/UYImnn1S/BVkkxyI6nt4Eefj3\nrirhfmDNJ97LdrhHGRFIvPHxBBs//rczsl1LB3Cxr0FipZhL4OywPdIvyzs2\n6Ys8\r\n=yWye\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+gfKnVxa+GcBDpgA4dYNnj1xwQAZRaVlguU4gVhetWAiAmHcYeTqq6H05lBTaLAAVVCKIONutSV6RuOLdwfgSwDQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2578-beta_1538407048144_0.16573886402844162"},"_hasShrinkwrap":false},"6.0.2579-beta":{"name":"meetup-web-components","version":"6.0.2579-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2703-beta","mwp-config":"17.2.2703-beta","mwp-i18n":"17.2.2703-beta","mwp-router":"17.2.2703-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0b0660e3518589c2e6ec875f1a3c96003be24140","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2579-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-v3z2Vlo9LGKkdn4k8dN6uXkdkpkYk6SfDuhI1I1qjZB/dLw46gU/RX3mm025XSZGgyGpAllLdaNsU0jMmymC2w==","shasum":"39b65052d258d003f44386c81558abc32d224207","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2579-beta.tgz","fileCount":610,"unpackedSize":7838515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsm2PCRA9TVsSAnZWagAAE8QP/0NCxCoHW/UsdH0PjEVx\nvVlQyIatq4Tzv32DdnkwZwrWSKlbj8Nwzt/+3BSN+SHsY+AXKdl9L7WVjkCw\nYTFrMjj+Zp72xIJCdcViMPzq9KeHtM72wOqJHsdOkH7H1PuuEiv3kCh/GYf/\nlCQGLJvtPRrb2cG9GBAOi7OS3Fwv+1+lA6gAQGjDfyp11ZRd/M0nxb4p2tdy\nDwS3hL3iXStcWUbJq2nwSWMwmpThtPLA6vqMElelOuVTreE26gUvHBuwy55C\nI0gM/pglBnxvHB+W1LPy+mh/CraXlcyCuAzjA/Pta8hRappGS2re0ZrZYQo4\nJ4fu0E9Yc5B2QRe2U5nezekaDPoTJkD+IAbFaXePHHbCuk8aFjkMO5hakapU\nJURQ1j2MBKfJ05oL95KXkXJ6TvjnPZSgrcX/0A4nErCoC50ETjxrQyg6ScRu\nSlW9XMoZKQb4As2jo9AMWBh6IRwcinC6uafE9fzyoA6FXN5TXW1piJP+yTJV\np9T8+lbaaI1AMCwdd1pEAihNJCMOypgoQvoD+HJK7a5i5I0wP6D0MNZkCEFi\nBvx7Ex2O7/iBTluUFFsUMW2c7CMe5ZwZBIArmIIPd6xZsFXDrW9M6b1cOAQF\nrE2OPCa02ZS9TJOUINtaaot1tE3TM8Nkt1G9BhQXvE4ptuMFzixbQxx8WQXH\nTiXn\r\n=T/WC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHIdcztDiRnc7PoMxyymc4rUyRO7Jh/YR5FQJ/Vle4fuAiEA+TMoAY49wdk3XMFwmrMxtTujSdM8M1TPPeNCYr7Yh1k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2579-beta_1538420110835_0.15221832309286665"},"_hasShrinkwrap":false},"6.0.2580-beta":{"name":"meetup-web-components","version":"6.0.2580-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2704-beta","mwp-config":"17.2.2704-beta","mwp-i18n":"17.2.2704-beta","mwp-router":"17.2.2704-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c2e3731e7856fec5eb886fbe67142e397a247120","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2580-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zDblsLed7//xGzb3rjDTIZPJCJT73BU83ySiQvDSIzc6HfxIfCwS//GuOZreNGdQg1f2EXyONo5aw8SmLR8o2Q==","shasum":"e1916a40fe57b16b168574f8715256ea349f0fc3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2580-beta.tgz","fileCount":610,"unpackedSize":7838744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsnvCCRA9TVsSAnZWagAAY9cP/j8+7xZUAaJ7ehBvih5/\nU+gep3QdwLZ/fO27y2P24cDO5niw/0S1ON0Gb4mNiSiByO++NzmqwHbZoXcR\nCa/nAdLGNWI2XI6Tv2dvqIhlmcO37uN/0FFIgNW1fmKO3Zz6RZb0T0UU9EiI\nDF/Y106SJxRdCqNhtIH7tlATdsS7vAvFzD5ViwDfmU6/wothGibO7ebce6zn\nhkSQoPt33AacDBNq5vL1K0O+6FLyKRRGnZWmvoFJPrYwNFAeQMX7hlNrippw\noWp6jQQHQjenQrP91+gPqJWHm6sto0n2jMCNmQCIZCmXWivoSbhuG11Sxxp5\nzjql98Zfm1ZkB7/Zq6KbSmP3+hVcGRqgq09JE9sTxOPVDklrr87s48n/Cmwj\nfD/feVeLSKgVNrCz2lpcnB8+mwPv82v/MiECtm9/UC3GIPX6FXmPE89zkfmc\nbAT/x7HwBNWXQvkpaEW7z6xh2Vb8NBIZ4FwwZ0e17S/XPV90EnOXoaEeleQV\nTyhgIj0ziDaNn6lxAKoYztZ4auuBcJYr993LGRXT2pXqyXIETcVFTgfwoseC\nZaYDvmQKlUvbo87LcR8XdhoddSE5x6bPxomT757lpamC58lQ4DzehlYfbJID\nts4MPyqKf+8juFgKfKRczavzHPklmwG73MQ0WnjQvjTLFeLk7VTnCu3dGcFx\ns4EQ\r\n=UwMp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaPGa9dk1wGoq2SScX9IEuHrLkyCT+lOzIg5ngPxyxNAIgIta8mTJhOzmSd7dR9+XAOinm9b2fWUPO1wkl0VIiacc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2580-beta_1538423745204_0.6134719487799449"},"_hasShrinkwrap":false},"6.0.2581-beta":{"name":"meetup-web-components","version":"6.0.2581-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2705-beta","mwp-config":"17.2.2705-beta","mwp-i18n":"17.2.2705-beta","mwp-router":"17.2.2705-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"173ea9a3ea25e5dc4e4ffbeec5b225b9161c52a6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2581-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZLf64RYh195nxbrso563Z3z71p4gfZ7lM7z7Q8hAfG7sTPcuM1pU3XY3LnFemV5hgjzyY8maFYGzyvnWquknZg==","shasum":"ecd7b557dc67d6b1ca1adcae86ed622d6c397938","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2581-beta.tgz","fileCount":610,"unpackedSize":7838457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbspqvCRA9TVsSAnZWagAAuE8P/jtdGeHdERcD06VpwiLv\nz34leu/S0MY33EmAWJO98NG66dAxJlgyhP65BB2pX6DySdENFiOJZww32vf5\n3vWCkOFrfSNQ3OdiL/ZFsnmy+w4yX2sYMjttNbt+/WuiC00N8x4AlUPHS0rr\n0yk3sqFs0ASJpntPTMMRWfCfL1Qguhj2jC61RSGi5jF7JJ0QIhG6/X03/o5v\n7NV5eiqPC2xUKL2JULjugoM5F2968TEE4h9mZWF2Irv1qcbUnbVo5If+IVjN\nsq2JkMT3DTszXi1t97MseK22KBwc2k38Q4Sx31l2QAXtQ+YGDHCSkQIsO8q6\nij7LkzUWRIrDGYYSb9NX4nOmGkBvhAmLrXQLr0Vv0WAtTzROvooyBFQKtKan\ntv8q+Sqs7a/Jvr83dv3zXR6dlArhkwNA/z/OZrqXUXcUoSbaqaj0B8FK7W2r\nBuGmOD122yU53oRyy85dSllAiaMCzXLly7TGME27MrVhlp3siP6GKojm3vIy\nYs5GLZUHhI5HzD6yo5mmZCvHXgD+u/h957eVbIBympQqwYiA0ArXK2EgwdP7\n3C8bwRCft8SWfIppFbMwozBmZC5oGIv/ct4QvS4gBQ6P0H6cQZ8AltiTvMje\nJvnrdI+GoV/7AeT9jZR4T1P/aHRZ7pErKumbDJzAHKIB8adHDiqRVuIQkG0q\nuMyM\r\n=7IQP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkVFRcnnqIxOGrssEFghAkge3ZVFjog3P+XhjyjOkRiQIgLEUflJCwlJILfKBr7Lx1XhjWCZcCADb27cRuweef5Js="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2581-beta_1538431662215_0.6904835255251884"},"_hasShrinkwrap":false},"6.0.2582-beta":{"name":"meetup-web-components","version":"6.0.2582-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2709-beta","mwp-config":"17.2.2709-beta","mwp-i18n":"17.2.2709-beta","mwp-router":"17.2.2709-beta","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7d98a38035af3bbf3c7099bd36b67a72756d1358","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2582-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-XLFzb2d8I6giG59v/4scJ+ksiv6UAD3zWzX/BP5Zfn8dlcSDzVasvPWCT0W7W8qH3sDiMEpkdMpcOzn3g4DZpA==","shasum":"ebb5b4c75cee50ce227650848eb950754deb531f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2582-beta.tgz","fileCount":610,"unpackedSize":7838109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbs4fnCRA9TVsSAnZWagAA8eEP/3VYhSrk5d7u+6JfuN+2\n1QwnUuso/Fhp8kc/e8l2I4DDzTDMTbj1Ms4ZcV/7kiZlu0CWXKyl+kw3XKcU\n4IbVmU/yBg8UiqDEFNrBiF/JOKPwT8X+ws1oHTecAa7TrvAIZZMN6N2bqXQa\n48ZasRA0uBJDL157BeKHmKvCMK8VaTDgLA55tBJPr8hGz+q/IVSaBY2P8ad1\nF3nprADa3+7dnQIHJwHawwxKZlZSFUaZB6T2GVur37XYMCjaVw4Eigs1JRCw\nnWlhlPT/xciOGKbkUiaFZgHHM8MvGUbQytXLvaDpKcIJqwKDo4mZozanh0L+\nd4DDD6LbE3e2yuLHODf7IxuUBYkpq322B1bUgUYmKI/z/4UfcqsxY859Iy2T\nMDLW+mhmxp01WOtpeZZjF3Ux1iVsRlxS6ygAPuIkiehxZYFEpV5/AN/LIg87\nZ5cL8WhETqp/LmfwdMaosdLcnroyHOQlqKBtyEwEiHq5htEi49BKkqqK8WLT\nlxc7JCufBlfgyXb/G0qPAiBQ5MzU1fCUHdBcukAeV/lkJcsYg2E7xfJPDXFq\nzBSWWSJAKP4uhV6ckULy4Bk5ssgXx7P7zbkf9Qo9PP28SBMEQGKRBebttz1S\n3D7NAknR17EtKWR6TAHjsGLEVopEedpNXJRh57DS3jJGLC2z9F5kBGa9uLEZ\nFB9b\r\n=QrWW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRAXMEffZy3cgKESwR3Gba+zUJWVF9vnd71d6if9a9KwIhAO7rIK3zwGp127X///wp6PLrp6ISwexVB194LBHLDe9W"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2582-beta_1538492389777_0.2010231117279877"},"_hasShrinkwrap":false},"6.0.2583-beta":{"name":"meetup-web-components","version":"6.0.2583-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ea9250b958268a463139adb3ec114ea9ed2652c1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.0.2583-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/vJWxWbBtvs8xxUclqrTa4jbS0S2WCPjpVyKl5g6Srvts3NB9sAUXyCzicTlsANPg7da8GDi7/z6yMAl9rTJAA==","shasum":"55453520ec4469f160e82a4c3491e444895bf1c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2583-beta.tgz","fileCount":610,"unpackedSize":7838009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbs5FbCRA9TVsSAnZWagAA1kIQAJ45sxpMuA1nCL+3KAbt\nk7IgHqN3DANtaY7xa56Tzp1mEWyWKnQDpYnM2Jhwn2fgM8K13EveJ49ZHUfN\nsxHCJUSLCJArg3cnV+I4U+DF7pxTDqD9dHLiTj2b3Ru1nbn6bZ3OtAb8oxoz\nAOdA8avJnQEtpNDJdaO5Mo2zCHKK09BP3S7fJK6m67V03OKzSU95rTcK+hyL\n9P6QoBpulDihNZxJg1QJyHkDkfuNT6beqXYoKpVTLSRql378uczy+AV3Rtoj\nXEvyoJTFFtEEhV5JTtlYx8JjR7oPcLQkHtpxtjVzl2rHsHrpPazY/WiU0CEq\n4BWInG1EzGqZF3hiyVczfiA0k1AvDbsrHiupbrip3YA36lbTbRCrUaBohHr2\nWjjSuBaipQmx4kz6239b99lm06l1cTv8omM6lLtSYlSB9fiEXhlhFCqE2dLW\nT7YEtfE6IRoQByW7rpJcMyzvHFaAloal71cf8sQ7eG2+eD7JVeRfu5Biz+c1\ngoDx/KKLlZHX8bqc7sqAAOQemj4uKxRO3bykOdN3KuD/Y0Z9YAga7ybMv/TM\nHuFNUbGcrxBDSy/t0x4SXau/NYtwNijqD1E41CXILrBgea0NReYl4QftnC+n\nSVMKnk29+/gw+KcSlu2u9KSbF5vWc+77zccbjC7KucX2vgc1/P94UAPZScYN\nHMzN\r\n=PoOT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGNgCLapoynI+Na7wMt8gcxoKd7qv6GmPFBquVvg8YLrAiB2yAoMadI+aFPpimsYKD8M9ljWDFhfEZww5hk7B7pRQg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2583-beta_1538494810123_0.11424569094327719"},"_hasShrinkwrap":false},"6.0.2584":{"name":"meetup-web-components","version":"6.0.2584","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3c42808be1d3135be13f86a1e67f046ca7b977be","_id":"meetup-web-components@6.0.2584","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/+ZPQ4OhWpk/8Fvrwr51MqZTXwby+BUSby4wSgNz4ISpV4ld3FZlCdiVwiRRlEt0hyehKYrgcStiMJOfsixDPw==","shasum":"074e937be376eae0c094bf32132abea76967da75","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.0.2584.tgz","fileCount":610,"unpackedSize":7838004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbs5WECRA9TVsSAnZWagAARtUP/iiSklIGT7aL1T10Qn3I\nrq1pQeMimZWlzUJ7RZTj5vQAhrOnPEQdHbkL632r0Ybpgj/CiPyoy/XnLpCj\njGOXfX9uhASRtEQRO1NSDT8c8j1/5BiFPcjv1st4wZVbb+Vy24Xv9IrQOfuG\nzM7M65/DSkZM8kblLz1LN9SZT4ntSgxE4LMpK+qnT4vvE/nbBeg4RH+wFd1e\ngQ59S5/zZ9CINA8NZxJryCOQXt8M0Lu832m/WhFjy9kc5MqmlOib+kiSu5+P\nSkes84zU0AEoKYxveb5ZszEb12TH/RFNzVpMBA/zgT8DVoBF9i69BcwS/4Hi\nZIMF7xiFh3SIHqByYkbHBkDXADR7IK7ljZrGY86KPO7BdK1IArPnUiDjmED5\nOHgLqqgULZwQpFhvAZagoDLxXZuWJXU/VvEhuidqp5/3BOGKeiz4RDYh912v\n5HVQNaRnF0EIVaC5fabQK1ayA1z+fSxCE8fVN+qP1GB2LdZcBnHMRI67q2qL\ndy288kd138fFl5BBcbYp5MEt5e0qDp3y0RLEY1OAonad1nocgKd2zv9ntajP\niuM3mkBUgGmi+G/wI6GfjTMAFajJGzJuj/PanBDUbtcOveXI7Bpxyd2E/4QZ\nuUR5rLNLnGYZJh1YaKqVwmy0HNg0tgYUJJLZNr10p6Hl2Nm3INx3S4YimFMx\no3Pw\r\n=pW8D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXoGUelBtmYXf/4KfjL7r2cxzyoKNPvmjZAVGcidba2wIgd/XvvS89knJCA4eFmZwH/+PdZ/yoHPF/aDNHgBp2Bwk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.0.2584_1538495874766_0.7021666857524824"},"_hasShrinkwrap":false},"6.1.2585":{"name":"meetup-web-components","version":"6.1.2585","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"028e47ede30c190109354ea330919942bbfd3722","_id":"meetup-web-components@6.1.2585","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dcUBVAzjSQhaxGrWXqfd44b8cH9jNMJ0kPNOzBAlJLJajySTNvKU8woiQz2COmeQXBUew8cFOlLQJaDDnQVOVw==","shasum":"975d994753e42b89a96aeaf40c12674f2da3cda0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2585.tgz","fileCount":610,"unpackedSize":7834841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtMkeCRA9TVsSAnZWagAAP+4P+QFkda/+XEvRYdCBwT9/\nPnw+100HmZoPtB3pmw0pIHaraJOt/QucLNvv7rfOWlPvraC7Nw6hSLCklUm8\nDAX1LacMBpjXHocQ7ZfiKPbUKKBq5uSM+xk0XLYLUOzm72NJn0NmTucd70RN\nEGOE2DbZN2l4gfx1T9sBISspn1VSHXPmwDHWw5rSCxOJXVlWVk2BtONcpLgD\nKvftK5nMjNC/30AV4QFrDXC96jXMla0QGQxfx3LITgFLPuYBcgV67LPQmPPa\n5p36DiRFJto2WYCuDmqoMMUt1AF25TR6Yosp66fQPd2GgaRtoqTPRHC2D3Oh\nh5SfTLsGczUOeIqDlVqmRJA7xzEPH3EuBR6n3aF/a81OnG4bvoitazc7JxmO\nGhkgn1PJSJlGd4QGgDwEKWtPzUahUhxH6wwDkv5nSv/mgXh0AQ9EtT6Z1Z/n\noLWT2Xy8VOEp7u9yRdVf2nLLlRFpy7bAd+OGzZZOhDBkI8ULOjkCKu1EWbLE\nXNPIhyBQ/k8ySbS5Ob7X/oKb7ZZuE3WKuYucOOyuAepW6aNTn5fAhvZMQQLz\n0im7+9pFrM3TG4HZi7OuzWxNxKRVFsHx1tcg3EZpiVW/EOcsXrurSR30N0WG\nOdrCsLd0iym2fBdb9bvXUKkF2W8bo7+qDw5rxcmJXtqBGre1jYCVx9ngWpDW\nU/qY\r\n=JbX8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG0Rus0RUReEOHnqTKSjpvUNxs5aB8FnVbbI7h9NK5z0AiEAhd+mxyZpY31L/S/pqpVOgQ4EAo9DAJCkJUA2netumMI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2585_1538574620903_0.13075958359083173"},"_hasShrinkwrap":false},"6.1.2586-beta":{"name":"meetup-web-components","version":"6.1.2586-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6372e2619406b2a7bace218ad3e9b842d4253ad4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2586-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-BHK/3Vn1LSLT54lo+wj5YgbvL3UbbDlYlSLCe8VWiNPseHpu9A1VabQUJWMIKPxUFK1RheIA7kdsFeONZWTqYQ==","shasum":"5c35899624021dc60bc30431157e565976bf89bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2586-beta.tgz","fileCount":610,"unpackedSize":7834951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtNZfCRA9TVsSAnZWagAAnogQAIjDhfIUBf9trqpFR1eN\nqXdesH4JNDtag+rctcmr4ZmnlTkXbOhYqMgiociSzT8ePOOE76qHXHn7Z5TT\nCRIw4F6fpfAIDK4UivksDTnE2D10eQPaiZxut4+b9xuDJTUmjQ+F4bxVLWPw\nRfX9+pIZTpyKj/EyCwECU1wZq6J6Woht6Ke1iacDVC12xoJ6ybkSeDkwq+qs\ncoOAHdZlvxA+7SsAM6E6ZfMn9X9IMw6CEoUIATWfWEZL80V8R0k4oRYGJaNE\nLnaLgwVF7COg4BOKLO9C8ifgoIqYZJyR0Ks8z+hfCIY88PMd/m+9UOknQ9YQ\nMNtMpTRY1AXFi/tsIS39PELkawFz8EVRigswWjOOLy8gueUX6F4bYn9t01t/\n7s2SJVa8da/lZ001NdF3kJUWTuQlegrKna3qnrpvQLph8vPsTX4hhGd6Jys/\nYA1bGBH5lMKHdwBEEDHSIMIGTX0oHAvjXNW6w/SxNMVEAmscZoVxfUvVkOr6\nZD9mh2kWq4LUR2m3thg/rtqn0Toj/iv1q9K0KlL7NFrzXqbxfitCWsNXC2XG\nKAB3kCmIBPKtEDfVBNbHrrvO6Ku0wDgYv6U8xlyIOzTyojkg/HA6SMfLA2k9\n1fQ+JjV4JzhKPFZpykGIePq9/NXBrPhR3sjvueLOeB44MiBfUElKKdowRKDe\nxAIS\r\n=BHLq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuiSvegh1EEOZ+6VJPrtkAzL1yS8o/mg0HH4oxR7o/1wIgcVAnHdbUa5RnCq4t8sGofN3yQRTKiC1SArtUDuaZo9k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2586-beta_1538578014805_0.03354221377677069"},"_hasShrinkwrap":false},"6.1.2587-beta":{"name":"meetup-web-components","version":"6.1.2587-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3f8d6e1b1be7ce3d40c824b7f4f021ed3e743f8e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2587-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-krA4eAi6qwfulzQmriPA9QxEZOrC1VxmkvgERo6bI3tkFt/4/QBI7ZXAuq/VQJayWNdTZ6V0hhs9d1i6YmWjqQ==","shasum":"c8072142169606a7ecb495d1479172c643350d8b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2587-beta.tgz","fileCount":610,"unpackedSize":7834689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtkIgCRA9TVsSAnZWagAAHc4QAIGTjPLZS7Xn/v61KQrc\nI9ZE6iX94tFUecfvD2MgHSVH4yGpTQpMeyORI9w7h6euBmS6wcrMWiiRgWo+\ngOTwGtk9f8jghqYkvdLuDzJVtHk1pCM9p4rPA3zl370MdUfWN58bxFSLlWV7\nyNruqpip3t+sTbjMQmEG3iuJIygRpjREZd6CCCRZQyXe8XmtnsR5hPzUyUya\nbfjx5gNtxTj4sDCQ67/Dxjz/azSEoTmd/P/ZTSGr7r2P2fQYpoM2bu3mQ1v6\nX0wy1B5cAc3tO3S9tl+khcp+5E/hEkY/Ek+GTJpo68lL4c0lxjgFKNeWi4ta\n50q0ENmMB54/k6zb0+ARSiQYHaoB1TTKnQM0TPVD1B/LddY/MJBES9sMmFYF\n57VYvufaa+GWT/tPpEfCP85dCx9cJUtbVuoc2cJHvLsVHKSgTSJc+mP1Bin9\no9ZVK1LpfE2/h2vXk3pFMYKlFsCO6nhUz9AtcqQOCH4uZ/c235C3ahn+fu8Z\nz+XA1ylEoXnw2rGmWldtyp0N76MZukKo29RZ00hA+gSpRqVFGyYB0/M6glFI\neH4VQc70ch8LQZitZ/yXw+Dl3Y40RzM58LdsQwSEAyJWUOavkaw0FH0v1t1L\nr87Xorg5/JZg9jeykKXlHZ2fP7IQbb+e+mjnZLBDWTxJYmvKQoi8BzpwmVX8\nwS6k\r\n=uEqX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVCzP7bO/yys1wfzhsJFjnr9XjbM0KM5ZImommxLVh2QIgeCXuOB64ri2rkbF/EsCfSADDsUMOxxw4L/BTocdzas0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2587-beta_1538671135463_0.5769071122823088"},"_hasShrinkwrap":false},"6.1.2588-beta":{"name":"meetup-web-components","version":"6.1.2588-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6812db7663364aa8e5a2ed01dd02e71d56377394","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2588-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sOzl/OcL2wSCqZuEMwFGY8YEXrD9S+S+SZG3BcA1w/ehrRTY48IyAcnFH0XKX7mODZ/lXOXxCXR+cYreAWMHCg==","shasum":"8c3f28839a45bc9b563b0cfc432a13d1de963dc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2588-beta.tgz","fileCount":610,"unpackedSize":7834782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtogiCRA9TVsSAnZWagAAEE8P/31zvYB7HhvgSoi7XP53\neg1+mYsnREx9l2IRSR9IsyxyCj3sMv3qLrHZ0mdTP2FRMyBTnLu/aaN/G6Lh\nGEXmqEhct76N6VPoTR1sqPHvgswQ9CIDnbWruW8bKB/CcN6Yb//aDneg2f4X\nrETeQFF9v/sbqRKjfcclOp+rLcVZjc8shJWx1Tbe5m6LT1cFFCJAngbs47ZI\nc5wGPWDuWSjuUrjVqU6BP1hEkdxuVIAog41H58ykhNqOKD0ZaUamef6WIEhq\nlNspdcUwGehcePfYzuTnQZB4kD4K4tHKJ3u8OhzJth05WgRIf4u0XYBElF+c\n5Hq1jtCKbBBbrkwUj0MnhhnLSxwMyaIi6WGMeWZWcpRSwqHWbJhH2P0roEwU\nEO0mK19w/d4/tAHtLHL3Lr9VmuyPRsKVz5sq3KZRx1yxJP9Rx4bL0Hgki8n9\n5sLSIJnFTJdk9LSaHv8Xu2Pi8wSOZpbo4UrefYmHvB0r5j9l34ouneNviIPn\nNcc7Q5NXgbuvfnJxS8DLrH+vRFhaNRvCkWAowyTypYFI6z477Eboti3csy04\nAQH+QL3n5my1XtbxFxOCKOQ6G/Zs6q0fbXiaVpf0mPJFVDBegID9hqllIDQW\nDsdWDSVIX21bZcDvNw0BgHcpVGTgTghhk5RB/Yy+gA/sbIxAT+JdXyzpBmeu\nua1b\r\n=9IIJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGk6+9zj1eUiW5vQS8Wko8xQaSKx/ncsROGO1j1ExmdgAiB5E018BA19axa83epP+bLD1MmFqYopXmfZR3RPY69LOA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2588-beta_1538689057206_0.4480753811625722"},"_hasShrinkwrap":false},"6.1.2589-beta":{"name":"meetup-web-components","version":"6.1.2589-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"eecd88a688427fca68f36b402750c4ac42effb32","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2589-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-F7CkhTjGsvNLQiXi9glcR7/v5A/eyVH19z8Qz/L27aANmJNg2+KMT14K/fyQ8Fma6rAQjuYMIpohhCDG3kYoCw==","shasum":"b297ea0bd6d55a732972c65a1c6c931240e51184","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2589-beta.tgz","fileCount":610,"unpackedSize":7834943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtqouCRA9TVsSAnZWagAA41EQAI3HvIhWvbeOluMTYum1\naXJLoJM27zEQMmiYP9qm/rtBT/LSTwt95mEhLaW/gHyUOqBH23Ql3q/N0/Zz\nto+CBRmtEGGROWC003bbDxcgCC3fMH8cnvzzWjQ8fLAj4H4EGyok+YBllSH9\nOtlQ3abfLayWkT4suLjdh5b7lul/chFgLJkNzUnlirNqJzNj8nUBh+TjkXQj\nxK3YNiMICWrGItZKuMrfDSkoFxIlPQy1JSOvrReuaGgqMYnOPSWjxB3kTLUS\nVvIIGy6TQjGPrKPSIrDm7XUf/FHSgMrx5naHGXCHgmbE74XGFJ3CpkzSCV+q\nKVY2C8lTM7beo037ElH17D9WG8EHyEsH4LbHY+29nCJhNLhL/gTaTyC4P77j\nXkK3SFA0wXcO2AQ49S4ocuWHXyfhYVDrFxdmarG3L1U/lHB4uaaep3aG7bNK\n6YIYljBaxX3jMX8lQbS6qmNYK9/1GM/CXwmhIBqkFBpkGpFXeWQG/F6pgWhQ\nuPuJPIDeLnArv4IYf2z91FixfXhlN0dOc/97S7YDF4dXWk6nny6hIwpG/S29\ndryRCzjThYS+830Wo443XwN0TFlUA/2okuHwRGVZgVYEFkMbfIWSkvkf/9Vt\nmoA74+CQpLqndLVXdxspJ5E3/Sv9b4zSlbxmzm6obIO49bSWi7PxV9iDZDdL\nJgX/\r\n=dXqS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsE1txmZ26hXLGfzIutz4y+1RWVWdXdBfxAWNLdJmrRQIhAPUtfAcfPjlPojrpXWWXOQ1fOxrI2zgyFTCSs7sRckdI"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2589-beta_1538697773302_0.9683553254624226"},"_hasShrinkwrap":false},"6.1.2590-beta":{"name":"meetup-web-components","version":"6.1.2590-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.417","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ab204724de6fe6412802688bcb6250a747cdf4aa","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2590-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZnhEZbrcn8dNfXaGsM46WrskAvFSzGSGWRNU7JPAo3Pn6yC6smCRcfMbG3FedyZm+6Yp3F8I78d6CcXw5icnew==","shasum":"0db7ff736ac102be2aa1c90122736e7c5dd404dd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2590-beta.tgz","fileCount":610,"unpackedSize":7834849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt4E+CRA9TVsSAnZWagAAj78QAKSV20mSri1TGscfogtj\nuSTR6k5WBuq2ojzdpXLfZ+CzI/91ABSfdfoIUAAY6S3EwNptXsAVUJRSBrd7\nXseoMeHHGFCEthbqEx1nlMiRfxvhp8oLTL2qZO/T3E8UC9YNUg9Qw72C66gn\ntBnbjMSZHN1SeEzjPnpqY8GXTkHnCGoZr8kNUGh5fLEVVpy18GMLyTARXL2g\ngVa0CL5vK6b4qrEoBEoaIf3MPVq2/Jz3NxR0899MhLQVlkR9gx+KQpW/QaVo\nPQAoz2Pk9RFmZNukcZ8iDXzlST6LJ7V0582NgUEBFtspFBD2U0ib6gOjxN74\nHeG0nWZun08/ZyknubRaktAp5LTg8xotci0QjFb/z6dIodRjaD+dPMY7xHm3\nhu7rbA3gPT2C7LvafkJTsB7JjT1czL5bqXNLoAlFi2CdCvE/Sm6l7m3FcneQ\nuNe3BgJbfCrCD1fg9Xix6/4nOsePyauVh1JKAVfU4qaPvo2ayegXsLEPrBUC\nOggprdFKHc34w4r897g9pRu1lT8G9bq+KBYc9v1jAl+vtkuGFuu3AmbazGXO\ns6LkkTnLmilwMcdlXfin7Te231hWhdLR6j3fhwwq31b0G6qEZ5vZbtAtjSet\nUL1OjvfoXYJE4ijbr1xkqGQkQMpObnlYNR6kXmcd9pAX8GbHW4lL2IwBvSpH\n+lOo\r\n=N13f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2x/rE3t25L2ehLmLVt5oOJAZNMsjJA49VnsNYVI0PrgIgCGTCQM3H4PgJOS0/809m/eZZvEXHFOcPXO+MNk+9eoc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2590-beta_1538752829038_0.6423276869372991"},"_hasShrinkwrap":false},"6.1.2591-beta":{"name":"meetup-web-components","version":"6.1.2591-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"feef5bf0c1fbed7ca5c4de1ac831df14a886602c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2591-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dZAFGn3DzehzTcy9F3YcVQaBV9HpR5zaeKKsB5BKDCpRPFLGPnJxUVsJh6Ii+qPgEiNuRAqSLO8TTWw0zcELQQ==","shasum":"f2e371f12af755075656d9602de2a0a6e9cb5e52","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2591-beta.tgz","fileCount":610,"unpackedSize":7834960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt9+nCRA9TVsSAnZWagAANMoP/itKZpm9vSedfpu+Bd1f\nrx8mVOnr2mimr13PcF9KGZ5qP5KWxENDS8/gpV21BNxw/zcVciAcZntSa/HH\nLj87js+rTM4CoLTqU+zq6tHh31EtOsn0DtDawVel8yqvhGRHLF5Qte10zWz7\nRTzQQksPkzJQLZsbcMAdEbyHxu1OJoMEBR+3jbHJ8GQef+i+qpCC3DG0lvad\n2RkHT4shi3w3QyPtBREVZYANyBSwvJ21tkUjievWzbXOzvjLiEdQVOIl63TN\n8anY2j6qTg3Wz8j9LnI42G3A6THrC0OY7YH0tauDJMQrv+M4frin9q2RDfLp\naRrzk2HxtYNboM0E4pitq302GjUSjVcBIdCFiYH65/uD+WuRz6oA8623RVfw\n3AxE3oxSnim2VbhCrj3be6+Ke8LilDy0NxCExCeUJKVPDcZAxs9rooOJgEOy\n3tY6bfWMdtY+4K+wWjtvosLuuqbOoIpkkMhQYkZcmWpMBhECzl+PlfhWeyd+\nWMOlxTE6WTQPKE4azNgaMkFOq2ryDcG1fzKj0vtUJL6UuI7mbhpWp+w/HsT5\nj5tsgIAPo7fFIXxp9BpqBbGtJobKjkk+K+kpGJbaaNgCIA76in4mh+6KWmnR\nFl3lZ0DdIF/eaCZeqIH224oebtFjFvapGDeM21WGfdq7WRF1YkUGHKnogPkB\ntY03\r\n=CXJh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNXlAZ5c2KI9Cj2xWCCgO0YFMqAWeQTdDjmaT0HMDBRgIgZuJtYokhHSQdFd9+3pyjD68u6DVRp0rhYSt3brK2euI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2591-beta_1538776998096_0.8269318449395162"},"_hasShrinkwrap":false},"6.1.2593":{"name":"meetup-web-components","version":"6.1.2593","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f32405ae059bf9ca0a4d38c5acaac09ba7cd51aa","_id":"meetup-web-components@6.1.2593","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sa7GEhhWECSniG0ES94TS6VE5W66IWTJiA7rCfdMP5U7YIV+uJahUPdP+dsfMZmEiIVSFuVLkFeFb7viLEsRag==","shasum":"2bba677c7b32844df417b05bc5863f287f20f369","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2593.tgz","fileCount":610,"unpackedSize":7834955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu4o5CRA9TVsSAnZWagAAEo4P/ifCZIadsXbjcMzE1vC6\njjI0T6kYeOUS8W5iQejAe5FlV7URsKA0L4UUJpkIiTt+aviTR9niaHvK8Y5a\nUki8WpO4gbQWVwRL4c5tbKmlil4zxi7aek0e7UKsiLdKiJg2179ZGWv7cLoS\nk/8dy6H0LRDQDQ4px1hAgyQH7DL0E26EqxXF+iSUjPGX73Yh6co0c6+wAUiF\nVWc+1WXGnZOeoxbAArAFxEv+GG4TrGLidAV8BlAZIF9AT+zWv5lg9Pii0a21\niAvo1iA0YgE/erZZO1mIhjsQWOAmEVltwSj2BMfGTOqUZ+bW8FkuJV4/bqQ/\n4ieD4G4QsFLtnADEjSN53Tp2xZN7+4jIHF1PQVFwU1c+fBlXL0NifZBxekiJ\ngxoAy4dSag1ViPFCj6N6sSMqj6wI5ZbASZ51qhbV5MK/i9ldIdJNRjlbjGkT\ntiVKUvXYFpjohbXW83G0Uk+AcPsY6sthSZ/cRD4P3S8hRAx7gaJhDcY4p1Os\nNPsgE4n7CCUBZ9A+Obwk/ELpoo5kJ2Z/riJtXlQOPowIj5yG5a41XJz36bGv\niL/pwo8y8oBhUs5exeIZsQ7ViHnQB59jK8qejLkgkh4+UHgGziZ9IFQMd1mk\nb2PHAlBYr/RS5XanYqKjJGeGT+s6+5bdrCKltrjcp+6+CJZe+a/vLfcM+jVr\najVo\r\n=80WH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzPRa0gLu7V0np38ZYHIrg8/uOh0PLzdlLUQdn+Z4YtQIhAOIWI2+IBOyL+O9VJcj3+i0REXw9Ver/OM6SH/Czz0BK"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2593_1539017272951_0.20993723592211633"},"_hasShrinkwrap":false},"6.1.2595-beta":{"name":"meetup-web-components","version":"6.1.2595-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8e08778ab57e39fd94dd934ee3e0b880909bd213","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2595-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0c5BiQpfHE+aymkblploBJwGySPjkQjV15eS4IILBsRMw3HsjZk2N9I2jktV/FVHnXoHp80dZyFLjoqiEATWXQ==","shasum":"5cddbabf42e9bf35d450504c24512bd4f6dd7192","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2595-beta.tgz","fileCount":610,"unpackedSize":7832244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu6JXCRA9TVsSAnZWagAAdbUQAIDtHmYSWsFMCpyyGetZ\nPQfY/TaxbhnJf8Oc1NeZyq937+OyIXj+fDJgeO/GWyWWShsQ8xkeLVANUE9Q\nVYcnvQ+W4cfNyhKOBiY1mUQySh537dSM8nuHSqn6mfnNMw6Cg9/fNSJb2+2m\nvhF8iYRmjSzP4hXArWKOpINap0I6j73e/1plTR5PLSy0qyRV9hIG6zAsjnYE\n9zBB4xmfrS3uvbBuO3gD0gcBvf5zWrX33+v+WLTLFzGg1lhYJsfPPp2gqsQN\nPSsIpy2ZnyEQ5w6UXD3RbYjt4JMSRuuADOCAsZ0L+F8/XC5dxWOwH3WgxkM4\nU2sff16VSSQif+RAPFIVXvMaZD6A3ey5h5cFRsEH00kKUHjbdA4MryoxaI+e\nE0x+PPQ6PmRqUECv4VWKyjXZ5LZlXWErdS1Gx3CIuYxqtXW/Y0tVm7W/xZb4\nAb/Dng5FI4SmEAG0fYQBgwk+HQgJVFjHywcbeDUdk3ipRWTD44gXOPYmYank\nWkIane0LRcJQLx2Ua8esezNtE6lSKOz3EDSUsjy4gZ+7OFCjSvoi+8+3OOxn\nVbb1+kllZ0d4c3bAkG3oBaJEPKCaHm0ibTihVALnoch5KCg0MLAA7xBiM5Lx\nohxpYKJhV9DiPWdUb78pgbvYJ2GQqNeqqncvAhzoCaj4Evd3J/cJa2cj1edP\nRnrM\r\n=IxiN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDydlUMl3ix07srEfrg7oFMIWClETChSeXdWvCfkVxhTgIgen7nQ71PhWD/2u026bmGUJtSamOc5+XiqrnKRbmQ4Ds="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2595-beta_1539023446238_0.5744264113835538"},"_hasShrinkwrap":false},"6.1.2597":{"name":"meetup-web-components","version":"6.1.2597","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7bd5d6e352c2d2a02d690db14dcca8b095cceb74","_id":"meetup-web-components@6.1.2597","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-M10R8zhScKZtUMXwxXg5sg2xb+BJ3jrH9hGSK3S4OOeSTh5NcGXTTpYgaPBT5ajUnY96wYDqkcf/d3wOzSLtDg==","shasum":"66a963e97352b1e196fcd90781e7b32cf2e7a904","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2597.tgz","fileCount":610,"unpackedSize":7835063,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu6fBCRA9TVsSAnZWagAAjVEP/34Zmhe25WbR5C8Dt70G\nAXXe6SqJ1tVth7fzTrK7a+SNTV8hp44dLBnLDBlQqL6rVWkY29wR+i5coBo/\nXYFV2fbysC9n7KVhD02320iB+Ujr+RIMDxiloBl9QhtXNK3Mni2cn/v+emcK\n/UoW5BzfOHI+UnYKD0DHc3M1rGm9WngyRtoBJ+dETusjP/xsntSCiEAfFmT0\nAOBEb0m4X6LEgbJdlGdV6Afy/7T/SmCKC4DvwZPkXg/9XErRLaoQiccUefm9\n3iE7MTUWkdFGY6wXq728rNJwucSqumIGZ9XXClMRD5UCXfItodxgMNvITOQP\nMcLhmtqjSgSTpzkvoqO/xbEXDHv50EKweA7//j6lEKmdnEiGQqRLyzag5c8c\nZ0RAMkSnOvsBhJee/UDcCARbyrBTop9efzzbQ0Dq5XlePl5GYtAjOF40a2Ux\nvpYzDKR9jUA9qqJIgjGiYaCRucn90aUkMCMohSY1/lT758ztFKFvB05N/tFj\nL7Q3FG/3hF8alF52bNskxVHXnA0jeOZovoK1sOXPuwhnQY3D/YDfqb+IDUXC\nRGV/x0Cb2oxw5xt72TmLCnvMOaZwyjHa0Y/HleDuQtGaKSS4omfUxRa64xlm\nrb2q+6QYw4P9AkeqVXlohK6/tYkAsjxMgh5bbim18Hsla9LeYyH0WJGwKWhA\nCpaq\r\n=7rGJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAzP8LCOtgGrvalR6qAM6W6/MoyUypMNYgnoXIGG2qhQIhAPMSXEyskCi/Lg1XOVHmECEakwszPOcDgsP665GpdS7n"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2597_1539024833117_0.37683645507792907"},"_hasShrinkwrap":false},"6.1.2596":{"name":"meetup-web-components","version":"6.1.2596","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint . --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f9f1769824bb4eaff0fefe7423c8462b112c4136","_id":"meetup-web-components@6.1.2596","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-durYxWxDSdzXUTuXSP+r6U9a9+NSDlIiYYZlZHHHU5PsN7lWz8vNdMMbsUALxWczMC4snv4WbM4n51XEDnoJjw==","shasum":"278b91b70f0e282a935765cbfee7d713c5ddf0e7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2596.tgz","fileCount":610,"unpackedSize":7835060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu6fQCRA9TVsSAnZWagAACmMQAIHABNaYJOvkgEGlc653\njZfgIzgyw8k8PnElCctnYiu1zivU1ez+M0cQsV6Opglq1SMT7xEMDZFG00yh\n/kGbxb7oY03iUjmDtjCQwtTdVgQUiSMGoW+QpJIQVpBlnkV3TthRqm9U/n6N\nr/u0sLxACKqeZXcWm+l165QmHk2K6Uh4m4bPTJpUtImSHYmY056why0sxBEZ\nsYQk5iBgMgeozx8hIrR6yq4RRBBbYcFYp6X/m8ViPmEDbyOHGxnEZzDSASAQ\nnYypDB3jiVzVcH9/Iz2OC88riFJ0K8YbsdVH/6YUWvt6YRZ6OJS45nekVX2r\nArDdIu3egOXA5DOvOGizBWecL4AIiInolm8u5BhKKISTlkxGQapl/UishAR3\nqzS3M3Mx3RU1je/hTCCfqpMxOtv4RshEcPnaq4/KRL3NoKgWGkL7mNeNbarD\neKW2QLDxE1XdwAl4SM9xUA2VFpvXXj75rZghHMJ1YBEvleuK1DzOVhZIL6gJ\nRATNPDHhk1NxmIqd/7PEXgcShM3RZb+20vSexhSbWBOhcT8riJUoLYzOpGQC\neaR3lP3h1X07xAg5fJdBKm6g1dQjjVxUnO8c+YIyyIXrbN+py6EIoUUssEny\njwsesS4Bn44NK8J3AcheBxq7XwAc/sKniuvJmWEZPuhkR0XxvyaAYnnAjU0y\nwYCt\r\n=VckV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6Da80gq7FnqHNrqGWzXIYua/tIJS0Mq1JdbawKch+WAiEA6SeqqZxIEZKIaFNfU7UoQtKHb7BXU/Ofj8Hbig7DTks="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2596_1539024847718_0.9235980935664547"},"_hasShrinkwrap":false},"6.1.2598":{"name":"meetup-web-components","version":"6.1.2598","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3e8590492fd27c4353266799799a3fd8cd7dc04f","_id":"meetup-web-components@6.1.2598","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RWBNHE1jVqDSeCEwLm+K6qZxRsjT5Bhouv4bhWSWN8wB8/EHAu8W5+fL/rNkwB18G1cguhFoYHnpS/aNfJTbnw==","shasum":"2f190590f586ab5d37b04ccb46213249d54b2f95","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2598.tgz","fileCount":610,"unpackedSize":7835160,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu6fvCRA9TVsSAnZWagAAJckP/i4SHKr5n+MdQT6o2FQd\nHADTYnOtsNI8bM4dDnJRtNjdeL5IiJcW2truqGoqxNMsFlkC4qqIiW/Mabea\nQvATzCJUAEevFc1vYvxrJK1QOUcBOpx+UJj1VjfkZcqRyl70mlrEyvZ92KFz\nAOMLEzqCm4wSKhkI899XILv6CnMEdtquwKo6PtMI70NHCbORgr/UjcBQy9u0\nDE9m+A1ezUuF5Ev7n2weH+FZsCZMz6mj0UNMJGLrWwr36eRCwo7CMp3k8i2N\nBIhpkb2MKsXopv7BUEY9nCOL7KINhQTiWuiEsWr/Ndf74rBISmuXpdlnUTXj\nMJUBfrvoxhUy3npFMnqnuwExV0aDWSwQWy6yQZwyONbpcnsAcTtwLUZf8sD2\nRCW30vRpS0ttK+c27UGi8SKkiOjq/AyFFhlY3tB1oKZUPBUvHlUNqOFu8u3A\n+YBBOkVaPfPOhF8VX9q3AitUl6k6GnQNWZ28+v7B+aM3hY5izPQARMH8btcC\nCtxBBLdLhkVgJnOqw/tphnaUrSgnEI9Sywf2WUxjhO/AgCWrW4yKrGR5/wxE\nyyHdrNkox+t2NPCXeUIH7kkLzw0EB17oiEbDrYsZPAPIbX0CN8QGsc8zqrlT\n6uPmDNXIOGb0+LQrgcy+Eg+1LMleDEu2Yk4FKsKUKfvvYZ/T+osjRnKHb9qe\nQo/4\r\n=G8hS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLNBIQdRFjo1IQ3u1GAOwe5AkI9rLTibaoBD9nvZec1wIgKfdQbq9nQtwVeOeOp1iOyRZ3am5V/+pVF6sxzcInvdw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2598_1539024878707_0.18048556332350207"},"_hasShrinkwrap":false},"6.1.2599":{"name":"meetup-web-components","version":"6.1.2599","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b0afc7b215475bd6ef6003db7009259a12204ab8","_id":"meetup-web-components@6.1.2599","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bDHhc69d7nW7B7eeRGybJltizUK3yQa1o8ptpK48pFkDEn9BQ5EupgaTNG1u4FMCz2ZoW925MMqIpiqksOuwFA==","shasum":"ff9b0fb4892c582ad5ee25b8c29088d46b0a294e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2599.tgz","fileCount":610,"unpackedSize":7832444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu7lLCRA9TVsSAnZWagAAKi0P/iSRDvnsF9sjybqGjNfw\nbpNKN8fLBgEU/Zn5mgDz9ulV04A5wBrPb2RGHEPY2Bn3FB2V0rOjwHSKw5ls\nwsVqN/fiFznIm5oe28PZbZzQTu2/GCIhWLT5wpsw/Ee1xnLazcrW4xJwQ4to\negI/nmtx6NnYZcCrmx/bZjtksWrMQsx7VQwD24o4ZoraYILnmAMNccSKwT6o\nCBmDtsSRAq8BlTcxx7LkOmmau0a3J/55RvaUmwBWCGHcPUFQ388Ybya11mmI\nF9TuWZb+visvjfwfXBzqEkZ014IIEnqgnAuoaAJh4kMLMzvdUx/yqsFi3Ao+\nIy1+2hy+evRVVXGp3d1be72JpKQV/z9DyCAmUABDPYbFmyC55xagzUUtVsYp\nNRJAHADeH/QjSBv9xOzr5xRWDq9aJLaiw7UYB/tqztqlYujJ85Z99hb9Gikv\nY9Yqc1ZxGp//0wOAXlFncXFMTy41Nn/e+F2tVwb9pZAC94EQJR6kG/ijSSxI\nDQlBP4rgXmU+8uJ66gUCtBpRUux9zHMj4RQ/B1PO3er4eA+1d4f3cDOIxx34\ndGKYMGmMhvSGV213NrBXHRD9/Xfq+SagWDnSfRGIiHYvVV34HFvFmdQMWpqJ\nSotCO0MHHmoUqivOmCBjaH8Y3UNnDzTpfYkatPtC/IxE/ONR4728f4SRP3L3\nIH2w\r\n=kwEY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvE7m+UjEETfP3MBaE8OzexghQQrxPhMxtVPSw1ZQdsgIhAKCF46+Z8NeRw1vxxBRF5xDEuZ/xZ6UgV34hAjhsgnq3"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2599_1539029322813_0.8557768459246109"},"_hasShrinkwrap":false},"6.1.2600-beta":{"name":"meetup-web-components","version":"6.1.2600-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bd49bdceaad2807622772d13d597442fcade7ea0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2600-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cPj/Uhk1ax6ARlf1UL94OezgIUB8plmOL4NED19Fox5TvpvcsX2LQLNJIAiTEjRYLxAQ1/GxY4TuLC6E2rclWw==","shasum":"537e9d3970676003c1cc53dd1e28e6459b00f97a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2600-beta.tgz","fileCount":611,"unpackedSize":7834785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvQbDCRA9TVsSAnZWagAADr4QAJM7Lzj7lAJdKD0vz0qu\ntrrP3y41sxemqBvGzYx4uy3DHoFUKfkOgyzSNKsPzNCVeN4KeerOM0kmhzJo\n17EKaBoGFOmC6zLJwk9agZqOmbb1798KY7w81gprP9xZwIAi1fosToD3I+Ge\nJbRNS39YyUPv/dESMUwlx0DWOEMHSl9lOKG0dofOnrOqkYUBubIWKTBMrdBg\n12L0WJj3y8mk5e/mO4Om0tD6KEF86gzkxqgwy9A9xhuJjA6U2GlGXdGkfibg\nWmesHYruGgcnZooHxX1KRa2FyzXpxSr38XMfpdbNfTdFDmn7hvTngF0cCbh+\n1ULJ+pGFVHvzhcY1zo2g9muyFG1rdk5Dh9h71HomXZQ8rRzRSxora1gmLNGP\ncSz459JPCV/PqoRVskzPA1g1LErzc4yNvtMVsN7O2dk/21EI71OzhQZBGJWz\nKwGR8j6r3sJk/FNO4FXwkvzJJ6jXHB8BFI4tQ0/Lb27QXfpdGJtG3GuOBzoZ\nLkPr3d051rOG8eLj01jb7/cAojH8wvnh1eCN4tMSc0iBWYeT6StiJTpy0hgt\npTBTYIoG9V6AHij56/zQrPoK8ZApRLAHnklPb26awQcdbc3KOvNvGrVhmdHF\n1fBTH4rBe6EgK8fgkGOD38IV/EhI4iz9s5UPn3BST2TzmAL+Ti9tlB2sOuZe\n4cgr\r\n=a3/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChD9LdG+nM/BozfTc9XxSlfpUo6MxCzJrUHcB5I66bzAIhAPAYgroZY/5XZViSjkSArFK39vsP6Q5+E34hnCEM/rE8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2600-beta_1539114690462_0.20198260401789603"},"_hasShrinkwrap":false},"6.1.2601":{"name":"meetup-web-components","version":"6.1.2601","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"72a8c2e20b9f6f37965dcc2a613726c19a1a9f5b","_id":"meetup-web-components@6.1.2601","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rhcy07tmxMhIzrlY1ErfKKigY9kz3JBHTO8wfytaTiLwHpWsjEiZGnIuM0vclttvWr+ZlVgdpXe45OnCYz0NOQ==","shasum":"71e7fbb614463b35ad8ab313a738d4b1ed4dff1f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2601.tgz","fileCount":610,"unpackedSize":7830031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvUT7CRA9TVsSAnZWagAAU0UP/jTcGDiERJaAsdxw81gg\nw2nQd6E/j/H6A9L+V1qMsPOm/vQjk0BP1Uz474RwEf6JPSEl87cM7zoeiJDK\nwLkgtGlGRlOXGm7GFiMphe8HdJHJBo5eV3AgCvjUe9p8BJ1qhVLnD/0NgiNI\n/CoDTOXcrpUZNX9casNN57snlOBih2a8VqGOesCuB24qh9pEXzv4hpjbLYuy\nDL+VxwaHUPjznBC8bswZrTJjUkiofZ1oV54VOgF4IElJZkC9GigFuL2b+FYh\nnW7OeRfQ6Dq+1XBxknwpoDsZCmaVWyyLF6aWum/3eqAeoI/iObUdWAc8mJMd\nIzk6k0EvNXl3eS6Achnl7uiednfYFh133Qfj4yJYjRhQ93PYx4Yb/5G09QWB\nn1hkULQaNv08PgtJRcV4/ZIOa4PJrWzQUaHyIN+H/xBtAoQDq64pxaCwtpUn\nBlg9H5fPQ4z1h74VRFCwrEl2X1DhvImQxJXL5iX+prMN73GqcRQjpIbxisYJ\nhhBjcuh/cArYN+5+HKKZfBpkLKksXlu1r5J4nJXU64iIWnOVsc/zxc6J5fwV\n+I2b/ocnT7j9CGNkqltE/UpoWKhv5TLKLrxT/m3mQ9o5+DyAdHVzjt3JjfnV\nLLEX5IuaROF+0JrjRSlqC7yKauE8AQ/4bfWqaRNWtRmI2FXQpZ5TQzMyDSET\nkdos\r\n=ReF8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyVeAd2VoKtMhskS1LSrGwlsp7FIEr8xTZuAPUhMm4bQIgax7bcbHs0Em3uvoxGDMidf0/FtWkGlilXQ+ImEXRPHw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2601_1539130618733_0.5120117549814325"},"_hasShrinkwrap":false},"6.1.2602":{"name":"meetup-web-components","version":"6.1.2602","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"50ba98f5c1da56cd6978e237e4a373186d1861a9","_id":"meetup-web-components@6.1.2602","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IgvfK1ooMQ5RY4ZFcxtRw39Hvcm0P5FLFR9lUiMTf7NyaZyN3lzDKMFhtS/l5wtgcLMyBPJcmPBSLAavUwJXnQ==","shasum":"1abe815db2432ffa0e61a30c34bec80a2bd43ce8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2602.tgz","fileCount":610,"unpackedSize":7829920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvUbDCRA9TVsSAnZWagAAS7UP/0GIAHLhHfJjfs42n3KA\nszRzXSSqz1a7fI0Vnh+XOkvvBmVEiJQ/KJNepHpIvx2id/JbgW6klWu6Lcz7\nRIa5mwJRxqxZpyTT02VVnTkPJZX76YNFqVZTRIXdSY5nCwmSi8DY1O5N3NVS\nlbXNv898Ffffg0gvNyDGQT/iNmt9ePUiOu9q0lNdT0iFjTLZXrBdqcj72Qfj\nf92CP/je8Zr6M+kVUjvugT6u5Ey97Hwb3XDbF1DJRXjWrEdzLePPfo+sCqxU\nbLy8cF6Wo/BxLED93kO7ZtJfH+Pyp87RcHWib8TWM0Azh43bxPKhUWEuXydi\n2V4D6WzDzvSUcWb4DdRlcNIXPAoZrARkaWkmI0DMZ4PHScUbm24zsz7F4I5N\nKa8CeYhN4KWLeA89O4W2f3+jD4onBhDTkJCqChAEXqSD21bqM7TUYPzaN962\n+LnIJcquaywfuNn/F6nJIaTNOTIMVK5IdVQXeK1SCkAmPwadxhLQ0yRKw0mG\njlE3d4yZ5VeDNQwIOXTUH+vfQcuq97I7tErBPHV2NEBNq7mHP4NmDbvFssWA\nO1yJH3JaZJ9JntxGyy3Lv3wh2yfLu2pE+vGRiK1Etx9SNXo7XHhe+hZzxJt1\nTJxFM1c9OzaPOBTBWD6ODvKwAqNqaNRENzytikH91BkMbUqpIbxCKMyVYaUZ\nwbhs\r\n=VWAa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZlSU0pRL5hPlOAJoWTvBoW3OK7Ndiz8RFm0jDU85hkwIgRmxsySdBDtI9+75+PVeNU1+AKqJVzfOnc1BuWCeS8W8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2602_1539131074333_0.9493782724968387"},"_hasShrinkwrap":false},"6.1.2603-beta":{"name":"meetup-web-components","version":"6.1.2603-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"17b6b38621db307570684ab4cb536a991f48f178","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2603-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-x0auT0M5kHncxrvqfe+x56vmJpBnA+2gtGZfUjBKMGYd3mHyfh8FTi1s4wmVDEq5TkMiZW7xkv++3fip6xCV6g==","shasum":"e9b009799cbad6dc3144c75a5aaa8816bfa8418c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2603-beta.tgz","fileCount":610,"unpackedSize":7831766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwL4SCRA9TVsSAnZWagAAgJEP/2OjaGIKjIFo+EJlq0T2\nDsmNGrYlzftqViRTunh8zJ1dFyR9YYNC5gPFwF1umBAEbpbLJIvjbJcA7m0d\nnV83Ha2sl6xC38G1Q1I9ztlpa6McFvzD5N/f34UHlnA8WuSTcLhhWkE8gbsE\nwGCkQmPbOKLI9M64HwU2/6Av6RheSqnyQFAquxIUxvy1wTPf8M5+4r+5Vb15\nFO6aP4P0H1al0lEf0Twa4eDtVfgOva/dVi/5ohe0JmjjjXiLi4bZBYijJVYJ\nD5TBRdmXlBUpJHjE7LuPBR8RezFlYl8ZwSC7bjkSpQLiPu+rNW0tfLdSQvkY\nVajuR11YyIDWMRy/t4Kt7DoUn/PckBlOW9fRs4TlJQBB3CWD2l6zgfJDkDg6\nkjPJUpyCrIoFOW7EL4Zt927UU2+yk/uFXisV/5PkB1fsq67ZOlaSe4xZkQKh\nLxieB5Z+CZhWYBhPFFdkiGwGVu84lbDib/fRmONsQnrnmiYf+Q84dln0Pm+1\nkZ+rNC811nYykECxOI7iltdDCgADrI90Y8uUapm0Cy/bPszlF5VRH8jcN3bd\nuwY7w3UWvghDRsHBqObzR9nl9WS6FWnAhqaiVWGCJMPsUwZUgxkcn42TjXQv\na78Aeoj9+c/HGFEmuxX+b6tzmW96kD8hcM7zBSaR+P8ABuxwxnH/JqABbL6U\n21lV\r\n=l/P5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHs/Z4y5FuqlSyrrOfAMzNA4sUaaVhv1V7BKvyL6EsgiAiEAip+nncG1Kw0trS2TTGAR0sEqseaESfKCBJ5dfzqZ0dw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2603-beta_1539358225494_0.4392439939701931"},"_hasShrinkwrap":false},"6.1.2604-beta":{"name":"meetup-web-components","version":"6.1.2604-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bde8bff2df9aa7a7d0da348fd61457b78c1bc42f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2604-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8C9NiYVsS0vn0IBnALr24mS+WALZEezWEzUVMKt59JKH8xNhU5GNSvNPP7cmGDHOgJ7N6+eZZLZSi0wfqZfs4A==","shasum":"720c81d5afbbe382464e2f9ed87d04191b3719c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2604-beta.tgz","fileCount":617,"unpackedSize":7853362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwQRLCRA9TVsSAnZWagAAOw0P/jpWa8RWGCadk33e5+6f\n2+6FGOzkYJwMsJ/UGPyVT/eSm9Coy8So/9EAp64Jm7EzJ5vWiwzQv8bHr323\nlKrLkM7WPuablvtot4pVVtMYjaNvW2naxsd/hLfITfzCA1zCap1Bk/0+k8Bw\nH0ysd0x2WrFB8UyaCc2EzmkBgpiH68RbbN3BYuIAOR7BwgcRsE4yaJqZbSrq\nuSPc8Y+kXFzQqWe9LIc8Xg/DGa+OrKrvvS+AgF6422kB70G9S0J9mrYUShf7\nH2W8iS9Lk4sqQvXFHOGDUfx/VvSKF6x8QSwmvoQIPKIgxkom11EQf9/56ttp\n9RPyyG6qucGdghWyN0W1QjUvH3WcH5Ce9Vskr7pJ7gggaegu9Gw0QaNha+0G\nb4chx2xiCe3zEbAM+mo6XjQXnBFa4/J1at3HBnrT9qF/O9GYWubdKqGpoR/4\nq+A3DlYtuRdbXyH3mrJVluCrgrfqbh4MFXDZWMKGYD1/u1r7KHcqty4L3fH5\n/Dqbr+TR3r6V6Yw/Y3FJCmNxWu93KLCRwjiOG6yQEoxjjU05nba/YQ7v6zKE\n3MMHaYDZ7SJh0wANaYeZvT6wlW7Zmtuo85YdFLkj6hrmSU0tFmXyKUrHzEd0\nnq4ZfhNZYHasRmDsfsyE9THQ4pV08JUiS2y1E66bBV7mcRQkU9XwbwlQtBTS\n3oFj\r\n=CEqI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2YnOqzGSfWUqxAgEVADcRqBWfUz6K9uRB9WyaK2OKDAIgVqfGu8w1uC6yoNX1S7GkH7hmzu+vqCWiCOGbD7aSXPI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2604-beta_1539376202022_0.1869865429439046"},"_hasShrinkwrap":false},"6.1.2605":{"name":"meetup-web-components","version":"6.1.2605","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a1b2c5d49088c25e9fd8b27342c8804f74f5b5f7","_id":"meetup-web-components@6.1.2605","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-B1Ie+f/1UHiTDbaGV85zaO8CYZIetVjRogAvrNfIL+5j9GAiv2z7Yg+/T4gvA0io7BC9/WcSOSuPnsxn/siC6Q==","shasum":"993f9e7cd7d6138b5ecdf84a19cb8f83a7751ea7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2605.tgz","fileCount":611,"unpackedSize":7832256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbw7YxCRA9TVsSAnZWagAAYt4QAKS+r0LbrueWYNaO0kZV\nfs7SJH4+kYMrQeBbiO6cQKrU4GoQx0fydbmyr6nRZohXdA9EtG2f915QW/Jt\nBSZmxLawujBvoMZEsgu+2GKw0awJr6lASCU4my8y/ORnayWTQiuejmLkd1ON\nyc/IDH+za+/tfELtg+IAQYldu3P4vr3fn9mKT2yF3DsbdRrQFiZDDfK2jQ89\nEspIen+tczn4ti43jFXnpEiJdh2CbDq3xZPCiV4cxU+RJtl6p9711WdBTZyi\nGMkeZ+W/zlAoj340bcoMFIpZ/3L6Az/CO60Ww2qqGlCHZDOXX/XuB8chlver\n/WR/GPBCD1D/5mQRyiad7y2UOhxIwvjhxd0frJXwF2DEycMh9ZiIkxdz/Iz5\n2pUoAbWosoKLHdQvg/sPS9a5cCjVsS3EpF/1HxKv5LKe+o8nmrLVi/FjDi/E\nEny5bFfoxMG4HIgPpcl3KcOBMdEblwb7+abP28AP3ooJkPPvF/s0eN1K9OrE\nZ6SYoJSKzqA0Fw4VDERZfdF5hnLgoe5ozQjz85LBjwDqaXct7tecbKXuVOvi\nMkK3MTWSxsNzFVM/JukgE1PbEEGMeKLb/onckaNXiJngHGikWU9U/uJwa1Os\nIsiyI4e+4YQCdMYK72GsUsam+bAwQX2RqCIgkJEU58fT8qWITjjD2c06gD5T\n/lzJ\r\n=Fxd1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAkWkipbAdoDiZgYtM5x7+TWPa7hMLXwoQShyN+allz2AiBE8ZsLXY1stg0f2NWdxGetvgpY8KvTBixIuhJsUC/9Ew=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2605_1539552816347_0.922115207806802"},"_hasShrinkwrap":false},"6.1.2607-beta":{"name":"meetup-web-components","version":"6.1.2607-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"39606128b7234cf6d45601ab9e617e86eb9db9e7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2607-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dj/rc5quWMzoLZLcUqWjQr+w4cDul5rYY6eBTju91qQhJPsUvwMaXBg7ETVgjtgfI87NzH9bZPmjdk67GdvsAw==","shasum":"3049ec19bce00a632ec018e8a1569f96c64b3ed4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2607-beta.tgz","fileCount":612,"unpackedSize":7905441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxgXZCRA9TVsSAnZWagAAyzMP/jQUFCwn0e/8CSRpVNbS\n59i+mLZ7DerHlZyQG6BN8hXeBt+sQc5VH2pg2aPnAgZe1ACuAxeAkACzKcsw\nrepCHTZZE+qqgUmT/oTpqGX0CDBeupkQOdZ7m5f/3H96lKwQ3kXu6lJTnLNF\nzAoOXXTavKrvBvs2qlJCj5K/yJqXSuufuVIG3SozldqLjjvI+U5xq3i20+ZK\nE/5aL2QPgN9NLlxJR6ISeHEd0RoUs2653r0we/fKXPkJYXpSnOFrAVoou7zZ\nyZOHfaL4OEVtNEQr9r/03JB4a2AFDLmVk5+LjZuM8vuxn9IgpeYxB/5avH4r\n8WsMnEVo5zux2h0KftemEbsSiw9tia1ibP6Q8cmyPQXtecnhxCsKazA80z7b\nfThnDmqmddUKZvS868EmM/UoKr2xYtd7rnu4iwf9ZrdA6jIq+LdhkdMndJR5\nZG4I1I4dNYQrDQndz2Sa00YSskb3CInrqltYU6jqQkhggqpnm6eV/JR4TDOf\nl3HKghkkRVJK8+/OUtC1jOUQ9IYG8/zLcIjas/biV62Yf1dYSioAmses5gQX\ngr7udW7aDEHGGkt6sMHfr8+EoIsoJLozJE2TwAinOyjlQp0UCeZgh3MYCzae\nZC9pCHXkjQ7YuTl++U3LVD9bkU+JgHbiae7G7EggmyULoymGiULw7gNWaNON\nYZ7B\r\n=weg3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCflyEh/uXEy4ctyG3+iEs6KwMH4/zfkqJdwb/nzCNE9gIhAPt2yDa/qiDoIoGCdZFIqRW+PFnOt25M9xkzPXPoWbaz"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2607-beta_1539704279448_0.6008750560241582"},"_hasShrinkwrap":false},"6.1.2608-beta":{"name":"meetup-web-components","version":"6.1.2608-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"36fe09f68a1cfed12b8f9f1152fe943acde3d804","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2608-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-n/SJ+F+ZfeVvlKnUWuf8zKDjQUgkhaUsIEfhYf7LggvI+fFK+qS7G7lbQ5FFIaYEwSqA3+OJjNdFY72Mtxj0TA==","shasum":"0a54852311a40e2194cd5423e11676ec92ba591d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2608-beta.tgz","fileCount":612,"unpackedSize":7905901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxgd/CRA9TVsSAnZWagAAKJEP/iRb6tgZvuD2QNdgrUEa\n0TAkqsOO4uc5MnRPXKQ8nihP2JKeKBzYTMjmwRydhB57NpdDZ8FP6pz9PWAt\ngHXiQ4jU/G23zgVNn3bjX1O4PwD5kVFrl+PgQre/ep3IyRtafUHNuFcOA4kT\nsx9KDz5JHZE+rycaRMzSaBE2I9YW5eX5ZpUoGsSUMyhdDulUZDZjp5rWERb+\nwjFz7Q/ZQLrYHQZATpP30RU7DKMiPk7SHSN9LBgFuLCCJMr2kgiWZzRxLI1L\nu1XBydiW1i1lUgkX0VYvX/RGV5nHGghty6lp2cRlcpK83FnPVKGmluw7j6Zc\nQ+khx1il5stgt+sQpAI6xry0Cr9DFfWwbMi1qCiRUcgZC6Hdmx5/OL9pbHcz\nCs5aTQE8nVEkELK3e8Z2GBagqVLbGVC9g84/ZiVRXKUs2An8C16nUESGP9l4\nE+3jSPhpXPrGqXZLWMW+dRfc8FIanPc5c7S4eAsa+QB5NxIpFok41VcaoNE5\nUmth2Q0cNrA7UNNbQwKQmndXZheVAbASqFOhbM2hj1Q8BHtxz64ePVnpECCY\nHIYveV4/KC12Y4gIjuLa+0rnN7szDh66PalQFC/w41+GplrAO4iZyu1alaRN\nC4wYngsgnEJLHhioGBOg0Js6UGvlf91miNbgNaIlhx9QBuqwsFyHvr8lsTbH\nQi3Y\r\n=qbaX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBZOQq2vTEIhC1PfUbcEIXE6a7xbWluN0kt1vg40SEDwIgW4su1yrsVWHPiUYSqzSO8GId8SogRXu3aJfqI3alBX4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2608-beta_1539704702157_0.9741022151783967"},"_hasShrinkwrap":false},"6.1.2609":{"name":"meetup-web-components","version":"6.1.2609","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ce49fa5ea1fb0cb63c5c480fb71bd0b70f2fe57d","_id":"meetup-web-components@6.1.2609","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pVxeIlQIqc8Vb3oVQ1g2Uso1vQi5+lAY/tvRCU1MAhKL+1LNNSHZA+Q2jx7dIz40BF03/Iw7XM0AhZm6gMEaTw==","shasum":"ddc50b189e4892629612fe3850e9d0ae2f7e6b7a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2609.tgz","fileCount":612,"unpackedSize":7905896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxgoRCRA9TVsSAnZWagAAcogP/02hlc+bZT/40CRc88Wm\nxuGa+R108T6c6MQRuidpQ0gNKNX4pt8m8pft3Wtdp9R0N1ORAiTQEfnxiwBJ\nMs9JWaYDr/W7eWe62kiYIe2IZfT2XXCYl97pY+H1zr1TNkxHzheE3MIe3Ds+\nQIhEJl5bnvzm/+kRjW7CFIKsmqCL/mbmDqGG/0N1Ws2Ivt6hR3FWzpTa0NWk\npO3VVb6DCV5XXrQpJ9ou5ZVDaCbx1Ul7P3Z5jY4iSBIaYi+UZg3XB4UxP6s9\nsnlqH0k18VOjC73HotBqYy5ejUAg1ivhlTx1XtUnFbaDgkpwJ2kLTWEdGrm4\ng6VPcP4EV570+kOoBwl4NVUq53u6wshrL9/kzRPkK/4Ui80o6cbMhKjEaLf4\nHvdIaRj/f/ahHGXyDvMkqqoJ+LDfET5KcVtidufU1C0h+X2a0EQXzWeAN+Gy\nsmabzwYKQFlPXocJTQPD4GV3sGYisdXf5ecMbdu0eokNjVFoPzrVLUWp5S8n\ncnlAv++b4AvonXZFR/xsXXij9MW+tDQVqlYEy0oE73yBAdhlv3XLL0BYhRLZ\nK1l6C6/hC9rCBULYKXh8d4GdUg6MDryaN/s09zZnMT0d+r23Kp61LhznXBEW\nLfPK9YQ1e7KhXoCPthGm1u+8sdrOMXEbtg09wrf85IXvlK6GGo+/IPlZb/Sm\nb3lT\r\n=PcBo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjp1tdoeBO5pttWpPp9C4N4QIww3MG3UmjQ5OQUDBetwIhAPiM0j08CPto8RPNkR88eORS2V2sb+K6qdEFeH6vgqjw"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2609_1539705360879_0.17132262630834227"},"_hasShrinkwrap":false},"6.1.2610-beta":{"name":"meetup-web-components","version":"6.1.2610-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ed17e735ee566b29a68633a536d076e4ddc24c89","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2610-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nsk35+nEPoPNDEcDfdRY0B6f0nudQLzzg4F6ap1RgRiue5XHDgzYC6CfG0lnA2mjap1hnu3wp731MueGBM+Kqw==","shasum":"e79671a8478f8fa2233f5f0314bd2188deeb8eda","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2610-beta.tgz","fileCount":612,"unpackedSize":7905986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyM0VCRA9TVsSAnZWagAAz7wP/1hUJGUrMuOXAcxq/2DN\nMNSJqZwhUFhRPSBJGPe95wfWXxL40bIYQUjhY2lq3L+nqM0xYjfG9Cdb0Ejb\nCKzhVVdH9neN6RTeZoZkFTsTdxPkiujx2195moDKSb9Kat6xqiPtCpdJHxwN\nQ5OqvM+UGmZMSUPZ4uuh1Zv5az08XEEvvVtcSdkNeJLofamqCxqzVttGL0RS\nyNRag8doLxnnQDzhzVOMziy/ezKOVeatygZlPwYv4JujJyGUDEhuw+HDQX34\nln4U7LL3arOolnOIxypBdTwCMG4q1G46c5Y/9NJfkXaPuqFEbYdpy9hw2nwh\nnlwS0/Yn6n6W/Iy3+CI5asVPLg8+s89VrnLlStPePx9Gl5oHggsjDli54P1F\nPwPI+JFNqW3J28C1U/+/IyrQypcv9+fG6PsxHmUvUOAoVNnmymRLRPTyHN9H\nrqoVGpk4CKXeBup+1wnkt9C8PMUovdx9PoaZDcxym3mHuqhpy6DGGTc2qIWy\n36wrbgc2nLxcD6iPCM4uckmDkoUOwKvW72MdnR1G6TJZ3cbXKnt5Dq2YbBgk\nnrayNJpBG7LCxFNLbaWHJLTtLT4nEjt9CaSgfde4akoi/GepOZ8PY+/ECVW4\nE8ytTemUMPcZuAuxNSPmsVERIwpkRJduxtH5vYMNRJTOn76vfZ+spHcZJfUV\neQjJ\r\n=qg6H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFZoPyexOLBs+IBjtnLWoVlaSxAVuTy1sdYrXJejR0zgIhAMEMkCNBn1ZxGaxfaA4D2muuU6pdU6t7zr1M9ANrfk3o"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2610-beta_1539886356129_0.061265158103721795"},"_hasShrinkwrap":false},"6.1.2611-beta":{"name":"meetup-web-components","version":"6.1.2611-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"31d961d53c044f0d4c980ad48ccd82957da52d28","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2611-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qYrtWpKKXn4ULOqftjdhQ0Zj1un5j1z4AnEVXhWQbY9EMhsmP/URuWfpvu5KO5wRq+w1CmQU8eHZrlomG+xRqw==","shasum":"3d0e03e03d66ec50da49d89e551ad1b07e4613c5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2611-beta.tgz","fileCount":612,"unpackedSize":7906060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyNQ+CRA9TVsSAnZWagAAJMsP/1a9sOFa4e0BeN2eZ36M\nrSsRRxcFI4hSzKC00y+q6ipbgQ8OiN3PC0eglWcvMbWsj9GCx4RCktfPISGH\nyQJzzH4MnEjtmOs4FGhjS6Qow97VDXFIEiWt81EFCmCFjF5q/ZELIID2QxpS\n8OhhusEv5JygxTy8OCC+i0JgLYD8qmmUfag68Yd1EU24quTK+A4G1f8zpTvh\nGmLWqGslGoNvEJlS3kPIiFCTs1ACRElCagfl/M+37x4XcsC5Vn8kaAJOdJOU\nOCyUg4dnPnhsrcAHPNS/WyEaWVbG5r5JhAqKYh+JHDJCw59N7dTRd1q5P5ou\nhpt6QYNCkqBm8GSrUM5hdlIlyqOSAXKeh22Y2p04Yt+SviNd49q6y++SoQL+\nlzwe62FCCdiYOn2eZOi+7fekWmtomg896OJnrqBON7KtodNqcgn8Q2ZkxkhG\nCpw5GGAwYUwERwk29fFCjwKB7k3CUeL16lKGjA/qCRQdo3hln/30+VyHJ2vN\nItVc/tYQ9drU0/qvZlO9uU+eWWjUa3TX1XB8HL1UNXZbJlStyOphnTe1DLhM\nWNbOiNTsUjDo33hWRHHglyJcHrk8KutkoRHWvZHRyxw2XeomA8FV3D1+WBA4\nuloPjakT/446Emp+JtgDeMyKS7E9zTqeP8EoXZ8z9OCCcnJ3YhGnWN5AAY9a\n2iUv\r\n=2Bf+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICUryZ8GCMbQNZG5iSwU2In7WK8J6cOatOBCrKW7HoZQAiEAzV1ShdMT45Ha1Psp+o+NdSQSh/iG6Hu72QOwc1V/NX0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2611-beta_1539888189747_0.7431801673766887"},"_hasShrinkwrap":false},"6.1.2612-beta":{"name":"meetup-web-components","version":"6.1.2612-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9c2f832b855bb671006578e09e2fd447d29d7b88","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2612-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Hh+GWUN0Hl38Oe37OyCrv7XLp62b2s7YQyUH9ew9TLOjFvgTlfHFbF1mvsBhFxv65UsZPQIoTTgGZFWSVUUYeQ==","shasum":"62fc745517d3e49406e70a24d254467c3e6f3e76","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2612-beta.tgz","fileCount":612,"unpackedSize":7906069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyNrQCRA9TVsSAnZWagAATeoP/j9O37iwkGR/1jSq5Vhr\nqJknGdxMqgx45cBcCR7kPAod8V2ZrJa2qjSq6t2GgpKVN5Df4afSB1YZVR6a\n0NKS6EzJ7K6JUzvMRqZF63Uy45r+JZHAj+4aighiMeEEYAjz9xvHVuhFKLvt\npNLTkkF8FB601fpsj/lUIfLQBft32euPS8FsGv6pFwZeQeRCLCSirY0+nr8N\nScK7kh+CtPSYjYDn4OY3XiaLBAv2nuOnkkd+q2JCHxgMZjBMmLj7LFaFvIQO\nlhsltdePoF4UC1It6T8Y6QrzKWodz+vuJTnuwNFy6ftKSqRRWZIMIL5L1l6g\nSiQA3lVOGAtRGhpEQhv1sLnfFHveMThND2M4TIb41YbN2pyaKWMmhHuTNxQ/\n48a3LwrmsyNafGYInvfgQObliGGypHILKsu1QuSKULGxtVH5sw4H2+4Ic9lO\nIfvb1n+ohuSqAQQwZ79cY7dt3xXSYomhPuBSa+PV2m8ynOinY9ThV9PWCOzK\nGeb4jBqGc062EW1JY/mLphRHPBjApIXj64X8JYAG7XbTt3VeNz1Kx+sSEeFP\nr8fGYi5QdA1u2KaVO/g8AUEnAeKWLmIE8M0m/dA0a8+hPncWSzPfgB3+q2CR\nexRovkGeIF97araKwNq4iqzpBORrGWfaIaAABk1A788gk7YyN//zTviQRglg\ntdlv\r\n=ewsN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZU4J6QNxRvLrDPG/auvP7YeTitPKfm40DddyNbP0knAiAlbymSEFyJRlTQgVs0Xmqy3Ww0pal7j8g1ulBTi0110w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2612-beta_1539889871666_0.47692469611403476"},"_hasShrinkwrap":false},"6.1.2614-beta":{"name":"meetup-web-components","version":"6.1.2614-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e30aba75f76c9be2f4cc1b3938de628baeaee1e0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2614-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9gpNXtqJWxPewqbUtuINwSeDeoPQcw+im+k7pLHAyuTa8xx56niF2vxrtXRQpQfc15e9BSo0b9Jvnd3NGPYBdA==","shasum":"1bfee1cdb39283a9eda4014ce9004ba2d8429f88","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2614-beta.tgz","fileCount":612,"unpackedSize":7906291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyNwyCRA9TVsSAnZWagAAv3YQAJdWq9avXUQaqelTCFXz\nwpY2mjTNVXvCOd5UPejXIcy/bP87hYYTo9CYxl8URbbNPR/tYFdp+PVQ7e+1\nWUpvV77aAUFeSFCXdDanhTdxq8+46avN9ULke2vlZKojkrKqba5u4zzmAnso\nrC4I0ArfHE+Wt4O9cXPqQTICeHYSCgRUVqkKQAAnlc0Igc82DTFQhPZy4BOd\nFvSdfzKn8PzHrIeG9yAVvug9yt4dWu2PUWLR1/Nm56J04xmfXe+M4XmLdKt3\nwffciS2c6lRWKOFr5babErJHwAHgbRxCh3SD0JZdzWeTiQISWh26+/plKXa0\nMHz3tcxy2isM5Rt+6/8onbmwN6gtK5/F24z8xYvL/W1eIzbh7QvB1itCd0x8\nrs+fULYPUHSrK1ORPRFnXlfwNyqxlsqkU27vflDn8Lch6VC6MZ/gKvNqGRrD\ng6W/jkwZ5DeCrIPmxNSssqtukcJ3s8ZuLte3sayVGqVvuaXMlg3T49Rj+LKG\nc/svyT/1ZK7b/n55bpagkQ787rz9h5zFfBePpw+mR2mvffy94u791G/WzdPt\nFf28rWnklAUUb0cMYANZ8xVa4fshotVZfCgcPdlh1RJ+MgVr9No9NroqGLlW\n6hDD6vdCgr8g7VArWjz3fPtuGjzhB22CMH85srT9IsbHy+pPC5Uuwgg+9ypp\nTktI\r\n=8Md3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2JO/zfS8o4zR+xVUscWtTfmKoaiuF/j2QvNiWV3YNWAiARhEyEWiEKw+7pGqziOKhGY+alTwtndNtp6NVWWGqcCA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2614-beta_1539890226208_0.767367545176725"},"_hasShrinkwrap":false},"6.1.2613-beta":{"name":"meetup-web-components","version":"6.1.2613-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a00535a1a704205b4d7d010be8e3c8857fb835db","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2613-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Hh4PCyFmmMlJA/yWPTQOJUMQbdvdoKFnpWqtbJhhFzG9ftiwHv/GELrX75pksAUBhnnD+9xS4qHbAdq4BE8q9A==","shasum":"4429a3185dd989a53bb45ba0fc8aeffa2c7687d4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2613-beta.tgz","fileCount":612,"unpackedSize":7906291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyNyPCRA9TVsSAnZWagAAds8QAJl5M4IoHq54a1f63jLf\nUkpljqrvkazY8ZyJLdERZBIZrEPeVnfBqQ5+ReaBhA4irbPH1MNV6eHKTcfu\nW4EhZaO2jHp3Wo6YHCyQ+pDQlTc1nMH73yvTn4uaRYqGjsm/agWoevGkdMes\nlqXk+voYUMI99dkIis6PWu/Nlnb6LXcaLZWGq/i0iHcZ8+5m84eu91EBYg1Y\nadSqtEPvZQLOUwYuVXHKw9Q3A9Flp2wjM1puTMxZBUbn/GlPZKMfnIBTFsyG\nFv9NmTztZLQctWh5D62upVU1HnCm/DDTXuPNC6f8fCjTriUgR4z29DMtbX5F\nMlGhTJ5OyeoSqB9wqdpMkuzAmZGfTYTdoG3w4x1YiogLvGmbiZaTNef8LYJ3\nZJyAV3fw583CkhrPwFgr5C4X01+sA4us45JpcR5/YE8o2KB9ADGUKGKdZ44r\nvDTthnCl3BqgjrAPAUC2KtecL1kf0w1SicHJeyWM0bPMerOo9MwMB2FJcyFa\ne5eFQbQLVG4IQv9mX7dUFALzTmJDNtmuTcrCtuw/SN3MgMUDRjxtGJagJ/DP\nDe6GIIVxN5CSTt8OMl9m+epivFcNCftCgPZYHBWSihdGnoyNupy/84cOMn6s\ntqB1vw+G4SSuJ6bDuIu9k7/RSgVVrxRv9sBJXJqgOhafbBu/8ZxWOe0whRvh\n8pCn\r\n=T+Ht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLjAuuvoeqJFi9YoqUs1hDW4VbehY2ayol6AbUHNmudQIgDZY450q2S6nbF+P+tBGO9LdejtXAYxS3J3vliNN92DM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2613-beta_1539890318769_0.9693715570320396"},"_hasShrinkwrap":false},"6.1.2615-beta":{"name":"meetup-web-components","version":"6.1.2615-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"11c72ce6a83fa7c2413b83d12a11a3e5f4e2d6d9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2615-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-v97WZwNbMob0r52NsWS/HHoCOmOxxiL/urLyI7W9ZzxN3+SoH2CzM/JE6Ccx5nRzyQdZddy/Eq9pUpw7m2UsMA==","shasum":"0eb799ee8802ecd99b4c3a54f56ec5c2a17df7e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2615-beta.tgz","fileCount":612,"unpackedSize":7906365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyN6iCRA9TVsSAnZWagAADbgP/i49lJP8/MEaDU64qPkJ\ne4u6ubLqkNz1nllN3/tTPYa8d7wTyZn8j+vZR+jWDFQsebxBbETQY1hGHC1q\no5wUQSP0adg/xzkW3BuTgYZ/4NXW2SsoFiwv7ZLbCbOjE1v4NDIPCT5O8PgI\nCtLnfdVbW0Etkz6pf/HP46hBwJCLq975FfxkDiARTBrqun75LIx+oMFWnK5b\n2f7j7CeAitVrJznje3pD9NVeTwO3O1HsJhxlQYdSwhHCB8I2tezD1gxHB11f\nzPGsLo5trWRclZ08iDlRjJlYc7qbXHddIUCAHjzv3Dbxtu0lPCmZXO/ka3TF\nAxWGgUutRQFHLvD2si4wFXwrIwX4DJh7c+8984JEF+y1MsvVPREmT+lJ0kFD\nnxgKCyih1Rf6ffPm/daj3BmIVB0r6yODCTD3iKBitr6DRRfRfOaL3QsvzPTt\nZ8WKH3BDAvSTGCBW1cjnJgOt0z6sqolK3b43QGLqJluv0a/7mr6R0XhqEo5f\ntjI51F+WG6XQbKObU9U3hZ2A/tJalrezgnRVG1gbsJmG7VKMfDkr17cUh6bL\nhkgepNN68w8+/hwyCmexylT2NJuUsO3MGBgDNaVCyRIC6EoytLn305x1gjWY\nK95uLHhuuTTCeENt4SesMQXfWisJUWJRd2uXKfM2KmvqDtII++oPXWIcyG5S\nUkc7\r\n=Mkjh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxCV01RbQoJEzhAJUGd+8mqhzH0IWZz+eObkRvjtkMUwIgBVk9/qBBZi3J9sN6+wG1MP5g9uvIMWLdZmyPPc8QRJA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2615-beta_1539890849335_0.7108849325250073"},"_hasShrinkwrap":false},"6.1.2616-beta":{"name":"meetup-web-components","version":"6.1.2616-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"dcc7b450126ae3fb6984d0826af67921ca9a0081","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2616-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+eOI6FJPm7PV4HCSQsbax47qg4WeevVrgTUjP+2n9qHEoci3Lle9vSIgXfzaHIeLgMrcf0nCtDOPatlSOxlwxw==","shasum":"856592e10e62356ffc58f2c8f800c4948a216ab2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2616-beta.tgz","fileCount":612,"unpackedSize":7906649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyOyHCRA9TVsSAnZWagAAHcoP/3tOJFFXO3bpKkKCuA9a\ne03SAT7PLWQJgKL/KYD86HjqXFleTYIKWSWKVkvUz+sjgrUF2NrQUvOcFomz\n+cCpn5XV532d/+BccEe4vW1/GetlWRXAmf+FZ9xQbvMcHLgSiJgA3u4W2SZC\nztYPr2d1xhOEqQTRtVJlCVfrrb8Nexb71NHBrvNI4HESK4kuT1XYvvwpdlib\nKFoEBcLXTk2G1dgFgrQcyUG7ESDfHxlsVzoHjBBWAtg1UaFoxatrnufxVBBK\ncsFFnHYmmuWAJSdlsqhlLoJfiAcJ8qn2nt8w6dLpEcqyOZsckqad6IQqD74M\nKxylu/Um/sKvv+LQ8UkCh4jTYtq00ZRARa+pjGd9VMC6TdeopiVw4PMPk8XL\nGiBgreAN5vRRsf9iex8Hfiw9UT+y3c4YTEx/SPk5MaLS2jkWPyo4N1/ylfnC\nSIrvqIFXdE84wqAdcDujW+qlllhUV8Dl1HLcwiHPTFuacywqaZnFMlLRuGxz\nIa8Q1NqzjdfBsmPEquJBdu2y5rV+dF3FZ4Y89K476BCO+V3b56Oe5TqHlLdB\n2hqqh/9h9YfglUerxQcBWQlKwdePti5HjjUfASLhSQ+EhqefCMjHish6jJ7D\nQ9ItHc5vlpBzRjbi1kXb1WbHw6X71jnp3NR8iZzMOtQm1ycOrg7idtW1X38m\nqQ7T\r\n=kHY2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICCGWy8c7PNAtjwE1+7eWuAml2hdFFNX1r0FiKSF68vRAiBdpSONcika14zMihqCi77vCgP3rI/Bd4NaEg/wLlwlKA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2616-beta_1539894406450_0.6213098368193357"},"_hasShrinkwrap":false},"6.1.2617-beta":{"name":"meetup-web-components","version":"6.1.2617-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f643813f0aadcc872f3b1ebcbdb03fd08b5551c6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2617-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UyD+splEhq9y27I43rVPHnupFpHgd88TCvQQ8GvQiJ4xqzW04bNj14OPjO2SzUzg2tLt2obPuU4k4dBBCzArqw==","shasum":"e9037d192b1919910240c8a45510aa23f1b9f890","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2617-beta.tgz","fileCount":612,"unpackedSize":7907300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbye4SCRA9TVsSAnZWagAAiFIP/RxG6LixCLtI8IjjEsQ8\nTGAzRZejx5CX3y8WaEv/dz103ccSYQPt+G0YpFF2YajVm2U+ibzX6CbCOGDN\n9T3x3xxn186+Gam48khLadGz/j6hDI+gy6kRMwUXADGJGZXHtDugpmqDEzkU\nRzQO5sRkO/T78BOPgkhnGZV6LHvTSFGi0lZIHfxMgIrqrxCwnwtdMmR3qQXS\nWHOv7Wdr/PjNo6yUpZVAKoGNWxZAhd/T0GqUGVoAtu3A0EaBbssT34NYlN32\nEcx7mEf2fZoinZ/9qORSzExcNkJN/Vqx027jiaI6gL9HddX661zHNw0QK2MA\nUzYo1EOq6jrQKj3sh15HHUrE1rx6kHvE3/slEQ+1WhQhZQk12cb5TPlQzpwX\nJimaAz5cIxS0y9QT3qSr9fKeLSRoxGsf8IAxnLnwFSWimZhyoh+SSGW7lNKj\nECFFMnWR6udTVahMb5iYkCSqGVukgy0HykiNJMjcC1GjTR+PiUpya5WB4jCA\nBO1//cTF8eoJXeE+oy4fg19dEpEs2HiMhu8r70zds4NGzzTsYLXNf5vsEntf\n+bQC/rWZ+/fcsIretTgBRQvhg6ULQ1c6CCceqh7UgihwBYaIZurbqIApt5a0\nhaoFaOJcvC2+0AuACjKkGnXr22ELhu7Gp+fO8YBr1cdkdzp9XWJn5Ug93Ill\nscWI\r\n=r2r7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEJ7/tijJaR+YVni8PvJzrngRga8swR1QMQDizNHC2CBAiEAqDSNOyDJwB3E/zF0WCQWvjIX0OIvClt7WhBKxoEtu40="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2617-beta_1539960336667_0.43020776579616804"},"_hasShrinkwrap":false},"6.1.2618-beta":{"name":"meetup-web-components","version":"6.1.2618-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6387d1df5fd2dfd672ee5ef7f2587bf5aff4b653","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2618-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-r8PAGqmEePQk2mulLJ8PCsAa/8I26aNhV91LcqQloW9ulGwJpAH11+ppDWpA2OoN7MXn/LLcm76hstC0RjuaxQ==","shasum":"fe48388437081fc14ef094369832d07834bdab5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2618-beta.tgz","fileCount":612,"unpackedSize":7909407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyfg7CRA9TVsSAnZWagAAD8oQAJX2mBwhmKhe9K1CpYGX\nTDS6zgnRzMZ9KQm7g07fCtrPtakdjN79RG6lIRnCxysb8s/AlaJpSkwDqtEf\n35uCtX6gOVmlLWugPZO89ggoEygcAhsAUxqQlJPvsg5XiTTwurs2wiX0L+3+\nVA9GRyZzePG8pS/5+HmyMB/tbOkywrEtSWjLOzs5U9TLSQmYrcEXhAiBZQ+m\npSUrL46TzTtXnrAu50ZilXqxIqkHUZ+aGrKwCyka2Mt7FOh1dOEyTHAcAvud\n/QUQhmeiZ5lFlwlmea8WTmWywfbce2Jlg+r844bsRZAjeyVHO0epgAKzD9wv\nma7b4qGsC7sfhh8FJbu7PVRt6xUiFUvMmgFa3zFw+h10IxgfqA406koFODx3\nGBMS67PhaS5zGmgjmYG6SI+M4smYbcvL1Xh7fu92PwgBfUwUFPBYxegbdJ9T\n45bo4m1/qJ7j4nxVqtdIRCqTVURreR5nny2R1F42uobBcuvQlPv3tdnFLHla\nn0gBp1PbICaguNtTQ9+UQ0FhDvs3T3fNQ2O5ouiM4W3vIpY3jaCV0ulWMX3C\njstgJxLR7Szyjg0vxVWjYXEAsVTxecBcb7E5vvqXBqaNwVN+gSl5PTV+q8o2\n1NLbiqBvbZt/rd4LGNOiuYduTW0JokM+5HnNxudmAH1rG9a2700Q3qNc2p83\n8vHn\r\n=bgqO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdhy2ytKc5VsTHgHzvikcr3WBNxodnKCEuo9fPU1rH6AIhAKGKfXbc2rUovBbAH7w7eKjlS9WwIKGwYsj+lpkl7xZy"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2618-beta_1539962938726_0.9158338609765515"},"_hasShrinkwrap":false},"6.1.2620-beta":{"name":"meetup-web-components","version":"6.1.2620-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5f8d0614b8f210b62b01252977b6ee1b75566cb6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2620-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-w4LNEHAA7J0NVfEMyS5M6e9Qo65OgDtjt49RnRNUThgVzNRpVItY77/2mLadRHvgbMM4p80HFq2nloywojnBCA==","shasum":"ef119c39894b6e85ae316a67c3ceb932a50df5d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2620-beta.tgz","fileCount":612,"unpackedSize":7909902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbygQuCRA9TVsSAnZWagAAzkkP/3KyD3+IprjYGtVuTzQH\nm0ROv5CXgxKPLaoyV76WkZt7C+vDtaaliIsxtu9Ly7FBD7XJGM7luQPBp+xa\nZmxpLx7Xe5q6sVTnlhCRMn84z/aeg+Zf5PU/7QE6vTxn1klcvaG2VZ3ZtxJY\nS4aABWmFD1TEVX06y1Gz/id/6DybNaXAXfVhRZfG6H7rl5CAk34+gwifdpvU\npcCLtRCaDtdbH9iA0B+MPHPV27JWlZS5paicI905QHRtmJYnBpSvuEcwQ3Hw\nMx1tvPywFTAGOa/K72FuqMG/3gxTOyJmE+nWvNq3Jl86/OWAJFLtQc7l5DU4\nUlW+jv/Re97PJM5I5sRaA4bZPmjb29p5IBmdN54xG3+VFKugJtPtmFQYDw6Y\nBQBOmCLl7gmi5GG4Zj/Fh1FhWlVQ9usSTGZ84VjzsxBQm9VI77Lm6VansJnY\nw+ga4rATVjScEvz9op+W8Ux3mct+ZLfWUGn4RIj4WCX52TaQWRDf4/QL7dCf\nIh+pVljvr3kVvjRCirpE3QL/oWECNAsFKn9dOzHsWj3tqiVtY4lgtnOrBo+0\nghlPUwStugaIO/lipF0LOQNBI3xKB6fBFcSAhK4+nOJOpqpmhlzcf4OraDBY\nU0QX5YMkA1EexZXzVCR1fQEgIy04eQfBRdiWArJKrBW/Ua7k+7g5hDMPRy6N\nwZ0r\r\n=caS0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3jfXhm3f/luQEDvkCntE6Hi49EFwGGMm05uQwWNgudAiEAjtHAeFBrn7f/NHOGHEzqvzV5vdG/8UDyUPUHpbTlh0c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2620-beta_1539965997403_0.954899836651304"},"_hasShrinkwrap":false},"6.1.2621-beta":{"name":"meetup-web-components","version":"6.1.2621-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7e684bfbd207291f1b2285d71eb0853213632bf3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2621-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1DrfnchR+Nzr6vWD1XnOyDwRT4NUjkPrTsInsPdLqy4lLaN2eGDNFxtafWILGcgcQLA2yOxijajShYV1i22gAA==","shasum":"1605a7d681c5e8121a217b9742bd7132f8f163f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2621-beta.tgz","fileCount":612,"unpackedSize":7909877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyhyKCRA9TVsSAnZWagAAWRgP/2/CyP77rjNmDkTfdydU\ndXRubjGlQy6LcvHQbU5huDv4MUEue7YvRJNMbB05aYHaTXm5IIjQBF5oOJ0t\n/uFLe2noKC0cSyuVmNOnFNoFHJdT+ps9e3M1JL9gujbOhJzoY2bMWvSjKyvF\nxtaMcDmXpRz2BCkzpRrbYA0tnP42+gLaNK09NvTMdr/zJzWu4YTf5ENH/QZu\nFQTsvsaOQ7cx4g5lIQq5Z6UfkbPCW/LoaCt4JLvk//bJAOvLvYk1Q69eTEgm\nZDRAN0JnEG7/N1wnQwHkRssjgsIKoa8S6aiD+Vj+6EDHnx6+h/YV/kfvnzcl\nfX/lnzXUU3fBv3dWzVIh2zMX41UxpEzI2tltuKpc8RJhp7lhnhlkoUS3dVrn\n1b6uhl3bQ0y3GIYVFNnCKc57COxmjWVl6blypT6YPSYETXGncZzrUvC1dMel\nBSQzZdc55B4dtz3RJaCr+AKyNrGa/A2z9KhIKxNYacuHD1i4TDcW8AGxy0Zm\nVAmIndhnfWtwBylcZJJ7OsTvN2WvwACMVlIh5KLpzBMksPkVwLiCuCFg4GOw\nfwJC2VhzdgRc12ZZQxqC4T8yYE1a9F7o+sdi+J9LvM/ZJMNrpKlVMLGVp5Tx\nqmdxbKUz+87ztrqm5B7GwJoq6pF1R6lKU7dY5yub0UBvC25xEkn7Z7II5SM6\nFIrU\r\n=7FRc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEC3FWDYep6z8qTvb2uGVbMIy2S/dadjX9vX18WM5YzDAiBEVhz8+8lcMDa1oagwlcGH4mIFm5q82VcExFlo2lLvaw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2621-beta_1539972233456_0.10615671193609622"},"_hasShrinkwrap":false},"6.1.2622-beta":{"name":"meetup-web-components","version":"6.1.2622-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d4fc06eaf8978b932d004fd507a873aed3fc3823","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2622-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-R8gK6+GsFa0JFivw7wRxwgvvU6RR8hV9MU/Qxg2z2rkqzn79aG3RTipD8r1yDT4BdLlezZYQXyEDMWsORQ2sKA==","shasum":"43d0a7deb28c503d6b24bb4aec99215439786bce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2622-beta.tgz","fileCount":618,"unpackedSize":7926914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyh7JCRA9TVsSAnZWagAAjfcP/1BlYOkRtiI7gvfAnGst\n/wwZtiHAQdHQQeCoODy8fX6i3TYqNU9fZzQbpK+dlIvYTIJDADwFJ35z8Yrr\ns3Z9NDWIDPsu8C5o2xFJ6jQ1ANXJfe8SEEzfNAQHXFccYxjtGyAgw04Vonyk\nJacXwCmPiHQ8xpy0FG5MWYQlZo6MmQCxaofVEzlIyG3PgTtZeWzUJ2JnZLy8\nRilcy7glQ7z3pJ0iXd0SEZRz+a5E9IfOjd+lum3cIr+GDJHImJoMyuDqJqHh\nB4adVGd8WfH8p8rxXFfT/XEU1UKquHpmJzup2PzcU+DMe5fvGzuVVYoGOzxK\ngMk1DFm/5MqWtbI+lfwoXB/lWZ901owj2KPoR7PUNwblA3FHoJ9ixubhKqpR\nSZjYrindlIUBdhugTj6wCNCzMGlp0ogrkCyoezr3r68tOK4nyEHnHwpKZiYz\nMzsYn+/3W34BdMBmVbG9SttkZOFkwwFOLRfK8yWT8Z2NRw8/Lsf2zHdCTP9p\nnMxkNNtxW7xyRcVNSdTdjo6IN0e4OR4SSH7s0kQ5eQm+jvEoPqHoX2+0yXu4\n7xlQ/dVTYnbdtKVwLpnsGMWMzeosww3yy8QaTfqEoXf7B2KRI82ZEXRk+zGi\nLI12O0CJFZH+EH9KwsZpPxnyb5mxX8X7wAM25XJU7P5rFO3BWY+U4KdV8yqn\nmfNf\r\n=33WV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrGs5ILJt1bfVla8BBaE/7HYEOuInoLS3fAy+uOZI7LgIhANxDZeSJrz1lIbu58VwpbK1+Mj/meBpouArQDxOrKLT/"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2622-beta_1539972808127_0.36800194875902115"},"_hasShrinkwrap":false},"6.1.2623-beta":{"name":"meetup-web-components","version":"6.1.2623-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7111c68c8b32284331227181537a1d543115e82f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2623-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-o4P3CeIQb8tZk8HMC8t6yLo9c6unoJblmDs97lGAYVm5kKjBt2+3CO2KETP5R3ayx2zwIgsCxVHZ3xmNPFM+6g==","shasum":"78952390763f7fea5acf77fdc293da150a528291","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2623-beta.tgz","fileCount":612,"unpackedSize":7905997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzh5KCRA9TVsSAnZWagAAmukP/AjNguA9zqtFvHfWYR3h\ncN5/mvzwmQxfDZ7818vsGuHY8OzHuK8VffImbeCFtBfltE74zfFSzKfXB41d\nPpI2iqzG/l1t9VDiwfgHupR43nSRlrZ+92RzYZ0a/kXNtv2cX8tQWQ064I80\nHWOzvniKyKU4ZFjbkLIscoVgAjQecQc6RXICSMYqUu7Aabf6QXGhZyWo9Hku\nb89s/utEr0LMjWaxRN74X6syXPK3G0sn0I2wgMHdJmKrcJl6RTVDhXYNRZzJ\nDeQBRissapV4eZRTyTND11q2rfxQBry4NNboa5JS5pAnFaxcyNGOnk4Aduaw\nnJStF4YHssxtHIE4O8D3ymbIOeBK+XQUFtNhOAz59aA9F1MZap/1W+NLLTWt\nhBs3l+twE1s9IVmo9YXr507j5PFP5O0PCVeq0trmFFs3wTZm4PrKtW7hyIxK\npvGBGaMfeFpvQXrzFg7tuKcqh6bOBOcCOa34G/FidnKWIdOUaSwcWiWyUvJh\nOP5+O4wuzKYUJUElH8liu+6Y5mWZStZJOtZZBY4ez3r1hUUL3NAF+22jI2lC\ncOEvSYrgxW+WRerwLkYA3CiCa/LV/LZD6B+4CTz6Oue8ZinpCYRMvqwF27Tj\nunYdCHAr7QnyjcmktO0rig0fOru1rrqaNuPNJ95lp2JYwarwR/bo6XDTQ0Gh\niz4q\r\n=xuof\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBiHpe0o93zWB7gxE2dogFGSYN9F2HQ10jC135tVuvrAAiEA7jcfcHRgZOUqWijq1P0Nd6VKyzmKxESR/og2fkbuOqM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2623-beta_1540234825406_0.8260106629622885"},"_hasShrinkwrap":false},"6.1.2624-beta":{"name":"meetup-web-components","version":"6.1.2624-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"11445c8d678a87f8330c7be78ffefdcb74a233c4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2624-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-o4i3OV203pjXBCSzlwiGJOcxyPoO2Sqm9JCbIl8TIFexCQNlCqnXMdEVJeaMSFBQ14byPUXpOSA5Tu0CuMhQ/w==","shasum":"8511414c207ec06c02c0a360f7aadd977de2a944","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2624-beta.tgz","fileCount":612,"unpackedSize":7908799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbziZwCRA9TVsSAnZWagAAI8wP/RAoPqSXu/cNhS8V72D4\ngo993JED5ViTCIPMtkqnObnkYUlRqBLcOBHSW+C6ZEN3QNZWvqhW2VtAqfhr\nFMBbqB9gizX4bVYbbjt38xflEBprYmXD7Wvj7Us7n1L5OdTNCmgW4R7MPRB6\nuTrp1cNCM6CYzWTRVhqqI2QAccX/6SembehBEOV2asXzH542gEmr6NF6KHjr\nzppiDxsfqtD0u/uW4vplRI2jjIoa6EncKk5Ra9YA/mRjAPrHHgsNc8LxUmu9\n4b3xZSyXG0oI+QsaGuMROG9stdTXB9kuYNmS9LaakcPlCHSqZ39VGnhNNseo\nsy7VKT3KY1bMfQ7g7qw5t9ITalsEvre0k2DDYhFTE3d9rUAOeOmvXCvCJ8va\n85hNUEBrW1rzdwSCCi9StbkpLqCAkCFCTHoLszNfNIEeIOuV2p0EoEJw2/38\no7usFsK+VE5msLzae9yLZI+d/ZRQxRQnDhtQLd3AvJRYcsWOIMFN6gYhhdZ4\nSiBQ9lYlvpeXBwugxfO+WsMfBoOhn55ChfG8CiOnemi5sOEwgvz+qFDMKh91\nCtlK6X1PV0NAvWbC/SG1cQMB+4gIj24eFM33YGKkWl40FMAgNQYUG9MxYOO2\nEG3k+HLOqJCuPvkq9ny3UAyLINMpwLKOBABUKUzA7zLfsK0hBGDJ6uUUuBxf\nwhpI\r\n=mKsH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkmNfhdYsb8OYt6N+eDT/pfFjPJL8ujX5bGxNB8mum4gIhALoyJfdnyh1nlq2lpjgF7ARNGJUaAU3bNvKRhy/TXBZ8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2624-beta_1540236911753_0.08451985877342527"},"_hasShrinkwrap":false},"6.1.2625":{"name":"meetup-web-components","version":"6.1.2625","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"acb04c6fe0b073491c8a56198251e04fadf84e24","_id":"meetup-web-components@6.1.2625","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AE2FBx2MI/4qDD8FYR4KzdGVh+1YoE6bteDxVgS3fua6gsCeHsUU+DaMo2iq1cAkYW5Sa3eRGQamFedBCTnR8w==","shasum":"2b5a6f38ee7e09726b49c96918f9e4cd9e38451a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2625.tgz","fileCount":612,"unpackedSize":7907295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzjHgCRA9TVsSAnZWagAAQDIP/2TMOYlf+0VgG3QTw404\nf/7F9Xc83NDuGlfDdnjAdLKm0yAIjSXQAgSrEFxHSik3DNRyYDrC32araw5i\nsbkCoOO5Ep3SyXpwTE7eYhFwkXCT7PvBYXV4CF3Tt2qHyF96Rwv+B9aJfDTN\n2UQ6aVTjHXIziGJ1ofCl4nPUJYQ/T1L4r6I3Fscntew2X5wn7a8rCbT0ae12\n2ibYu+TZ+xI18CLfyDUl0RO0OnyszqB62QBPZGOWsjBsUepitFMJk/ClRU6P\nH/4WMJchDEzUl54tFYNjYbKFWgJby8g3dy/Yxblsd9/x0MisC+OD+wEU4OAk\nyCrWni4pIdpEXGS8VuapnGiTVyjDgEiGUzagfPEGwLCkvJEJEhyrr/yLNy2k\nbXuMl4TZ0XwxYwYjp5fCYkgpdKuWUq9/LJc21LB92DZT9VdA/V/V9E+y/8RS\n3dFu4skR9nZlv0MQDEpeQ9SiXeaWXWE/4sEVVGbtpw4ICRQ3QEWEmfq7J/91\nx+EPauihP5FyYa/sdpvperuDKGtlJM1KnfycaXjAM0+Mcutluwebz5AuXhnq\npuuidWU7Kr3h86Ig893OO/qMpjO/bT9x0am29Znhb0Msh5cIa2alpQRX17Wm\nZ5bKyvVfuWoNwxhSl9q9O/B0sgIM1eG0Rom5yXtSN9FpJOewFkSyf8CkT8uv\nlEj7\r\n=GoDM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGt8zDzKQKx06vfeyd/hmF8CvRAtLULVA/0r6f2fntRzAiEAosnU1qBa7GfvGa6mUGsSlPEBYr9ycXE/n32VpxVAEqo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2625_1540239839425_0.6732588805184321"},"_hasShrinkwrap":false},"6.1.2626-beta":{"name":"meetup-web-components","version":"6.1.2626-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e6070977e236e50fbfab483f4d48f666276b531c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2626-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VQE0pDD/l6v5uKMN07BswqK6p4qqNmx4FPTiMyLw0tdEgMygdowZJcaeLXask5KYixTmxH/Eej0Gvxh80aEyKw==","shasum":"fa2428f20df30126db5fb2b20884fe38b1d3098c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2626-beta.tgz","fileCount":612,"unpackedSize":7908799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0HWUCRA9TVsSAnZWagAA9hkP+QC2F85it3owdI6nWbch\nlCVSI7gHqfeWeoZ7n/OOhvntmOPLamU6bVtfpN/Gx67v4kkol46ueERSKXoz\n0zjkos/2dshmSXyz8zD4Tva8aQFUNY/eKYi5ARj3iPaq7muisKcwqYDMLXtj\ngnIowHUIK6Pa1nQOvN33lVGg7uJe57VanzUS8mZdzJoq/K+SEEkJpx7Qd2cL\nJVugmdi6yeLIUcv+v4NycloSHd2Fb1euw743gBXSQ+Ia2QC3iabItB0X5zTW\nIP2pJQWpHeV5+2WJMzYK52M4g9COIXChN/tdFVNR6GDBosK5xwWpUdEXEl5W\nWRr1ayJwvFSDJ6dnL4T6RPlbOGcvbLxeiMz8s0TchwyL1ixmLYD4DbZ09OOC\nXWfojD1hrwYmCgcXblSMxqv7xSaWwAmICcUaG+Kcpyu+QkBwO30FUXbIHOus\nOkEUDOY0TVs0aVobpjwUBo4A+MBLMiKAiaqLyei97Z/bwWP2hqMm1e26Qefy\n/7hkTf9MVUQycFa1fT0HeOv3RfJNf/pNIRwp6p9xA4BPCoX2UN0QANtVYRJ/\n2sARdVP2hJbyi2kouui620iAAF+wUbpNxxYD1/PVdDyKYfjaUBzOIDzm/HRT\nTlpFnums7b3+vLAHbI/jSMVixgfbVmsB/wnjxuYcDKFKs9oUYK32C/C5lBtC\n8IKF\r\n=6TH2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSuumLw559m13lk3owo+TVL35hGvQlF3q3ggqCQIkJjgIhAJq39+BB8g8wTK39UJ8seiTm4sbwAtgKPZVUQRRUhGfM"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2626-beta_1540388243257_0.8736421861280284"},"_hasShrinkwrap":false},"6.1.2627-beta":{"name":"meetup-web-components","version":"6.1.2627-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c9abfe50ee2fecf83b7631578cf8e3083ea740ae","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2627-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-MJBpS9oKqgkeuD1VE/XhLeHBlujCfammqnC/3ZmwTAu+MbRs8B2NIj5/cuF+7ZIt2freFVCAQkOacf0/E6EUyw==","shasum":"ff359bad6b8841fe0dfb8d6ec2acf79d3446f4e5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2627-beta.tgz","fileCount":612,"unpackedSize":7908543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb018NCRA9TVsSAnZWagAAD1AQAIw0qmldXb5ZE57L8Gwf\nO8b1+P8qyf6MOnVF/U5ypl4HfyIDr9AH405p+WZ1Uz/dW+4mK6756/lW1M/6\n5Uz0mH/JvuZmxuz281Hm7atHzA9clkELwJs8gvHcsJxMkgXYgvmA238cuhGX\nL+IEvdM0mS5WMZIHq89I0jm9WJroGb5dqOllgOEwJ8SJzapqddC57HpUYdHO\nW4QHs3G5kwm4hCWPk3qmYq5KmxzFoFh8rNPyArQdgC+jHKq7DNZPWsgGbD2w\n13UaIASsxx5r+aI4fMdObomxC2RquINz5SDLTae0MbaKhEpswrb3N70rUSsE\nAC/ELW4vLK78UFcX7L2upt/Pijf03nasMMLx+P7zmpnQSxIpEuoezNtruIyG\nPiQhkx785QQq1Sg0/VUmFx3C/53j22AqMW/spT6RK32RG4qAt06mfrhAVs+m\nYm0kdB7STiMdOR5YtApjR3Aa63mL2ywt5sgharcd/+OnAzfGcM5azLbFEw4M\nv3eghX1B7yyP+xp8wnig/vkQuVlQqc1k5sqonXGRy1ITm63obZYfplPWZW6j\ndSoOQXz0JHgmYncsoYi/UFu3lN3Z8AvJyTkTjGn+oe40aOFkWljNTFrElRAz\nIwimFxz/HPL7dZxCg47OqoYADOD8HtTE5P44Mgba9+/TVbcZXZ4YmS9cZZFY\nI2Mu\r\n=+3Np\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyGeSdXCl8U2y2h83i6vtVI2sIy/D237sbGmPlTLck4QIhAI9roQbquWUZML+Tlj+rSSKkPbCSiK1m/mEhHJXoarD7"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2627-beta_1540579084183_0.5082552159852451"},"_hasShrinkwrap":false},"6.1.2628-beta":{"name":"meetup-web-components","version":"6.1.2628-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"121b860fdecce9a4536361ac0dcad3e96e673de9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2628-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YS5YcrFgAXUtpDMkCnp7cRBnnKi4Rmh0yJuE7GIKVoQhudqiwzxsLniro/GcMbhZM0VCMhgAkTff1pUsmRWIaA==","shasum":"733ca0e09800772466ced893e64a26a63e2cf42a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2628-beta.tgz","fileCount":612,"unpackedSize":7907776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb035jCRA9TVsSAnZWagAAWp8P/2JuJQnpEPW4BFjPDbAr\n6VUafv2gUJOtGKnUDyCwmZiJjPpKQY2W6lV+SbIVJLwBv+JHSXXzZNps43U8\nLC0keNcSJ9i4Df2zNz4dUYkXLB1vRdawor/iGsSaVHlpyQ/t7BrBYCXewubS\nULdLJCVqILui3R3/5K//19/CzVhNo6EmTnhb92Bwz2JsESK55f32KEGpGwZu\nFxmJI7pkUIGSzvrQTYn89NOJ98XquTWavTbSZU/ZQvZVcVbffo0Ps6SkcvwA\nxh4Psx16ZMhI1dEqkXhCgiv+IxLowrX9mT4HeyroUN63kopEel/FPjn1VZTI\nG9f17xdlaSDBwahwboiGUv5Xy34rLlACop8H8UjhImKj9GhxrdB35PiuACgf\n3WHrfqT7oZ2/VRtbV6CuMopUzXrxKQEOxwT9tRzcF+BOT/l30zsg4CN6wZgE\nnikUbS79ZVos9NwEkvY7MRLNFBXpw+z7IAMoY+2y+6pB2RFfRZbuXKJJulbC\n5+oAVtwB+4Vnxjq74qbRdAwGQxaAx6IBeOLABgN2W43MT7iG0xX5DKEn1Mkf\nwFV/MDNhstSuBoepQHqvYzLssukatwyl9KNpZJpek7DePJeCL+OnwHtDQ1Sl\nWs8tyZ0lSGWOaqU8qdOQAKZusLYkezWm2pCGOV6V1bVREL7kxtKqXa3xb0yi\nQLoZ\r\n=87RM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmaGwm5/npx1rj4qoRV8WPVi42lP5VwdvAj/WnVNZ3GwIhAO0RSD2SnIWiS+qlqruu46rJheB7wIAJhgXYWENaM2Xr"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2628-beta_1540587106559_0.2999561906207908"},"_hasShrinkwrap":false},"6.1.2629-beta":{"name":"meetup-web-components","version":"6.1.2629-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"73c4bd213bdd3ba15e56a4e4b1410ba91b0b98f6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2629-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Lg5T9L5rZ+ba95ZV5FMN9byoIIYAeQmgNLhi29t4gjUPMg04vBTTCnR+q/sEKLykrSoPTrRdSi3jf0U1lD1LdQ==","shasum":"880c066a992cb27db23067d51ecc10c7da520577","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2629-beta.tgz","fileCount":612,"unpackedSize":7907773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1xM6CRA9TVsSAnZWagAA3IIP/09NH2Dywr36QrcI53xV\n+YYDdmcFNd2Yr8/H+sM2psV/OzbsrxsNUesVvL99dYBzA7mH3rzBGQZtqJSL\njYs+mlb5lCtXFPwsh80jJdbjBdY9JSD80m1CGMJYEV17sqhBQnlp86SO2m2f\n21XQ3vQVYmCnDDlicxJkwKD3hlgMcEoBV3HodXt4jEDQMZnUkh3jE8E4dsoj\ncOZVHqOYpVV1T9Y7IqOqzWNbpctXkUAT+98nV/mANcOuUJV8M6gWF6Qn2Ugo\nfUaOd/XOqcxpC7M9Vyca1rUDlbwuJLo0gdcU+6siAbj848yla04hXz1WWQ7u\nJcZhn1rfpInO9b/x1LAhql3QXlXb9ueCs2pgcmlsjpdrFYknM8plkJCM3i4A\nAkodMqYHSMXcXvUJWZhc+FKGSz+e+P+d+Sg3UeydMFQOpDXWfZQNznGHpUnW\nLMAQ4R+Y99hjgPakKFHknBXUUl6h3GDvQ0/Bwy4RMaFhPx0xhbePihtRKjSI\nbhMx7k+0GJgP0sRhjwJEGvanYIaYrBzF7+VQ4aXQP7UQLtk+tdw5SVAjW/E2\nNdD8DvuD4924KRuC4AwlsgIeAR6aigElWniuu0QvHKhmnMMqBOCFYwZabTxd\nYV2QYShbf8SMovOmv9kONwOQTP/844swW2JaMgZJnSZeY5WQELkStxtGLD7f\nt/lj\r\n=B9zx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK/fKUtzd96+YLSlH4OTduzu8mx/YG2a/IWHlXf+r5twIhAIOcL8VvwVV49vVdT256sCTQ7I4UaGncnXzAzWN4KjRC"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2629-beta_1540821817764_0.8716487088869402"},"_hasShrinkwrap":false},"6.1.2630-beta":{"name":"meetup-web-components","version":"6.1.2630-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0353d55939f793d2eedbb344de2f379da312e357","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2630-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-SlrmkLci69n2HmlmsF20+30Dd7YLcxsHDwaYKC0iMRjwBmlW4S2/0J/ZHdfaqQB9qe6y9BLs/MOGcnUli+msEA==","shasum":"7b4bf1b9584cd5e7594625f92d6ed1c6d72facf4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2630-beta.tgz","fileCount":615,"unpackedSize":8083736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7EqaCRA9TVsSAnZWagAAaxUP/1/77ck2wwPlQWjhAo5D\nUSyiynApPkIJvTKHmyZFQcYDiOXOgzAagY0nXCYlC5Zx7009dgUgllAK3CmU\nW4aIgPW+ydewuQtaz1p2s2Q+rLImJcrosNAzJ2ZwYgnFySxwY0q/p3ifNV17\n5n2+RfDulzG3PpiweUtjxiQt5Zy408LlP7db1kAjUZnr0qheTI+AKn/PcC70\nYFHcCQ9d3FXHqdCFXUORbTyFCD/das4o6GjaPp8GqJkTb1yTXW+Ec/wG/uir\nCRLkXToMSHVBv2UtFR4iG+dFn/O67FcM9Xih0sqa+GCmjQWBoZE1FduBnShY\nzCpNZqB4MZXr5QjicX/QttnYx759CvnmstX0k2cm/GXgLGF9jc5oOj5hoolE\n3sWH4TS09HVWpRM0n5U5umQ4jikWjhz0AWbQyhRNRCi36L4erNDbSvdZE5zo\nQ2m6ms1MkK3dajAW/+lRDuuEg3hSyvcYjZ/jUrdNbCNeSOnEEcPgj85pmmFV\n6jw+TYZY/s4zYm84sdvODx/MIMy4ZYAFhYRJC0WIrvetJ2eZWuAt9Wq/JXDx\nUIpLt1bMkWtmEegwz8JW2sueeESPnR+he5dwuCM9rIYJP0PO9JFPZ72eYSpt\np57keYbJH7ULnuLKUZt1n/uh3izIyalzdSxCCmoooPKwuCN87tqUyIQBjPo0\n5PaV\r\n=9Wc/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF1xlYiYBt7atviXCUhwna+8IAms1RJTtoblS+ffP6PgAiBzfK2nDlIN1jh2tr020m+TEtNvUQVFSdWGhjZ8Qm1RPQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2630-beta_1542212249898_0.980247607941686"},"_hasShrinkwrap":false},"6.1.2631-beta":{"name":"meetup-web-components","version":"6.1.2631-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"300022ccef717efb78ddab97bcffed1fa1d36f35","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2631-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9ymDt/Y1F6wrpUcNjePNsjEHg3OaKezmyg2QbPKVcQe5EJ6C1NC2PIm/wREqK6LeEcK7Lz/YB4uygYPiHiGoSw==","shasum":"9999c0926843081b0c63e19c15c7ff191a1a3ecf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2631-beta.tgz","fileCount":612,"unpackedSize":7908400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb71WxCRA9TVsSAnZWagAAkRwP/0VdmuTxSS9qHavOD6aU\nSfBrW4pggyu7TQPD2FTqD6Y4LMU7T7bCAHEDoUZVzpHXdt2WdUDKXuva6hTi\nMSzhM7UtyBcVBsb7e5Cs3RsUhHw05gd680vZm0jhljgdbCtM4zdVjV5caHTj\nqDEg8oS2VIs+j3y5VJdju8a4tzDxSy6qL+FLKqp6cS745DAUvRdcGwaTrhcs\nxSx0OBlmlTwuvwwJbgmUWBFSZfWzo2/kMsT1TFsdVCeAYXsakgw1KYixSwM4\nuCTASHyhrb2IjXVEXvkaLEzF+MF5rNCpdr6XAJcVQmI+hlVASWcGGmFktUQd\nsYXpsyKyA7uhjXF1cKYzII0zqZ4u7YGPYIplJdLH/0ng1uTFkIo16x278gu3\nQ9WBUBZc1+ArlTJ1xHusTCOdOpPaTFJl+dZljNE7OxImbPT5LF5WV7K3gzZ0\nk5qQ5IL+uHKk9HHuDi6qyR14r3GudToreYIDBDmYa+pidWUn1wQQp90RrGg7\nv/SPpbmdDQ62OvMaxPoB96cfxZgz3GFxQeWYjDll5oh5JEG8edPEls83hNMs\njXjLf3mUNfkxDLrL80TCC8TLE8CephtOg/CPCGTfYSKv7PcnxA/aYPwu7FyP\naX3FxN51kEhVef+0fCzW9Py2pyn6bs4LJV+dhgJkKsoj99InV89u6Y3P75jA\n2Iu5\r\n=GQFF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDn228CUtCd0NBKN+zIsLi/YpJSN8wlwqbYJPvJCM6jIwIgKx2dn1rFyQ893wU11f0BrsHKnzto9eP5wRZqGI6x3Sk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2631-beta_1542411696347_0.9066332758345641"},"_hasShrinkwrap":false},"6.1.2632":{"name":"meetup-web-components","version":"6.1.2632","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"89d08bc6c346635f9a9d0dc42039fd0f046253bd","_id":"meetup-web-components@6.1.2632","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Icr6BmqDiu2/nJ4Xwk25jhGum0oYldFlwaUTwcXZqtKUZKssytIBhZzx2uK6g+xXYpbv+hgzPaXG8wFWzaqbog==","shasum":"674334237f23a4de19595d55fbd7c4ff865ce3fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2632.tgz","fileCount":612,"unpackedSize":7908395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8twxCRA9TVsSAnZWagAA5RcP/2MKuJD2JZ/Z0lJYbzLB\nCdinpvKUyLDnXN21W95Tg2QTa72geC6S7HzdaiPCoUuMNsc1rdDbkpf12i7y\nckfOKnJePuC16WC19L66ISfmdM4WvoPF//W8fJfqTBn6FTEkbeAwxi63RNry\nSa2axvgWw+pZPrdIVVDeeOA8fTsO2MT6/VcVT4wChmV/FAFBfLDr9INPBlqW\nBcsPO6CQHoUD0G8E3by51iPNtvqOYHZTu1oDNfva/QzI0Vr0+AYV/AKjUdrF\n7P9vjuV6IQcUhoPuCSjb7LyEwZC51zae80bCmxD9zW3Kngt+LGPH5JyJasmN\noIpNb+Sjs/mYu+HdJss6vNSZ6GmOojrzbwfCvEVIAIFH0F+zKm4GidbzlVif\n/ZA0pPAvbfafxnlIk1PFM5FLyAW3N2eNnFvhv+svdb2BkZbXThi9LtHOE0YK\nCy0vUJmshiWoA9X7KCI1wtNbWdILmlqvBqIsEIHE76n8lyAlP13np9nV2KWz\nXCqKOUv/MPskEd06WDZ/y/90e1mozk/zw2y73XZNlR/juFWgBsotILwJVfNd\nW1gNbOCIfyCZVOoZ+CIOSpK/IjOZtKETaqn8Oo2HEPt30Tu6eyg4UHA4fvaw\nfyhHmIMTcQKu0Fv+W13bRBroNatTAcuMAzj4ip6LHTUMmJHSMu9Dc41b5W4Q\nCik/\r\n=Clal\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBAA1jmXV+K2eULXvMkAiSGJ8u/2Vw7faW5Z1u1RbPMTAiEA6SGhpoW2vQ99kFyBH6zA8T2czTDrd+QVPaypVJSeeyM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2632_1542642736648_0.5720515897890011"},"_hasShrinkwrap":false},"6.1.2633-beta":{"name":"meetup-web-components","version":"6.1.2633-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a2171d1702e523f09288e565b006bd79d716a8c1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2633-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-filVgLtYXNVwq9MKu80WsROZD2uUizDmDoExwDd++zgmBYm/BISa0obXX1ssQltVZO61pOnQU7RfIjUvewWX1g==","shasum":"728b9bff647a50c8f82302ed11069bc9f9611da1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2633-beta.tgz","fileCount":612,"unpackedSize":7913396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9/IWCRA9TVsSAnZWagAAaLcP/1OtTFLOdhJcbnfzVznu\nZ/4JI2mrJ0Lqou8rqywEXwh2ZUVJKVLRFIaS0GnVhogWGzW5CEiR6KxWWC7x\nWnkFGruGlMBq1CxAMJ9C/ALMLt+NOcJ2Vgv/5ifj24mn2oKcud0W0MrrGJ5/\nyWK/9GdbWk5eab5kqRNN4Lo2L9ZDLMy1ucQbexd3+sYg7AJ9Ra1JpUji8CVp\nu4TQTwn8Cp41/asLDPPtME/t8o0GnbQrI6UCEMFwxP0plc0aiY3e0z1nE5Hu\nYwEyKB9W5n9R6Uzv0XKbj13ikZT76elc/GTGkGywWHkehSP0fgCJrOHg510m\ngo8LgCegSOFyAFkcPlZGXaxJ3aTSiLJKZfMdm/zguFFhjTZzyQYILgvVPS8N\nzU8ekGzaGh+nmFTrKw+IeSHx1L5DaV/99oof+FoK9qjtNXc8vp3RMbMAclNe\n8qWf1utaS81mL6Dy8r2OB0i332FDFISv7SN4Ic7AxkOvxgsVBWyDQ4Ve26qG\nB/ji7tNjWiKL0LN9TZQ0QHPFoPsIc67hVDo8CfoEmp4AgR+eBliYA35fTVAN\nSI74Ymaj11zS3OjrTQQZIWl3lr66ZxB3lGGl/QqAAj8IE5/Qp9GhuqycS1cT\n07wWkMEw3iUOvdFblBK6/6ex0ow27ATWUOx70ZaEw9N4ivC8zfelTrpELuX8\nbZYY\r\n=HUeC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGfKFmL9SG/1CFJr1xXUcmSVvoaFKCtlsOOsuMXG7rEXAiEAumacJe9WjJIRTQ60b89LWnL+5vfJk9sl38t7HSjgqqk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2633-beta_1542976021829_0.30578283122962313"},"_hasShrinkwrap":false},"6.1.2634-beta":{"name":"meetup-web-components","version":"6.1.2634-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"90dd96199861ec696abbe573a473c67a25db30dd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2634-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GF4KKQnL3xIRe983A65uGpc7JW6OFNY6iD1rUyon1/4MsbHga/7gRUWstxjqgyBna5nXKJldhKgX7HIs8ZPqaQ==","shasum":"7191eb6c7f1ab73aeee929896a61142d43b0de07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2634-beta.tgz","fileCount":612,"unpackedSize":7913224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9/KDCRA9TVsSAnZWagAANbwP/21rjD6agZQU0E4y1RwE\nromsUdP0dBxmCQPdmU1rQCSDqrFJoAr9RFDi/fb1bvrOLCIOa2yw8bEugIk/\nguctYZAwMjQCceAkW4k2MMAVAF9+CkPtc5ToT5vcLgUGzNGj43VfPyfx1X+8\ny6Sbm4wdSHoEnTUcI0enBNFK4bhu2iCoyW90EOyFtV7ayUbvCpt4+6NPoSCr\nvDa2/hxvCdB74Yl7fI3HEJO1JOOYZtpmE/8WzfdtMZVjb+tWFyWhby+M3C8n\nGIHimKlDYlk4qDDmQhN/I84sRXiIEhYBMFHys8f4aV7AAVJlwfDjvaAJ2Jr8\n+0HWe4FcEXI5DkW+QlVzt7i18XCBAh/F2bLFv1lutckWSwheIfFHc3f0PTgH\nrbxlH2V6IsTtFhramYGT0lEMdeUTo278wuzJhbRdKhDBZOrOX1GEvkL/rMYJ\niVBZSh6gUHXXsW8E9h9aS3wW8+kAx7sRWUUK5OI3EkBawgaZUjDbjlsn8No+\nRPsBtLdzlrH+NKsYtLWJJqOP5R3yKgQ9MFD8P6c2b//JTuI3gDnZTnynH1fX\nQ42CDAiccRhzVIpGpqEMvs1cCbumYi8IS/07aRM+Yh5/3OnlFkPF/Of0x6Q9\n6BnlV4rL+o1Hv5M+AsI6IS2CFRotl+Jz9pa908eVWED43kFcYDAM6OyeNXHm\nijEw\r\n=1gDr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICr63Ky/dgECRkbytq0/PlcdX1zpOe4GHKoHSGys/w/uAiEAvX9fmftqXMoYFYz52YV9qtdzbPXzToU/s+R0ODFUOPU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2634-beta_1542976130721_0.356429167490782"},"_hasShrinkwrap":false},"6.1.2635":{"name":"meetup-web-components","version":"6.1.2635","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"047bcc37bad28cc8addea8b5fe0c46b500cdcfb7","_id":"meetup-web-components@6.1.2635","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DJdacxPZxEyUTHFvR5GtXdkYSUJRuUfGWyRsyrh68Xle2ZBJN6ax6UL9z3eGw8ZpsyemMwUhLuQrnSRJt2Mbrw==","shasum":"30754bf971dea5a741b4505287557bda2f12d734","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2635.tgz","fileCount":612,"unpackedSize":7913219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9/eNCRA9TVsSAnZWagAABkMP/1o9yaYUiFsoMUWIcRrA\npUNks4w/6eeR5x/v8u2PSNoGinBGRnWzEzb9n7MFTI425XyCXx26zPc4w97n\n4dOP5Moh9VtYLMnQe1r73KAzZMW4JHih9IG7uCO4QVavWTg722rJ56N6qNvz\ny4NGewGofBpyVa4A6EsCDVXFmbbRnkIrz9B6TI+IYrJ5QdOB9kIGjHKNtOCm\nJeJPXKcxeePudEtpcAn9MKfTxrG5DVK8J+kd872lxwZUEO4hLjGlwVETjYgQ\nh4UJJyM01/EvDQGCXLyyH856lSrbDgV9LM/EQIW/KcRg/0Zl0/h9eUNntwdQ\nmfyslmG/N3zM4GgBm2trQ292MY4nU5qOMWfi3gCArVLL+E3XoCKuclaK9h3/\nOXJNeuBJ0NxuXCEplbAdlhV6Y4cmeL3HhxsZzoSPaDkrNKTmOMuI2Lt78dk3\nnVn6S045rOItRY1D6cX8T9AQTn3AqneN8OXXcugdpW7Q6wPNV1qh4FeAqTut\nZE7kjT+QYEP4vSpyl1rSTxT6tDjjoyG81f7KvvyCxMQwxi5IC8ccz76KTthV\nkATzalSyjLmziZ/5yOsV9JoWoGeim+RALPor3XSoYo0SgX8V6xAegeuCrNZb\njvT8nIMBWXZQf4XsgsKoROd/l1gyTknuU5rSgUbOTB78fNj/Uqp3ffDX3O51\nk6O+\r\n=bgT+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF+f4rODdQ2HqoE2DdRjAirXh8QPxtObnm99NQEmrCjQIhAK96m2u03D6v3zcSAd4/0rL+XZWyZEjqEKhrQH6Yqqjx"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2635_1542977420204_0.9053117975351688"},"_hasShrinkwrap":false},"6.1.2636-beta":{"name":"meetup-web-components","version":"6.1.2636-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"551228574546f5d93a533c9694f46a912909b20f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2636-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-QCnPsLgb25JB33SMD9JV2MiOdiuo2dsqfD0aGuKDP3zM0UMc8vN93MSBtsd297fjbuY19XPZoPsbtYFPuQWOOA==","shasum":"b777b5818e9c8902dd5ffdfaec8e3d17fdb28fab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2636-beta.tgz","fileCount":615,"unpackedSize":8089830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCrZQCRA9TVsSAnZWagAA+iQP/3cdCCLf3ixoAxuG9qRM\nQRouJTCpmEwH7zM/mrZ7di5yPjqDbIK7YCgF8qt5mqyAIe34O46Txg7qIUth\nydFCCR+oumBzFRpZjmtn/0skCaeDljXrRzH/YEDEFSyNd9NRXbbRwRFqi6JM\nlCCiOgzbRo1FFCqJm2c701SiUqWBo23f++oQiecbwcu6AD2Iaw41dO5LhX7R\n4pyfIMntS4Bk3p4XFgsKS51si6AtYJCKQ+tgHFnWPjA4b0eJmqYICJRPBerK\nx1eD51ym4b7PnquHpnowNpnLUEagOaXC+9aXbKqoJIIEIuaQZKkG/YPHXt1E\nuwV7Tu5YBLacstxDQd96fO/MBzC+UexwUxDf3cfsm0F3xk2M5uvVC4CMD+D5\nmfno+x5Smcmz1JVyRWTeSThJArfkWT/Ois6aIcBN91nkIzvT92W/v38OAifB\nR0ni7gKIYVJq4ud3DIOmUP6Z3Dfm1ilU4nv1NCGAiGoTlU9l9FiSixzYFSxq\nexorIWtFknxY3fK/zLJ2huYZ7w45871kYFqoQ/wusSEeAlPQPacwggrHnh1x\niGfDd3TCo6D7zD1R19WzKTaY433lw2k35Zho4UAKGfElE4DPmOOir95NdpCu\nRbGnKgN0HGerS4EBMXl6QXoyjh2QdjZZRVv5xdjjwq982eN2pCEaqmFD9LBR\nWDxP\r\n=aQ/W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsgmh7aztOUuJkVFdGsKtpOGUMTsdyeIclUfpy4YsNCgIhANlBuv8w0RhNPYYYFOZrBLp7bgYbC3I4g6xY2+ev1Wne"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2636-beta_1544205903157_0.5655408721539192"},"_hasShrinkwrap":false},"6.1.2637-beta":{"name":"meetup-web-components","version":"6.1.2637-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2ace51ffe04cd37c0550798d335d81ef5ae94261","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2637-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rWEQ5aryqy8WJAZjiORfsvwsKysERrl87vUNYmPoYrzckIDXZ1AVtIyH/gkhbu1gX9P9DnM+V+/2w/l+d80Auw==","shasum":"8fd6730094450ff01f46c9bbbc70cba0f164115b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2637-beta.tgz","fileCount":612,"unpackedSize":7913176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD+n/CRA9TVsSAnZWagAAAp4P/1en9wYa8QAlIIyYNpTj\nkbVwZiflpur4lgIP57Ow62aEfac93gqzBeJpLr+BfZr144WY9LTmIgvyq+sT\nXPPqYlPPB/optmbtUxxaxFG5gMKM6lvmv7V8lNUJXVSrdAY/IQdvwiukaW7D\nGRmGurP3ToCrLg/6mpRohWkPV3UDsz+FRd8ttapZHIaeaVuG1RzRBjiAn2Yb\nOT0uUZ3AQepG/NqhAyoOs2BcMD9i8vs1HrAxW0YU5AcsX1zC2gSPGivO6pI3\n0FT70NkT9ziOjlIYK51+y8ehlcYaq8R5nwhGEd2yE11GpmzkCMYaow6boiOF\nGfGfDWY1ve9w8EhaG8Tdhr6PWkXTIV3JFsdlp55QKQ2tZQGA5vL8tcgyA6q9\nu9RTPcL7bXMSegFYj31zG3cp9jRtFebhtaSLWsAKhyKJzOJKbNOFMVl0pPGQ\ntW7cA3ZUA2rPGLONCK3hC/uCGzSd/82UB97vWbWbHUM6bHDgv/URxTpL2AvI\nAlMXb6YrCSLnAzdw2iEZ4iuRNzJ2InQJzsj6r3m2jrbGlTdVLHb5wI8V8QDi\nHR9zScE19TgUe2eZ2+wN2W8iubDwyfch3XQeJ3G8Vx9dKTfwxopbNygwF+PN\ni5rECdwUju2r0b8aMjlZELz2dgMyVikiWSvjTjllfbQg/Ht5isrHv0/uvjeG\nL3aK\r\n=YlQQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/QRrLntOgBZeq0oZJiJtBR0xkEBqR7u8rdVOf5alFCAiAcuBrgV/GQoCuhkYXZyV2seD5u++MTStrfX/i47Ady/Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2637-beta_1544546814525_0.5187604706331626"},"_hasShrinkwrap":false},"6.1.2638-beta":{"name":"meetup-web-components","version":"6.1.2638-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9989028281c6fb2f1bd3bf55a548977a8af672e4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2638-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-T9DpXtxcCSxEquRFs4GQUmICj9MGhK9yMfdJx0jeCz9pKfoO2/apq7HssCGg47qitPAQ5rQSqC2THocaRjQIJg==","shasum":"a82b69da3122f9ee116244d7f796745256b6a7e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2638-beta.tgz","fileCount":612,"unpackedSize":7913781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD/KPCRA9TVsSAnZWagAAyHMP/1wt660kgWLE7t2rt0vI\ncoVa/vPJZ4tIrciYyafDR86iDGrGi7ETBRifWq6/IALascdG56+2DB1I5Nt2\nh0F+z18dWW03W1tSt2ey7uhIn4nEwsBPeTSZhGgUBXWzQAuqU0WheBgEE8TA\ndgZzbuRE04QikaIDUuY6HMIOSeW8FTuZ/aevrM7nfgSZ0/cI9zUipwYVr/r8\n2s9K1K6DB0GJvNpar5dGxTN1RVoPV94whrbdpCKnzj7aX/56jZU+mNbv5yTO\n1Wo61OrZxd4z0j5MDqjIiEy+5xq6AaxplGghKvcGwi8FwySwWt/XQXV5yh4x\n1ADGc0+Gc9XPLrbxTvr4675CuSydIT9roe9c4Z7vmU/SacNlMdYCQNc3Du8O\nRO8q0IR8Kyu8bzoCqbUxLUihpMiB+RJ4K57a0AEHuddT/T0u1tJdXt5E7jWW\n6H3mLKV4ZHC6mgOAFAyD/hRFnRwufGrbuW5Zjsnm1CwQVO7fvvllpwpwkx2Y\n/Jwo9as7tlf0jbTMBpUfLefnWGyB/1MN/a+OCpwIzhW031YV+/XX6dbPcKcg\neS9EMPAElVV/5qAKZVudHowGXVBxrYs5YukzKz/B3pxC5cBYdB23R4f/9UsP\ng8vmlOBQv1yzltm4+evvM6OeqE3ZjekB0DwDf56SJq6SAwozJQ8jiQyId6rs\n5SmD\r\n=GdgM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChdgAI4/VvCqYmYJGIZtPEIaj936/yIJ9083GVCJ+irQIhANaOAtNsBoh9IsafSMukj37bqpeuvmxjnvPq6r7E7ZCq"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2638-beta_1544549007072_0.18263026211657007"},"_hasShrinkwrap":false},"6.1.2639":{"name":"meetup-web-components","version":"6.1.2639","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.419","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fc27992903d19cbc4273853fa8f6c9bf408d3306","_id":"meetup-web-components@6.1.2639","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9lDbsGLPH2HeNefJwis8Tbvvruh1gDob/nyFf8BOS9CE0ERDbNnv7JnA7n8riCRHRGZF+E8m5I6/nNl1T+EJ+g==","shasum":"1b1c74f1554f51e2fb0591e23a28baed561d0d99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2639.tgz","fileCount":612,"unpackedSize":7913171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEDoKCRA9TVsSAnZWagAASgQQAJkcVCJalfYmgVimAJOO\nUgy6+/tIEobKvG0kOX2e3HH3SAdm84gK7QFgCqq7zz5l7QOxocJ0XCOjqQ/7\nchZAkGUn3YKj7jrGAszZK0HW5bNHFmfvOASIOuF7M4Wkv0wga9poOOrRLW7s\n/jscNP2eR2P+DXuL11T2ihP3cU+hj7X08d07hGlYMabHblNyfaH0yMKEFECm\nK3BH+beZfdHAa6Y8F/M0vH3JEg7739yRDsOvCizVMz+2Ko1jP0C+KFwePCTy\nUJGYpJLS43Yefa3pgNod6X+0Yz/lbBKz4mJPQE9YEjbDFFBzb3JlUthztRz8\nh38bRzm9LXyoOcb1o6tTEfjbocgxjr9FVDsqCVQK/CLl0M+BUc6A8r/CW6nG\nb59kuOPQWfVp8wX5xjoQdyuxMCa0SLjpUCRgn2gwr6/xIQ5icjdb9eno+vlw\nGQtPy1olfj/CzEKO69t75JPVLZZDEHusg3EHx+4004Nl99SSiSapVMGEjKrW\nq7ZviBEhFWGdvMs898J9505IgMGO3TPKd3rzWjzRpawFbTUGlaqHdUeiVxrR\nvw/T9pO5Eva93Rp/GTj8jqfgS+MZ9goMtT7VNlvdrwW/CGWHY9q68j9p8AAg\nTUJhKkMkLDjlMGHzvj3A6tBO+OQZZDIwGpwDX5wn6+1EffSFiysd3eJ6wFen\na8Mz\r\n=3Zsu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCrNTDqdKOhDBEQG1XFUGVwPv0M9o4c5jSAO3y/WuBMgIgKlKHEasK3JdnoNj2N2wEJMCvugfhh6YJWKQ6hgmNNMk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2639_1544567305806_0.4771633279913283"},"_hasShrinkwrap":false},"6.1.2640":{"name":"meetup-web-components","version":"6.1.2640","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"17.2.2710","mwp-config":"17.2.2710","mwp-i18n":"17.2.2710","mwp-router":"17.2.2710","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b59356a579ab42b99507b2ea40417639c7a78aa7","_id":"meetup-web-components@6.1.2640","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-eMC6C2oUSj4smWdUqlGUsqnpqxIjJvYLumdcg+ZBBZA5tm9JYm0+VocVIyy46hj8vaOQqxSSBqOm59oezyKM5w==","shasum":"148175d3cbed49952db48a45a03131fc818262a8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2640.tgz","fileCount":612,"unpackedSize":7913728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcED2fCRA9TVsSAnZWagAAU/AP/1TttGfwOeIrMiUNGFE7\n16yXevzVmyZqHRjBnMbGd9CLpN3hMEnBhDnWRkvBbn8c5ZO8G2ehkBBkmddU\n3OKygHvTecmQs26+JLRx/XhCt6slnXjb1jg9U2zs7NeFyqefIAiw2Qgi7+d/\nLXEn2byKKgttPJxwL7i9pp0gd5sEmXCUbJ2PhW7Nau5+SRc6xzG5eYygFdba\nFOB+9n/civY+7tUhVTbkmkZNYtiUjfjwpzVNtY+1a6nNLBG48t/zIf2Wmtgu\nsbF+aQnfX7zXZZEpAyxaxXTkUZ94Qh3cBkGP5ltjf8Py/zhGRV9xvZakvx8B\ntp9xheiPRWm1d5X0vK7oCpYoFOp135xLovgT2Hz7A0N84HHaBEEQ48aaTq6l\nfVRIEpP4gY7qOMjd4Tl7OJeGR99lspcRCyAnZiXzc/sws+ph85oLHKoolNIz\nJOVhY5/8HTvUbHwirgIzJ++8acvMK2ZpM+iBWvaeWzF5y/3vUKLeI3dhnPMv\nLjxBuu4CWiiERhyZqAwSFFHGRyPIzZNnQK5Szp1bGcJ7nQI8gQnffpo5PzKV\nGmiO///U+KeaDc+9M2D8Zx7fUyk/5VdC6uxrWiJ7HJlqtNNHEtTNqkmZq8y0\nYNohkNoCO3P5q+6zfTPNA4StJW3HRpXntFFVC8mv9LIcnaBnhgvN4S5nTLya\n23Pf\r\n=77PX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcES2MpdOlguDfD0BphQthubvPuDy/1xSJf3KPL1MBbAIgDLPbHVZTQdm3fIY/WFaa5FLZooSkTIAY4YvCh1G9ayU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2640_1544568222220_0.12867092204851094"},"_hasShrinkwrap":false},"6.1.2641-beta":{"name":"meetup-web-components","version":"6.1.2641-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3c2734795ecccc39014c41954cc602117a7663c0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2641-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-WUNmF1WmJQrxxBCcJDdFTwWoTlkXP3XwnZr/viGXHj4092oYHCB5u4GlZhY2pdUzQPC3Qzdn1Ipg5hPN6JSgRg==","shasum":"5936ab2e21b1b7b294216e7cfa5c6e26e56d621a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2641-beta.tgz","fileCount":612,"unpackedSize":7914431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGnNMCRA9TVsSAnZWagAAuicQAIOI9p2gGgU9REj9EkK5\nA4/g6Cqu2h/K8VR3ACfchwEI699wF1l/LKrWOrfXbFWrtFLE16SUcgdGuuIN\nvHZ0ibU0dJj6UtNCvIDSNU74sWQo82cyBRG8m48s+L8lThdP5ChT7drdE7eS\nHmnjgloGhy6UvtY8Mk+z/2BkxyyqO2t8mZL7BBaw2J7hBIswx+Q8B2RHdO2k\n+gu8psckn+Uf4sQhC+c5yG0B15OlzKX9MT7J0VyQ29YrqnRevTjRYgMCFrPE\nhRXPmnO9IpMDRSsONzJ3hPmjVw3aYhG/YqCOFKD20IbROz/esraJKK9QmURI\nGaQK9YvkuSnQsq8xVU6Qn+4Ft5tSBQCPf3fPTetfAEX/zR66HYRN4ISxxF1D\nQI9g9fE5ELogKJ/k9y91ol/Ks4/pCPyCbu8oZkuh+z1kQ7XNfQe4bpLEVhyV\nX/2qVDrqAb2KOjd6Q7wMDU+sKmUIohrH3YOWcrvCnAaJqgQJSZpG87Cd/+6S\nFCR5vsbxyOp6UtW0qE8H0uLN2RUISA2f05t5ZNGCCrw+4Vg3mvFt+iFFkETt\nAs3pmqEGNXc5xN+EYqqEXEl2KrgGup97FSIkz5UVOMMafohadzJLfgLIq/Ty\n8BpIVX8WMx2BvLelGGA23iRwTEPzicdJ6YZiosm7eoh/uq5ahw1O7hgFagZY\nVWH1\r\n=bxED\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzBJyng1ciIPSwYUP9Jbwc09+OfH8XISaUUzQmKOPS6AiEA5Pwvi2560Pt1i79hPJKlHFPRECXdA1AphzySA2Z6YwQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2641-beta_1545237323343_0.11935781765617359"},"_hasShrinkwrap":false},"6.1.2642":{"name":"meetup-web-components","version":"6.1.2642","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"29abe106a83cc23f44d6535cd7348758bb3315bf","_id":"meetup-web-components@6.1.2642","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tVfy54L3QjzbfKzCMwBDMhMEezpQwghdRvQiHXXjiFBwhz9LRwL/TyKQqRD7tREMmXg6w70JfK2h4EimG9QFoQ==","shasum":"edd9a4ceaebef8cb28658df9b03bc95de898882d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2642.tgz","fileCount":612,"unpackedSize":7914426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGpveCRA9TVsSAnZWagAAkL0P/Aigcux/+Iego7bzNy6s\nZ1yZ8YTnQ8KHiM1V0wFiP3xKj9Npus421jXhZ5IWpANK08aVZfXjdyD3ILwp\nT4Qqnw4YL1emOA+UZBaawXqnoaRrtiBDBj3ztHimLhUc9jjuOShAOoL+MX5B\nr9AtXgmvtj5VyznwIvzxcK4Gss++/JllrsAECKyLOivpoz7wanXFS7IAv9B5\nK0G9v0jZpWiPu5PzLN6857jQs9Bzl6y9QFM81KMM5O/BtETAjLzDlLsUproM\nnvVv4uKklN9T8NL78Suuv5zMUldWxXvYM9asbdR5QpeWwN9lgjjNCUQcPpwZ\nqZbnEsGmYJbO6e75qdXacKhGUoeMXRHtlbfnUd9VGlJ2yo2hkKKfPVtFe08+\nkI1uKZvhFO7TlSzF1BTEcibnMejPOJWegwOv87EmT2MQLViXoTW/l5bkikXq\nUOal0aDVQ/aukq+kVm6LfC0MylsAVwZsc/KZW7Q2vdHqSX69NLCfzc0wM5tL\n4d+AUPKAkvc/JZ/Crhuk8Vk0F0rxtZ7Gmj/kTiHwF8CoXMLs/arAv94YkI9A\nK78YC2pQ5T7eeSc8zvP0z1iT6enEnbUttRvwe070m1IRb6KlLpdzwPCiAD4V\neNrNzJeUnJw0RDHII53rNR7hwai/KnjsRdelFRJWEOaxpOR70dx6LCQJuHCU\nEA54\r\n=KfJA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZ5V6IWsnvGBAR8VVpGwD/HRcnuMbhhTt5f/+bd/PUiAIgMuXIGwbjzOHe0jcJnL453LBC7zEZocqDEUYqUBC1Qpo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2642_1545247709316_0.09499202114468619"},"_hasShrinkwrap":false},"6.1.2645-beta":{"name":"meetup-web-components","version":"6.1.2645-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.128-beta","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6dc9171c799132bd8ee364ce6324c6eb3ce783c5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2645-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Ny5XiB4U+iOztbXKb99aaySnvoPIs3zwhNd+qk+zAoxRCz0w6WvFrPBUKvAP6AWms8yd+BazxfOXg5dDr21i/w==","shasum":"5c2c1d42008274c8ed421706f6cc84bbe5a1f7f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2645-beta.tgz","fileCount":615,"unpackedSize":8092033,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPi5ACRA9TVsSAnZWagAAybIQAI0fK6Z0kGGS3RvGEI2T\nQ7ncSPnmRdsHDNmRLOAvd7qXy5uJfcvgHxP2Ej0wRXdRXNfBg0z0FiqXoJ9J\ng/XyxjvS6NT+6U80aHt71BnjfMNvksmkqAPL3PxovmLuMvYnNnPRBjd2FWKw\nAm6cV77cbtfuc8o4JfbW8LPv3B8qNs1eHZIk7fRc66/TykcQQXj4Do4WogAq\nyUHiqOHbhzs9NW0JEgkrHTIlDJzECBoYr2mayX/XcDtRLHEkMMlpE24W/ssv\njpgrxU7eOQnNc5Rz+mkSKl1OTZh+HolmwKbGt+3v0tU2sv+NTeLXrDlm2FIs\n+uGajUd5JickHdnm+k6f6rn7zgwmB8Eyz+y0jL5wot8o50NtpLbEQuys/QfJ\nqqHqN+0PobL2JlOoDMonyLQNE8BD4yIbnllUcR5xWMaVm/QT+8IHUdC4AWTE\nwi/9/I3RPxydc/mRPK98f3doWfLyUxGhW/Re89LodXCqfOGQiPPcwjCUshdF\nKeddfk7zqh+IwZj+Zcb4JQdT0laY7U9wNQ+DBUaJ5A9OBc8QBTQwiGUUI0+9\nIqzfMc3RQn0rLWfGVBfsntX1iz7vKKV/2YVNuBe71nEHTL86PFNDbBXlBv3W\nhJw57eVKBRZObIgM5oc52dCJC+dY1qwo0PU2YfBoDMkUgQJH7Xz6KxTu0WFS\nadYN\r\n=I2FG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDrQpyrYFrhyT2/Dt8U13J6Gkz7Bnbgeu1L4TT8QnZMgIgOVb4Zts9yxXK05DM+712JKRVedvI07fO//zfk+jzgfM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2645-beta_1547578943894_0.9636972452697572"},"_hasShrinkwrap":false},"6.1.2651":{"name":"meetup-web-components","version":"6.1.2651","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c3084bc1c012c10c1f8a34d6f2b8d9a6b0b963f1","_id":"meetup-web-components@6.1.2651","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lWMpQ8rJvjBg0i/kTSBQ7Y7XVZa6HdqhP2gRU7G1vuwFf2nvg67Y/0qEbOiH3ecv01mt+pYZqSiefufHKbsrjg==","shasum":"56dff1996b6ef25315bcd1cd6901de59ecf8a32c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2651.tgz","fileCount":615,"unpackedSize":8092320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgtRwCRA9TVsSAnZWagAAdV0P/0ojikO5u/r8UzCzSrhE\njVIdPSY7vJtdytzIRtnyfKZ2FVV2D/b17u0TEBXBwyaj94T9f6uY7rypSpKk\nE7PIA8jahIh8eX7ja5SCreXObp8EJmFY0Qqr0d7fvhGNn8KszWoM+QTr7eJk\nzCQ9vEPaBFkzXF78JNDcpjqbSuIF17rbfbCDlpuMpZw1z0uxevWlXvw9fE47\np+n59x/E8VBSblbcVBvTEGcoFLdwiF/sCmCGLJL2EaQsJePGSOzIsFYBDf73\naWzGfCBGJ7cHj/ZkkOrFK+9hRgGl5EKF4cvfWxalbIMjFlEjMPjI/oI79GLI\n2mBR3l/L8pEIIQIZPYFrlOPZN9d/tKKrsEkJ8s02CPgZJUczIEdKcNWlm6PE\na+bE0iyqH/LfByNgSqhuop5G4Qw7QsutHmxEea6BQOmop4SVZICNnaQ3SdSp\nHGnwo1f+e1v3TPy/cyZgoC/8iKRS8oEEgWxnDt154KvU2EHqsD8HB1r503k2\nF58BjWamOmcH9l7LLoEQwWKTKsDJXSqYFwvrKj3YBI8CnSoYNdCYjWsXQYVS\nj3QoXE0Qup6+SXVt25uLsQ8UFxC5EYks0TXgf6fiHj1FtshBq5cCCQRkBAzE\nuuVghfEzAyXO8G+nCLFgYdX/rCNyuObmDbHL39Zt86UTw9kDS8Xc5la1D5NE\nbCoD\r\n=xBty\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDcKlAYQM8S/xEdleA7cOeMLhIqciW9MPyvBI+ysaewIAiEA3dkTrqzso6UzgGao+Z1IYHnxfuq1Q37R+OsSfr8Phn0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2651_1552077935616_0.7376745311224131"},"_hasShrinkwrap":false},"6.1.2":{"name":"meetup-web-components","version":"6.1.2","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"a4dd5c8beffeada082996b27ac6c6ef6183ea269","_id":"meetup-web-components@6.1.2","_npmVersion":"6.4.1","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-N9C4NxewtRlOsOzoKMkbGvzM/49hwgmCVoahMZe2A0ccaNten7NuR0ce/EHvRN1EGqONP0/bOCVIeaN7SCFzsw==","shasum":"27e0cb21f525c992dbf0e4ee52743ac4552622e6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2.tgz","fileCount":615,"unpackedSize":8092258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgtblCRA9TVsSAnZWagAA4DoP/3IpGA9YiHcbowH15Wll\nXCOgq30J0YDfYcpSTHyqQImNvt2JWfvCTHhaO6LNwMF31Gm8S5oRnLuDIdIV\ndS3afTWKtwBqE8TEFdyPcJN82tz2yQOjOuI414v3fjoQ/MwAOnC6MvJXUlYw\n6RGL7hA/PUtNc+eUWzgocIZrjPFaxvhO319hEjpxTftDKtOcpuZv5JpZOvmj\nXLSGe7+4BWJ6jjFCZ0Zxy4qfDUfFDHjCIyjwJjkFjsAcWwocMyg11OyKSLBH\nGohJuIBJvJkGo1IMQewCp+5lNzWCbcCObRmTVVcr4Yec383bGaBKCzZ2Pjdr\nFD0KIbkGywcXLth7vRvMkPbLPLzgnbeqNd4XIjQBt9Vw+d0CQQ49MuHIAHaD\nrOS1n3jS7MdEfwm9k2iAjjNN01pJpsSAYJHQTlf4VB4ga/A6SOgDwvFqVfxk\nI3ijFmf1Wr0wmuq0wBVtPwEoyy11BJIHleLL4yv/U8KrY4UmWKAyEBCYvtEA\nYvgzq530665GKXJhB+JADo585vzFMMrv5PHCNisvDlpxAhn/MK9cP4XQDx75\nUXJZt81eQHcx/lSXzazPSbhEqUApzqnQhl658W5FsIOHdwXFGtVfAsJkED7S\noY6EHYYygxlm19NIAB4TqUN7rQilq3XH1pON/Rfv1+hBDbZmNFfyNROod35f\nI0At\r\n=qQOC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxTejY6VmuaKPPH89j5iGjSOWyaBTQrFMnoayRk0V1OQIhAI4ENjBg5J+V8HPZKq9wQlUKaAkTeyZq4+ZeRUuCZma+"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2_1552078564992_0.5220900940267905"},"_hasShrinkwrap":false},"6.1.3-beta":{"name":"meetup-web-components","version":"6.1.3-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"6bd554b95f68d4f76ad616a9ae5bf6de85e0cd2a","_id":"meetup-web-components@6.1.3-beta","_npmVersion":"6.4.1","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-eA1kd19U4iPd2DIvwzg0wp8Pa1Favdblmt/Fs/urRZSNR7j9pjtiI4Ow4Ayv5ZMDOs77JW/WPGBF6nVET74aiA==","shasum":"d8e2e625aae42b0accc146321d33b7fa591db8e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.3-beta.tgz","fileCount":615,"unpackedSize":8093045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcguWiCRA9TVsSAnZWagAA524P/2efjhfXskwXSgtiFwq4\n2V0tonW65FAQ11P37KIiOzevKDLmj4O2rOzdXga2GXRJWQAgWFKYVvfr5qHP\nVsbx1U36dQ9ijiUDfTXL5XffWe4uX7zzOTYOPekfY/GGqJaF/vUdAcmDsFVR\nDaCakBaWxCtDkcfleLIU2DfGYZUbD9LxAs++PsKImB9wMVR6wgMZI6R/wQ02\npgrUUfYovW28dLlru9/+BkCJCS6jJLJCjHMzV3WfWUPKZQ1rpr3NWZ4lUFOX\nhWmM/HnjAq57chgEL6+BSqyct5MFpk2z1IE4O9Qcy1SrUcaKskDNmyGtB9FG\nQLeNPfKi+zcJDYXr5bvumzzpgMcj0k/kRbuWkivs1q667MAjGn5pxJDOjOuH\n67pKK/KX7ZYM/8kd3/7vDNA3FUSnGJ7OzpM5X4ldgqFD4FI4i02dITdEtLgi\nAo0uW/V4CPuF76YsgGIawrp2pJzJfr8UiQ32KIkkbT8t/ecNGe6Um869HQbQ\nof8RuVp6eia96EAIL+Wpckfv8GBc/fd9Cw5vNpmQVUSbZDJ0VbwEJnmaE/U0\nSxqDzDD++LUrG+X3MZY77MSbKEyiIHG3wI/ER/z4BThtNmWRQVvPClGOawSV\nI0v+oRzXRg0C1nNNoUNJMpINSB2W6ZnyeaG0NCCjpkccr3WbfxsWcji9arGf\nsEc0\r\n=RfZF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoGFGwpC8LcaqmJ/hFkeC3Z6E7ofnkbcz/QuyemVGVwwIgdOE+hOoEOvNczYjRR3KQh528VYUOJWqNusvzQVAUSAI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.3-beta_1552082337038_0.15958159492335655"},"_hasShrinkwrap":false},"6.1.4-beta":{"name":"meetup-web-components","version":"6.1.4-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"5494fe94478aaaf751e6c3cdc3dab66fbc10f02c","_id":"meetup-web-components@6.1.4-beta","_npmVersion":"6.4.1","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-n0QrRgCTjN+hyXpWveJVwA0/y4CnXBEC8PFxSt9tOttGZTUFRsbSycF9RoLSUOSsk/uzsJUgzT1Ky1nV80WzDQ==","shasum":"56da7f2758ecd822313fb6433a9b8aae66bbce7d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.4-beta.tgz","fileCount":615,"unpackedSize":8093045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcguXbCRA9TVsSAnZWagAA8KwP/3lk60s9LmoYcyNkReFb\nzAX+3NiSqp3S+9reuN4bk4/DbIEaPbLNAD6TY28TW9/Lsv+FRv7sZt4b0Uvl\nq4rFY6xusVBP9GUn05QpL0GzYTK73291JQUvK+MCFzFl3K8I5HMBD5O19s/d\nDdHXvljSBJnGw4adoqxCuw9W86Ni/aKeuVmR/G3Ib4Nmx0WyJDTamOkb8eXW\n/WoOeEa7vVLT9GXr/8bH6cxndypD5wYZcJ+QelAqmxHZQQh9BDaojSQOAxCt\nXqYHB9Qri1rqMyFN9K998QWSx5Vo33pA+dyIJJQ0qqOHBA4JxsnqhNNMF5l5\nUQaoOWZnvuB2TRXH9betnkmIahc1eO1U38yDH9ZpsOK87RttQ2ESzQxwzFAR\nKhV/JlOJnzZ10f+7cMS9X2TNklObvBGtQTwzhABQDsjCppDqdx7NvIuK+FN0\nTdrBD5Hr5eH5Wklp73ybgGnBbNfI6zVVVXqXX/5KCIw7ibLLQ9t+2amxlhdV\nTtktLnN+GrK+Byu/NuI7P8Xw9sflZnEd+rRl87ZEZIJ+Cy9+Ph4ar5ZymO4F\nrhvrTp+fu7lpHa1KXFygAxl/pU0Jh9MZSbfZicqP7OHjH9CDGIq6Ok3bVi/D\n9ufklc8tU2gyLT+wQcJCOj1ERa7TMjTq1G2oUxOKk0HXzo/aLpxRYw963Yje\nlMWV\r\n=MGQ0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/zrFHqqZ3/Z/s2mfn5yODPpJyqlU3LzJ6V0l912odPAiBbFn8FTakb9dvRsDmIaiVKNvdnvEmHXJYK0XTq8yw2Iw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.4-beta_1552082394628_0.7071944730861688"},"_hasShrinkwrap":false},"6.1.2653-beta":{"name":"meetup-web-components","version":"6.1.2653-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ac326a880021d12cf54b124835f279aa9d65f596","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2653-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-LQL7WakozCOYTPn4oecATu1WZPE6GDHvwJrb5XNdxK5Ho2NfTDuacfpRRPPHAp3jCUrq4ghMywDkCjjX3PBF+g==","shasum":"b9bfeea78017de77c83fb7b049f12c3cd44f7363","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2653-beta.tgz","fileCount":421,"unpackedSize":2313364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgumICRA9TVsSAnZWagAAH48QAJ9BY9H+6MVtDZoEpzda\n/6DxeEh2Qgj01fncH58NtB9EvCdQ8+UU9E0FmgTOfuF/6LwBRe2NosHYZjy+\n+ow2zK8c0W5vHlBsw0X/ckbpGSExNfCEaIoVyiFYNZweWnj4PqdR4SIP9+eX\nMhjxOoz4QcFFU2CT7BjOIgB/cST0Jsxxg5oad7vt/ZEnNzWo6cT4CbORh+8L\nfI+9fojM60yClQ36+7Z614p+2n5WF1ggsXP4OYigPgIk1ndKNR4BPVMkeY9m\ngQesVLMS/lio/0txHPxY5O6lueZTzzFGdrnIqWR5SZgWjzW1gvKLta/1WZtY\nWGnsFnH/9BqgOei0RSRYLIWQu7lgLXJ2+RRs7m+jHY6IqsOnrwOh7Yqz7i+4\nvqe3BuX1z5jSm9au2VjZD6W8oRuwl2WtG6busSU4TTT3PvjwVnTZL0bbBpnk\nkzKyFCUlv5jDEUBqhCivAYyiTC8v6OitkbDDktwfFq8B0srNYGtmApnaBbsg\nOUQGKLc8etxShxZsBoo9g8Z5wif8jWtZeRkfDaGkyKtNlMa5kp281uq8WNoA\ni9jpahoyW9C7RBaiZshsor/+BXWH5zrU8TfOJXoapx3VJsJNMIWAzPEJ+WXo\noqHxkm6AYbxpIPGYtJMHuOU6CM3nQH9eDPMxEDXLasJeZrq9YuYAL+1OuPg4\nCHFl\r\n=y+Fq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX1lCt5rjKxgQaaxuKCyEqS8hwkcnli8aHjUiJ7d/1fwIhAJFqpaCdFj1ueTndnY4oXgQAYE0FUvIm7UhkNLy2lbwS"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2653-beta_1552083335555_0.3639437362649769"},"_hasShrinkwrap":false},"6.1.2654-beta":{"name":"meetup-web-components","version":"6.1.2654-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"36c109d59a7d146879d7f2c5cbbb271c18c63e20","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2654-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-3kDYu8HxQmmuY+MyCHwa+7xVVaDQediSXkzS7tKqy7yBmnKTNB2R8rYX1/c1IB/YY++dFK0ZvOSCGstECuf6gQ==","shasum":"84074317ab406398ee541367e78f29be8dfde96a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2654-beta.tgz","fileCount":421,"unpackedSize":2313418,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgutyCRA9TVsSAnZWagAACmIQAJC8Os9VTMF2/YvntH2c\nmOZ7uHUv+knptAt9mfbWPu50A6DctIO7j/PWEOcw6Ghh2wZob1TcHVD4eF5h\n5RTEMIyqhygB5kz7IIc4N4AQTr9V1kR3hkhCdOV0l59TRvNj5X6OY/4csr+h\nJVI093B+26aTmL2GrzXRaBr18ZYhMFyiv93zJ/CqdvA8jJdqaNDJ9szzqsiN\nBHw/YVk4vKUQ1JVWHWgRyf2Nhf/MpORGLa80fY1obiCFjJ83s+Bt+kYGoPEF\nf4Yl7TB/Q7IIZixCK6Xpx+az+Gene7rcRMnhMwsL6xoh37eFcxY1XlBlZ6qn\nu+IoAtmyOORnkiUwX9+to2rqc2gNS8h2m9MAn53mbdpVvEVSzQbJTG5GNteS\npHmZX/phXNJoBscruRjZ8wKOIWsNSrND86RwkPVEcyAbjpWoGqLbimtMUDZr\nsGhVK6DQQf8DTZpey4xwaGRf9t9kxu0vm7npBAmOcejpxP6o/6jPtcqAEkge\nIsQOPetTzXTRBOmgrzVjXXBe6+Q6ANQCbe7GcAuwL8Ayyo/3YSAsFpgC9sz4\nm8BMMCni4bF5OTz/jg0k+J7PFUHZm63ogjOoPVwTBZeDZWkSqyAnCE7tLCe0\nR7AU6+koB+8gCcJ/6IQc2me11CmN2Z2o/HD3FIpSzKdTlBW7lTXudvA1alLp\nGMa1\r\n=jUUH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVgUR5iFggbi99rRbSMH1NuzGVog0OHDOU7ksrkAA+dAiEAgXWLDHb/XYLMIZdJz8ZGGfh50f9frgB/uSmyeHm4l6w="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2654-beta_1552083825502_0.9336977106468927"},"_hasShrinkwrap":false},"6.1.2656-beta":{"name":"meetup-web-components","version":"6.1.2656-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"dd9b1894205b060c4c0419415a0a3ded80e6d651","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2656-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bH1E57Mpt2H7IEO+YUusgmONuMpKFNLQVgpyZsczpXY9wBetXlFHfgBh/In+QBbO/6QeemHbzXV1C+PQsqS7jw==","shasum":"e5772b88b8d7571756fb8d6606c26530221f3d90","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2656-beta.tgz","fileCount":421,"unpackedSize":2313419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciA+3CRA9TVsSAnZWagAA1M4P/ju/Rd5OSQ9kO//JH6Uv\n2/LBCZINWzT/i54rD5bPDJuu8ICAj6vjBLtMgp0kLEfHbzaDQ9GbBJSdNYuj\nelSLu3WbrECNgyje1E/QGMVQdOCLiHbBi9x1pAxVXxIdolyyyHLIMBHx1ecL\n8fAjm0B19jdAxkyeXmr8XPho4pSCMfpP5i/v3IBdPakwNILKellbS8qULOpe\nBUVpCt0x811ux+wl1r44bLPZFHUz/EvBkXstEruYvjT6mPA6aziON5exAVn8\nOSx9BJZfQS4MWszkN5VH9z6ZflrVzum1CaCwJNMkPXAjLAg5Xa73SNQIgVcL\ni6Zi7K7LRaGafTsxLOqqzbC/1/VymuwKDIpTngeVOeZ5hFuopoO6hKDhVg3g\n8VLlAlhxk1lqypNVLEqRsgwhJLMqgvhie8Nx+lFEd6yk4zg7XZJB2AkbEiZz\ny9NVJAhC4x1M+ZYAFSpoDQjco+Dre3es3AcDsAdT3ZC7w4IUNfKlHhPxIHxt\nMjl5OUlyDH++inwzqEgPraaKiUhpL6E96C4EjAXtU/hSOzEvjL7hKn+7x0lo\nwIm7Y76OYNrtQsuESEX14MCszq0VXfecFESE7oMyAE1Tva31p+ZkX331PMqB\nBmAaTqR9FPq3A799N/sIfrV+ecrcUe8SsjvbeVRbqHnWo1dAjan2/lFAqrQv\nLpOX\r\n=RsGp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEFunr3wwMuPiMv5eUTJwrqk7wNPumkFuQwRSou/JRxBAiAnZfNidGbjvVGFumh/8prYg7/U1+SdXqM73EzlFbAhqw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2656-beta_1552420790531_0.37432160802129655"},"_hasShrinkwrap":false},"6.1.2657-beta":{"name":"meetup-web-components","version":"6.1.2657-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"51918faeadc048c09753071b3b0b0961cd21bbde","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2657-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ibR1nwH+RaCP7cmVpdUFI6nH3IThJVDrKuwGZEAJq2NEIucHHV4m7leHW7Y2BM/K5UY3WYWmBlc9uAPavQMiJA==","shasum":"b222946d260809c2c9c33dbbed1b96bdc7ca6b6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2657-beta.tgz","fileCount":421,"unpackedSize":2313419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciBECCRA9TVsSAnZWagAAQzEP/AzhM7hGxAKi7uWsgODL\nKB2wpo0dGpbNECiiIqFW5dVTzzYXJyGeg8rjiPSVfo6P7it9erDnL2a8g6FB\n9CJghZvHg+KinZ/TdkWr9pxK1suwbDJ3RUef30/dp7XNZBr8WESyqdf9FexR\nscLY6URodZiaAhVPWPgSnZVwETlxr8HDraqZz25v8we+qV1V7mHQobD3Pzq2\n9lPY07kOwJTovy7FNr3Vlutf+tynCckbD89tDj+o1uVXArLp9EXhnflpHg29\n0L8UgCe7ndpLpAck9fjr7A+Tnkm1Puu2phCM8qcDFR6gOrqTIo/oxi7rNqbm\nvum+385YAfVZkf2ZcGlXqzIgjrKhNtOhLFdHHeiuCh2qG1XNWmxdWC9CKzl0\nwD6/XeUYll9ztHfVkeNSOh7JsQBGQAmTVOc3ut7XkF/PmnlFZhgCCiRQKo6n\nxY7cJm3sAGm9ysemWekwgBjQIylsQLDIAummhEQuOCfrhKrhVtrD5OOM3Ndh\nUKqtsMprACGi+4DW6kE4Tu0qiO4HDmHdFwvOcliIRjTneROrADvdTbI15P19\nZdTW91em09skzsHeXlfopNoY9w54PcotoX4y7iH8XfXfYKNbfMG2rM8apDqZ\nOwdt2/74qWxHNM3Fh2iFN1JxcnEpRrdlTV5fdseCbgPi27aFM6N2Ml/tDN73\nb5kt\r\n=HfYC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjoa+ezL2guQ66rcjx5xQhAuZ4705DNOV5xy9GggiRfgIgB5NWeOIuxNu2njYlhWQgNTPpNabgQOLWMXRR8XaI2ZU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2657-beta_1552421121628_0.6131710133295434"},"_hasShrinkwrap":false},"6.1.2658-beta":{"name":"meetup-web-components","version":"6.1.2658-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"87d34ef303a493f4d9600b9e7db9d2dd977f9471","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2658-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fMLOEQmwq4089OQ97jTBE7k/5HY90HQ6p2tJt6zQAkF7//oNliwhF3zBJ5HdVjVPv2jFZmx7ayTJM72CUZVUQA==","shasum":"f7ec08e9df29306165dd49ba14b532c885849b59","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2658-beta.tgz","fileCount":421,"unpackedSize":2313427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciBTvCRA9TVsSAnZWagAAT+IP/ij7Ji4gP0jrlvgOY3Ab\n7zG2Xggc7vcsufJ1BQNqPl1J+HT3X9jxFf6i5Qr+wyPdMvOM9W29k+KG4vCP\nJw0uWckJrsTnLJDvZb82AVbRJq/yGwazYaybi6B4ZvbJ2U0JSQcsFndJo5W7\nYRoXjeX9NSBEarpdZC44TOv9lhsJmycLzlGjKg1vjV4S0gsISfDMCq0yAQ8s\nYteYmkagjxFRsdNLVjIPXSn76uwUNVcKc83M1gGCVKCNXSnxJj5hq2UU15W5\n/SJ+aTubXe42eYlf58HM/02zYQfmtgDsKmKU2KWe7CuWdFl6x2BmnxpVxG4J\nl/l/RR0hPfhIAjainXig3qvlWIGY8yo+VFvBaKH8Mq6bo7vtg7BBPp937PzJ\nZCzxaoEvDMJBZxWDgAozIAiZdm3gS0FsxGWwiglV3h5cLGnYCDE9DyjZtrHj\n8aM8iaaolWwjQfBN7FcFeHTOpZZWoE2GrKaKJ9gz2ULAiDuWUZyfRqZ7lqJa\ndnmd9mMqq8ciPWDMPKasvKQUquBeuRUBXNyto/vROYt6zZWW6AUmA6MzhsvF\ncoTCHs9kMNoSFdW2A8D6OdL8NPGrRhWo7Jr49eFGAE04NI1CGEGocX+vIEVT\nU9fH/Tsj5VLM95xPQZPZ5tQQJAO5PQXphpImCj9oEvHl7t1iAKfaRTHR7P/x\n1jDP\r\n=oACX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+fSxnTt0EE0UCm0MJx1vn1s9lwzvy7k5a1qscXfDr+AIgJ3ZVGImD/piufPYLESh2xfp4tcPUcEpRptFcXcX/ka4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2658-beta_1552422126124_0.07357228366626734"},"_hasShrinkwrap":false},"6.1.2660-beta":{"name":"meetup-web-components","version":"6.1.2660-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c57adc8685abfaa3cf80a315708fb13e574616d9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2660-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-p0OYaxToLtHER7sxsENdzgQ8WOqVvw2PAeR/RlFiao9CpnIDGKHh3Kmk9apWunWD8EJ4Fs40zll+n1eD5MMBGg==","shasum":"ac4ffc16d56d2b66c73f397a14fa21e10dd80467","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2660-beta.tgz","fileCount":421,"unpackedSize":2313347,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciBbdCRA9TVsSAnZWagAAHrIP/2tiavkevlT0RXubdJMh\nCd1mZGFExnnn1+0geVNMOPZ67MPIJvGyxbu8Z385PzYsDSD81nnb2//IFp4L\neCNW1jKsjsCZX648RswsQlCqfNv4YHtD9TckGoZh5darelbkhBuA01KO6Wf8\ns9UCjxr3VzR54wPoERSX0fS+MoHUBsdA1m+YrAV4eyp6WjuistE8K8RZFI+1\nqFJkBySa1PdWDDs/2yVVR3KSB6gVpEFTQBbZ6rEoE3QWD790M/Crlx8zuiHY\nvogSuGivO1xDEthD5A1mBLncyfZ3XWl/fOoZd3N7NN6ixS7DBkM0IwCMvNYx\nebBSvGl6/FVAU9Ud/TVHGIRd+ndFHkBIoeucOdRQBk3tI/WMPcRQsVQh3Qgf\nyNk3D+xOApGWv4tvbbm0gtxa6LH633/iPjYoPNVMOWM8tHCoDIsJPFE9Jt1X\nNzCZ4tLBmDptbEsUctr60vea04g0s/gtZsiOlNN6+ZTA6fE1S55BECVh02XW\nYyy9zwkDNalY1O0MW3iicN7BZZfVY1K0eyB4J5DFi4i4bIicTx1M8ofcLH6w\nYF1Bf4tv80AwhZopeZsgB5A0sA8qruNlisb1d/82TuZ4WcAsDTjndhh95CZc\nkUc/7tGqi9QOOYZCJN1ezEMx7B1DSbZSQdQFMzy5VlzYAFwNbi8qB5EzUhSl\nbZvh\r\n=hRGW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN6n9NFoCHNnnx+ThsSkUlF9u7dZJ2Az6PmdtvvMaGmQIgS8PDZ48ef1bIwJVPbiUnE8hroy/42u0oySrIZlYB3Qg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2660-beta_1552422621063_0.14893069351170451"},"_hasShrinkwrap":false},"6.1.2661-beta":{"name":"meetup-web-components","version":"6.1.2661-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c65bee1853d2599270764e83bdb4b09ada5553db","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2661-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-VznNgP8fcthV/cebVMLIxHdA1aiUIParGKw317Hu266hRAjf1FH5omnB7PMU10Zwe4Cup04lvcdL0IEI86dFMg==","shasum":"48e98f06bc5d74acc6871e85d168a685be05de06","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2661-beta.tgz","fileCount":421,"unpackedSize":2313347,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciBfaCRA9TVsSAnZWagAAkLQP/22FtX0Fw/Pvmes/5YD6\nnXxvtI0wqOhFYcaNR1lO/ax5o9Rv62QI20+F0w33dtjZOvWQN53NovBu/od0\nuXl6I0YV17kVkSLuZLLvqCDsUbnCkuBO5Y0K6ZUbT/2LAATalKqp84zzKnOT\nOyzkV0NeLq7TDsFruJ45jMNB5gRyIBc8DE8rUInn0SyXfkKpCyqc26S323fz\n8RAWq+5j6mDyrG1wjYDTK8/78QsNGU+i7h/80JUFkKDpSiVN20kUyE+EMdKd\nHv1jmRtguN32BEeCdtv7BWXByUFOLRfosbGoKkkmyHP6bzO9RlafuiRcxy+1\nQ+4Tk1f0TENwHNiHeCPTre1/Y21ZUYkTjhc6NC+ChaP+qYuu75Q3pmj2of2/\nE/VyswJLs8oWqCVw50pORIQcORIG4iroEmwPw4xL8IMRbwgBa/CUcLBuLnZj\n5l/6s6CjoTt2j6XQWo/wi5VcJ2qv51YLc1+89ZdflPE3wimxhnH7R6ZYRzj+\nf+9HPoSdKGL84Ursrouo1VPCE18d8giV7aq8wGguO4iFq/EmFq7jKk0sv5JH\nQT2oi+bMkUSxAt6PuDZtacdwjiea+JAePjrjFdG/Y8IKdujHMs8o74wjFgGP\nIjXK/3k50tUQ6OVSpNdNA6QtQTi/i5rOblo50NzhYopccJFXXPsUPX9Cof3t\n24wo\r\n=Ujfg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5aSMzAiGMAzOinpbiaswEGsc0DSUvHPyxKuyyNt8eFAIhAPuOm+/l9bkrh/n/4eZMf0OeqtIc75wLVCDFYz1s7817"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2661-beta_1552422873624_0.18948041746379607"},"_hasShrinkwrap":false},"6.1.2662-beta":{"name":"meetup-web-components","version":"6.1.2662-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0eb55a5e5369a40111c0a234993bd79f92c0d53f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2662-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5P6TJXTQZEBscIIQRNq7YVuBUGUO1uh2TisAv/o+/RZLJAE/PVdwFUgqNjk6lYrqw+OWuURUIF/I6uGEqx/iAQ==","shasum":"e2c560b43b3ed5725e5e08fef4ba553e4abf2157","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2662-beta.tgz","fileCount":421,"unpackedSize":2313366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciBlwCRA9TVsSAnZWagAAM8cP/2wGG55+hmAmpqdKnsVT\nlzgxBOUAwnpPdbXh5kfOFlN5NzING7StvXv4GTVfr2e0M5UPPgfWxoTZuypq\n96AEXzl5+HDB7U7DUKtMqg6ZjhGmQkqTsgfewBRgx6rjKhiOSNl8ay7oDKQ+\nna5L4NJo9DPOOB6EG5aV1Uy5HQS5xmv/Soj7GmmOPO7ze5yXpoxJoMKqLe5D\n5vsqeHXUhhTezbYd0HyV1CRtYhFa3vUf0Mbk0y/PlyPTd8Pi8iIoOKg5cvUe\nqLZc8DYyEZhlJooUq1EDcjmzIhngc1tHplNZAJ0B4eLVoBkZ9styb2VPuPH5\nNIm0I/P5y+bjRssN1+ASBOqPkys3v63RKeMK/ORM18/n63/0ON79gLRqnLaB\ncoBCHW0ziU/T6UCrkAN6O3jQ20LMdqkdKoB6pBnlgRWTIaY6MV2qPO636xdo\nNDbi//3veitGU8/YWiSE0OlRkQYrcdFQWIm3GSxYa1nntVGqMe4cRO1lvaTI\nmbJr19HaYyt8sfTrVb+VPcPdvfWmH3avXBsOGEhBTroU/34qGuUw+kn0yftB\nIPHvf0DFmbD42AVx4wEVdEfWM+BpXG+MGi3LnHSTzPt8GAf0Kxr2raIT5HIu\nfoR08qpbmDZxT1kN9JkU9rmjoUEkfdyncrbGn1UEKc9H1yqgPKXLutmnKXv7\n0vTr\r\n=mod0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSTH1IuX1799znp2mbDKFxEsP2mPbHU835BW9ZOyXflgIhAKaK8yf/ES435oD3x+9KakGJ/UbtHu79wPWSO8QqMzRy"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2662-beta_1552423279653_0.9265472196673359"},"_hasShrinkwrap":false},"6.1.2664-beta":{"name":"meetup-web-components","version":"6.1.2664-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cd6d93f098157dc432099ac006d0d445f898c112","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2664-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-KDAtlmAlQwoGwJOFAMKBBsinZCL+NWEU2OoZM3V3pXZEeoWBklZ9R3UW4nrYROIK50OvrxJTBgMENieQYvRUkg==","shasum":"c78e0e5efdef644ac3d863b86c44ea9908ff85d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2664-beta.tgz","fileCount":421,"unpackedSize":2313439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciB9YCRA9TVsSAnZWagAAgPEP/3OKPP1sZgU5V+KWvzGC\nKvkiWJtKG+rhf1bsYVNFXxXyFThjRfPSSTDpVee1hzq+Q8Xjtu2QDMDNwQ9/\ncb8w8JOprRfoLN7SvciWIIP3OH47SwuqR5i6Vhv/qSfMJlVLMtXtjurErBzU\nWLqnIHbygajJTv2OgylV0aHo02dzesdKBdeMpFurAHrdqfj06/BVAKYbXdr2\npaH/B0F8XzT6y3B5zNzWQXuj6q6otxPRhYWCcpkjDRE3yUU6Fu+wQeE8heLC\nQ5Q5bVz1i3DS1TcGNtGmEk3b+TM3aegBIAYGs9SVDpjr4iTbJKIo7OcCVnYI\nbPqyNlbz/qImV+Mc7YRSOuXlI5iflKp4S3VYniLjgTlgjo+C/ws9qlVoi1sm\nWmw66bIzt8qZcWPwmLHe5PdivUXol/gItGg74Y/E+4D9g55Dr/h3ZzpjeQ7U\nzh13cTQAYlIawWAhEBLmwnhMzlwNo3WdbRLBL19tL54Hg2qvs4+ZyOnZgDu+\nM0NaVazQAIj6cHXiP73lUoOnwzJgB5KFN8neXYYjpe5Vss4G4gtMMxOKJh8n\nQJxQcNC4vo4zv660bsJsPgb2xFsXBvb5kLyv1gik/gTHPWpNNxPckO9GMRXY\n2fcUkx4jVRkaRXpjSq2COrkQHq1wRvqhJDksIQkPNotdWbVppL2Ll7rXzg7V\nEJdj\r\n=eDhF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcWcQGeo/pXrceDh4JvSD5o8RF6afvdxoPwX3qzfBz3QIgDI+slJbpiiLohvc96UEkzMu08rbiYzCX9VLZaPtTCwo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2664-beta_1552424791734_0.3638652831373912"},"_hasShrinkwrap":false},"6.1.2665-beta":{"name":"meetup-web-components","version":"6.1.2665-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a63e6f576e4844757a0e06a6fcb54366317846ca","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2665-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+fTU8g32NZm3ilpRNY9pnkwQpIYiHKNVyR9SSpv2jLZEtA3dhgh7y+ljGZgq9G3nUUqc/U/ZFCZRkoa+mivJTg==","shasum":"50bf0bfe04e1c5ff5bf93b079b8f03bb0b935001","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2665-beta.tgz","fileCount":421,"unpackedSize":2313404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCKYCRA9TVsSAnZWagAARIgP/2UXiXZGOFhKraY1CE2/\n9LbQmNCxhvXu6uMtJuuSM/fMkapLeryUXcKG3z+zUtlZCMgdXcoOX2vtyE42\npLs0MwvjGk4MuEUVJfITDvbs7n4CGkGo9wkavZ1Lx0u45BT7Y3gIfx/Vrcn3\npWm0rOPox4UY98iZu6raNshdzLdZ7+a9qLghDvSLad90gH4vvuVtbqBcEuHn\nbQQOBnrCMnLD3n2QFyQMOX8ZqxVmLQD5YNftiUBb4KtyzTcGgfPRzcE9GX9b\nEEimxih9BxxwSer5BEeDmD7DJdRNsgB+sLxL8iuyOHZUbi03MSbmxYLehnpP\n6yIcRDIXtlf0N7WvE6lJOVJ9TLt6mpQsN+0HRZUxV8X/FiGMBMlgFWh/xBza\nQasb/RKoMU7TAiLxEeX6UdR2nB7z+DbUP9QgmL6OlalHv67p++yiaZYoTGH1\niY/4yUorGDMVRNmcKlblUIHKErdWK189J8kRTBUAsBYRROwqYvM+1NlUiZmU\nsI65Q5stogn3rq0x24eGoshbZNmagfy2HcLtBsvJc65Ij/Zfi0USGSYopHnX\nbkooQbXFsmQCDPVkd0E25WM0jb+DAiRJmtR852pDhyGeKh/JFcNEkOofgj2T\nWJ//YCvpqBBVOVHYzP8cXu7HRuOI/a3i7Ju3bVrzd72b9XISshm1GaaCj4VS\nRmHS\r\n=Eodd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf19KdHr5bIBzskvUi5xzoUCyS60znEPuRvITmEAfE/wIhAMaS7t7MkQ1cyPM3BWEXTTzI/noD2ij3V2JNAf5oneGW"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2665-beta_1552425623470_0.9995601667830152"},"_hasShrinkwrap":false},"6.1.2666-beta":{"name":"meetup-web-components","version":"6.1.2666-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"484f23a517ac3e6c60d5b01887ea276661507f9c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2666-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-sq+MYTSL4vhhQ9urc74RQ4ATt+ySbGCJ6IGRDpwB6orbOejkDW/CcgbDc12eDErWBAZYRKbiOR9vgzCKToRIrQ==","shasum":"b1a26a5c1dff4a811f8c3b77c49be09256cd86f6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2666-beta.tgz","fileCount":421,"unpackedSize":2313442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCOECRA9TVsSAnZWagAAA28P/AleEIU3E9ZyMBoXx5lM\n6LzGJ6ySarOu7jLPUMUwqB+1qYDPpCToYww9XFp8Uproaay+FwF53eP8Z8ja\nhSVfHyhVE60k9DqtqJHhJLeQt+EzGvuOONJt3b8tJsckRwRCZELJ4sZ+Uo6K\no8IomYg8RCci8uRTCUuxOdvjBbvLnZBtFdDR9qD65h68rYhWtnW61Fg57ATB\nGY/yrHtwK4rN7QH2IRu9KC6ckB4xzoK8SoT8PU62ARBvOI7ZWtZrX+zQkE0f\nsvVuHa+Vwgx5c1G5LM4wSusWjkJXjRK2gEMCQ5y5Z1kvdj+Xr8zpzdbmkly2\ngNcx5+d+/si5I8L7h1HEKVLG4DAdjvzkAwQNYIme6DErJvk9RmdMxWR6O4Ox\ni5CD1Rf1KHkNKrMLmBkPGDGMg6CJ9O6xH7FAp4rcUj+RZd+6MoLitppoSm1G\njDW4unFcJqzQO0u6qah4FwM1K55m2NlameVvRlhWRiofltUethEhuuveBNYd\n+eF2dB/f1NZD2iFiQpowXZGwgyFbOUNkZerKba9sl+qWczhYciUWchVX7LhE\nwf7abVidgOhSfVyfg6BQo2hfqT++4OSX35x9+qqZmHZ82YBN9OXpVq8uOYtb\nQeJrjqpWChnXOQmtMHF7ruqZScPB1onxEArbvjxxB/+qIF9UcPuvpwoNIWRu\ncXcs\r\n=Lph/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWsPyi5a5WLTuvCvkFJSGAkBxDFNOpWMe/1crxVjmahAiEAgwc+0Ck4RjbpVAshPE1RU1kWeKaUT1kmZrLIKWm1mAA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2666-beta_1552425859262_0.11264025160293545"},"_hasShrinkwrap":false},"6.1.2667-beta":{"name":"meetup-web-components","version":"6.1.2667-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"52417f05009bcc0782d22dd8f1163250fc23bc18","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2667-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2P57jUhzwHp6ae/A7xq8DeHPttYgK7OrxM8bjBVeCQXU9xXjn7DJmle8bM9fV4bdRfQRd8s9brFwdseHoZPiCQ==","shasum":"3332120016ceebe836a0dcddb2e99c428c3cec81","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2667-beta.tgz","fileCount":421,"unpackedSize":2313442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCS1CRA9TVsSAnZWagAAX7sQAJ/VGXGQZUoDloQt+pGz\nTLjPzH9fU+e27HwT/Dy+ktVqbrSxYia2GbJuELyOcajV1/U13EhsL3YR8ltR\n1IIPvuhni++HfUpNqdSASs7HdXToP3usctNpiht+PFCFxkPOC2TiDLJtw1qr\nmngk1k8rpoqy5e22p44iLF5Dl31SL+KdLLbOGu9tIJ1cedfDTbjJeC2jXb5S\nW0VJXlyn8YRM5CxggO9SyhCQkyWdF/Gx5+R8nLOCfbIAQ1//o/iYE8xQsiEc\n5vS+AvWc/jWZ7G8c4zPY0SRhyPIwsXecv0iXulxGYCbLe0o6eUQtSBGx9Xvv\n/0kHcWayFzvmE9VHqN/FXL0f7RxzOuycvGVS0yCvtp+Gw71IDqLVaOq7CRDD\nLXMoPGisyRJ0uJFaoTgCI7kpNKoIh52EAuLTrrcs0CwuupW5j0Uc1OTSnjUe\nXx0OJuIs9IYG/zFGP9soapgABsLEUy8Js9Yz+hJLV05MkFz4LUxCLPMCIQQY\nxPbY/ROeqHbwujKISKsthqfpuHDeVEkrrz8dp6dIIqOFRqpSEFhTBGaZ51fd\nuy27uElpj+4oXfxVeMTcUVLFIy/MfmHIEO9ydRFKDUOaxpWwMVlRsPlDFqZG\nf0lHH1Dqz7cFwiHiUdTTN1Yh1mwtWcd2F0NC9RCzh6p6pMZDL7cuC8mOe16C\nyATZ\r\n=bPvJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs810YABGnVYfEeDKaQ2/r8oc/Unnv9ceWOIQ0cFvGvQIgYC8PobGnAj9TA8vQzbtTrCDZqSBjsCHTwFU7hVNxOog="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2667-beta_1552426165023_0.5989944319526839"},"_hasShrinkwrap":false},"6.1.2668":{"name":"meetup-web-components","version":"6.1.2668","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f5bdd292b02b48f17d4cd7af749bab3b0b3402b7","_id":"meetup-web-components@6.1.2668","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1aGpwPX7tBdqYBe8Q9a0WiiQYt5d4+iJYebQgBJw9z838wonUlBD36IB5KuBqBxtRfvqNykME6AD/F4jkJssBw==","shasum":"b57f3235e4ef7a25028dbea48fbd7a7859b75c12","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2668.tgz","fileCount":461,"unpackedSize":7139310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCa6CRA9TVsSAnZWagAAN8gP/32aG/lH/+55noMYWxrZ\nM7x9o6SiUnZomi6jPUs03yMdlRUH/v+62FHiK59WkYiFM3uloUBQ+gW6WNOg\nume8sDroOHbAJ8tR4pLLo+GwmowWLsg+gha9E5pNbzWkjMwtMJaCiLaGHNTb\naujJSmx46Pj7IVlcBGDC4bcLfnLcyvaN9ZjV4d8oRtz78AU9clijIxsvnhu/\noBdh6VZBru4Cxa2bZceWY9x8mbRJVUr0zZDYsA2uJoMUfv4R0Ue7EdLt5E1+\n/HnnFSUWBCSnEehAVIimT2USAEUVYoNH5myjv2F7sEW+EWVQdZSQlaoDOVQG\nK+A7YO/MEk4cBsfI8KUPy7kxiPTpMVlzWxGQZcwJ9lEm1PkIMQAuLp6/rkTH\nekEvApCRXR2+KI53LtDZU7sY+DcN5QSNSer7IzzkQp3ylDgzjfErQbJK5mvL\nqhaEMEWNDDY+ZnS3GyFDSQOe7DuM674nmmhOMrFmsrEl3khaKTxHbnLvGmRQ\n10oqkhiyYA0yzxgTJRV6W/otcojz4Sgo4eltAzoGECkOLQZlRRsBy/G10zZg\nfVSemF0bsGYamzY6nd1C16s57lI22ugRzHuFj+VmyHuL5OPARja36q2LWO1m\nuxuRu/KSAit3BIRY1+00ENFo/WRCLvoIsapc/j3lflYalF2/iNi8Gh8xYbf+\n45Bw\r\n=MkSP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCC59zvnvS/2G8A5rBqnCI8lOrJhjzhyzTnfHAaU5x5mQIgcbn74w2RWt/Ljv65qtJe3enNcQXB+Q66blodNxO4geY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2668_1552426681514_0.3619747317415254"},"_hasShrinkwrap":false},"6.1.2669-beta":{"name":"meetup-web-components","version":"6.1.2669-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a586f1b1387d3bd84321de88d8b1f9ce502b717c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2669-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6vKSR++U4K/ZD33wHgRHS+soKDEPto88OTUqmizZmakzk5OwQ/ktRCEcoJoo4GAcWebqkxefE5GN7ZPbDUcThA==","shasum":"a8a641ea5e20a0bdc577ea06dbefbf7e5a195683","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2669-beta.tgz","fileCount":421,"unpackedSize":2313468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCfSCRA9TVsSAnZWagAADpoP/37p4Fxe3y3fsit9KOQt\nmGogAUKx0cG54ojDrupMXcuCPfjiHS6GCVmg9n1/XK8l8iD+lUprCgaH49pM\n7WnxG+G+pD+uw4vAAqWCBS3jEALOTt9yo/4sNp5vA6b/Ep0D6Fexk+8ht0ko\nTr9CQwnCCAoyR3RIszzFnzyG/JtPp/IR4YFabp4OdpIMlZGXqMMhckDMrly6\n6UzZK+oJ6MfPgYtvAsdlzDU7rhyq4Gk4ipsS+pK7jvIRvDKFz1+lNDnVnLrC\nKN+ghxoa66OoxpT9N8pBRdw2sJTUGmAu/li1OVwuMl3RIshPsVTly8gbrmbn\n1vvCao7PIfFAG+DUjk/Jei88SNIrTwWJf+ce96FZ2LNek5UZjZE/YTo4aed7\nK/gKIBlOAEt/yjuuQ5PUHhiKH6tpP0VZ52dmAiJmgAjMnHv/yBlzOt0gtjbb\ny9khWGoDszxje6VUeOAJrBT1NrpU5j8q5PcUS2ujB4bU0Z0BsLZfsf2YIyfO\nlQGNYpqQxxjq1wYRCtf9BjQHGeMQ4DjHosQNT2dBbI89DfV08j2lWvu5BU6+\nOXveKmAK2D/EbJfvsjx8gIDM3eqYr5gH8Cjd1mtgl0uOt798HSo7Q2dyeqn3\nxiAoa0SyWTqOAHwkXEpE008QaD/vdq7wL4zJhiQxqCgBGSWoKKgklFkPe5zk\nDaoa\r\n=WBQs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcOF24hkLJ3PFwv/QDzmf4qc2kwN8zcEF172I6dHQuEwIgN5bXxDsj2JOkLAg4megOBQPgWJn/Txno4T94UB8EquE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2669-beta_1552426961268_0.5262555660262156"},"_hasShrinkwrap":false},"6.1.2670-beta":{"name":"meetup-web-components","version":"6.1.2670-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"877e4d26126bfc90b32aea03cae8adb3fe8f35dd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2670-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dSBJvo1DRc9QwdDgalXAKwP2ct1OD5nWOYklgkCwKc3u72vSi4jX20s3J+JFexOwUPCDMK04zTW7CCk8vwwl/A==","shasum":"4d8fe2af2b4b5bfac0181fddce1c86ad3f3fb806","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2670-beta.tgz","fileCount":421,"unpackedSize":2313487,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCnSCRA9TVsSAnZWagAA6zgP+gKXd0WSE5uuYWYs4VYn\nA59a2Tsu1894V8nv/ZvaDT26XZAD5IcCVSGmb20Dis2KNMOMmckOgaAqJcwk\nJjt4GwUy1NqHx3iOVDJzH3jwvHlUDMT+1BMiD3vqscwAkE/PkqVwro4ZunkZ\nbyCbXe3NnW0uKSVSiJTHFDbfgskpS/kwHCCJoaB89NEvls8KS1yQ//y2cLsS\nUNf915wb9djDAJuvE8qAjWIRZCcFSSKpmAnhbvz0iImrt8/PqPghoOmBfAkQ\nTKFCyqwedOEJwQaHTycYzzkU/EE8YCPn7RLN/KwAejmNx3LbMGNN5Q4aBLpx\nJqceRH5B7xQsfkJOj1caIGjY6oqvWVhn6H8SePv7bqvePd2ihqWogZ11Ul7O\n99uqNYonnlF+ctJ1i6eTAEmJXHRlfRzgGbrrascgqFs+UD4BIIT8/+SBfJGm\nxLP8cXZljVvSw6fqlPb5Y1Wt4fuceGKiMBRFqgPxAUOm0VmlupXvOA/i2YJO\n4AgZXTKAee1bulwUTArl//DZYupMQlU5z6htuLztpal8zpXFVULkBVM7dL9b\nYVRCzdmL37jH98YnJlRKQLDRMKFoNBInMTbWeukP/K2/NwEGmOZCX4vAjfC3\nnKmpI6gxEwTiRL9IeXYP6JB71MbRC5fhyUgAW4jv8JcikeilQJQdGMQXIur8\nxykF\r\n=3Fdd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLykgT6LyW1elHFHgsbMcSvIGEznwV+fNPstQgkMsTrwIgMzCNiG4Totdii/oeAJC9WD1y6Sa3sAO4NXwe3H6k/xQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2670-beta_1552427473730_0.8803598068195182"},"_hasShrinkwrap":false},"6.1.2671-beta":{"name":"meetup-web-components","version":"6.1.2671-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2836a30c3d9774e0e69b28ff36ddfc4090675f72","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2671-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-t7VxxN43/9Koe5x/xNq2uWpfNBwW4i4AwGAr5iuopVc16BlQy+CtRuv7NnO+RV58MAag+jPjt57wqPtKAGf2iQ==","shasum":"1a53d07c501a26364d9fe7d2337b4858c034c4f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2671-beta.tgz","fileCount":421,"unpackedSize":2313514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCwhCRA9TVsSAnZWagAAl5QP/RL61fx/vOKuabssob+L\nVuXGYjU/Hr2B7EPM9rsTGSJpUdk0zmGEoIU/VTrJcuGnZdwUa6O6l/bUn1Cu\nLuUAYVmb3CHKFpJCMruLjdGKGI2VSz939A5pJJxomtcO9y9AIHb9v9W9tvLG\ntPryy1No/wmUcdTJeJEbiPC0/DY0n0/xwx27hkiY76JlDF4EvUz6dR9S4j7O\n2BXAWJsSaJxQ3ifxnd6DzdkuGkdseC8k+sn32gzjEC1tFZoQJzGoyZ5+QjXU\nZoyEX/WbYy5YK1oU15LZu4Y5FBJVRXPL3NNEgwxqRg8izDm5wEb4vSTGf5qn\npF3MpszvnCw62a9MG4EyZjEtEC3X6GFpeYA3cAjSXU1SBAfQJ4H92pMYLNeR\nIKoojPpSekPWiQSw6D/456UsqVNtgl+IySW+98gQ9z74P9DBhD6DkEHJDB03\nzh/pMH2SGZ5wSCpOX6jHewfYC74QYwlrM0Zro4340Vi+K4A/O2/54LR/SYiw\njiGxwqIYF3KN10JOHLW1/Q/ybqgrKAzUgVpqlluYx8jhoOLBhBt7bc6dPep5\nrTmyG5Nk9FPtCaQ7PLsYzhk4rvsGaN2Kb3YOOwMMgJtvO5oIt8KLbIQ+gSt/\n49qksUnv3kucje5f9WVHUuyugAWR2aQeWL86Wf+/79dqeN7hm/5utlb0Y98/\ng4Vv\r\n=dBlc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7gAO/9X2UIyjy7OHOGdXLPHwGf5mYtHKmgDXM/rdJ0QIgBDV7STC7WPDuec9C8gvURr6bVLhf+nKXIXV9TCVd4uo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2671-beta_1552428064803_0.09248928978729531"},"_hasShrinkwrap":false},"6.1.2672-beta":{"name":"meetup-web-components","version":"6.1.2672-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3f08e06d3c090920cf2f5944902701bf04db9cbd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2672-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xlHH0HkITrishVckUFb8q1kvmtwfQafozW5faVRO1uAtppph2dC4Py0ghRBuAzrlHv7XNrSIUsOw3sJPgS+xsA==","shasum":"48a308ad76e49d1848e82a68d3c8f9e07df56719","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2672-beta.tgz","fileCount":421,"unpackedSize":2313475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciCz3CRA9TVsSAnZWagAA334QAKKMdKANi4d2l2QPNILV\nJ5Bj/HaMb9RM6iRcEIQ31aBctmb8WbZpeaYHR0PaFCceRNS70xXq90ZlDpDI\nZ+f0qxgtehfn2I1pa2L+EjknjOiwDNkanlAjapYfn/VYfQiw422eJMYD9p+1\nFFFvhf7B7jCV8XmSRxGSF33VPAh99Pa3oGZh3mhgB4YfaxNU4Oe6S8wVtQ4a\nRWpk0nceD7FFkMrUOWdk+sDRBcrpoM8kW4ywXNbCrPqTYixxrsVfT+ZvTojl\nBgGjQ9+zl7p8gkOnzD4S91YrL5EQ6NlhTpm+eFD5BEmuQlVGu9kHpSenleLY\n8dz2JkLik5r2t0cKwoTjn8CtmUwSLpNHt2SQVLmieLePGlNu3A1cyjiyyNox\nbjKFROh5aUldP+TcHNx3lJchPZy9BJjWZ/cbaarRk+ozPDP4mDDv9F+1Uy7k\nNXgIA89ZrRCO2c9lA40cHLCF6Bw63XUOieb9lMmyEMIIPJOUpHRQJhvgrGNr\nRIjSKvx/kjY9wWF/Hz00281fO31N4vhsGKR73HahFuoFSJqZTgatn+BHZzlw\nv67NY5DRMbxuo7uVzSST5exafZ8JLUnoU+xYL6Fygm851oxehmLz5IQLm7tH\n3a0a6iACSTXuXgt3S+li1//CFbELZm4fs1kyxHwTvNcJ6Qrz+oY4q/0Mq36C\nN+HK\r\n=LRTW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9fXFy5oRCVOJhGbmblpobE8KS43ntR6QHBLGhmhQE2wIgIqeKWMCau2Rn166nKUuCDAokn6MB9HuaKZn3RcfMRZs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2672-beta_1552428278268_0.14797401494152385"},"_hasShrinkwrap":false},"6.1.2673-beta":{"name":"meetup-web-components","version":"6.1.2673-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d7b91d9e412defd025bee69f16889e5b43105b2e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2673-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FEx9oJIT5AEgHiwDTGlVxjETZoNL1xm8FqRm48n1XTIjvKqaR51XIv2SzCLlhQIp3u650lan4eMhkGf/TNHq7w==","shasum":"849deb921d10c3d8a1c4c0e639a1e71fe83d43b6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2673-beta.tgz","fileCount":421,"unpackedSize":2313508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciDAMCRA9TVsSAnZWagAAykAP/3YpbRtah0oWLC7kfPSu\nQs6qcPUDkrJDwD+RHLFmc3HLJ9CDRd72xZnfPXCHS3NCNV3by6UeIzxEVMy6\n4v4yC70T0UIspHT+CJkPj1vG5RSrmR3KvFsORK/FQ0KJ8hd56uZNbmEri2PA\nxyN/EeNwZ9CD1RvNhz13/kwt4yCEqbyiYtyJ42JmdTR3gbyS9WZFZAAjL/I8\n5KmsQCTghFvHOs5JNi4uRtyudVnxUCbruT4temifsG8O6SnbdY+VtdCSxVWI\nw1OkJfLZpDzaLFfvFhVO9bjFBBzhYqsEdQ0aiGe3qvG8TKk9XRTwYcUpVCDS\nQY7tVaIoJyAQNl/AP0FoPJ5pCg3vJxprhAmdu8hI/UC92+6or2AWoQk06bhd\nhcJoW5QsnfLjpUiyto+D+hCow/Y8br43XNklfKdmn+FNV1mF1RBt62RVv7de\nKSPRQOTZ4jDp8UBrw81ubrCXa8pJt7p+njcQH2Ty5hGzF3jdN2I2j0wcfVYy\nXswkokJkf+DvP/VgmHKHv84OjFKz+exqiG1nfVBw+6uem2q5eZeZgx1eF1NP\nmuYimZR7NtQPTT6Tufd1LVAckDknjT17HmtNcjUItfSLgbPTTfT8hH6B5/SJ\nSsnS8HlDh/8lIyuEdlilQvxIKEdayQ+F5yJUPU1Bpdx/nEBeU8blvv4ClUhd\nbkuo\r\n=SVJj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC15H8EETDROC3CDDIrcqwZDqq2K07tURd24TWfD7quYwIgd06dTK+BxkTZbypE1p6m4D3DQw3ttP0rUH+XqQ7REiw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2673-beta_1552429067893_0.34513862282204233"},"_hasShrinkwrap":false},"6.1.2674-beta":{"name":"meetup-web-components","version":"6.1.2674-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"332828d4bda0c449e498fd213d9e24564a8efd9b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2674-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lJ4uiejOB5xhsJdGyguEeHiVW9LVLLlq7FeOfwWCtRwXr0CsVdaeTUMimGyTUjPGckqXzpc7vzgUjmswTQ83Pg==","shasum":"a058ec2966a47dd7d5127ee1d2c4d57945ba2cbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2674-beta.tgz","fileCount":421,"unpackedSize":2313635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciQLbCRA9TVsSAnZWagAAVPIP/23O0hQeaGul2o+SFA7G\nCMreRiRSUZptFNOKGTuPh0Z1W1IDfBr8zJ5yyhMGYNtvtWaFP1oyt6ADlC4E\nBz9BT9pHivkMGKzEe3c7EfdTfoMRVxS74abSogfoHPhEL4QieMEaA5s2N8Yk\napt3h3cUFh7Elt1y39FDUhNQ8bGzGdaRzwWapWcMBO4NtdBkZeCwoAejHqW/\nRypaoSHUguiA0XZExWGDn5eP+72sa+nrLDhZLo4Uk6wZuvDFpk0kaiszAcey\nMK0KK7JMgpoku9fz3ZiBxZXbns1vYIw6TLKQoM2vceWsuQRVaeuuJeKiu4w0\ngNbuq3Vkl7Ia3zU8KRPGt0g4B6Kyjv34muN2wtloqURDSAQQHXriLqjDCeeX\nmXUvibhw7MU1V/UC/fOfr/6gvVvWJ5DOe3ONZs98luTWlKs+H9UlR7oN4S4M\nhV2/YVbDYRKJTNFfGY4q1r3uQJ6YJy8fEXLWxiNsU28BYmHN0OQ89sYo15l1\nglZfE/IsyJVINFJneTpB4CRSwGUXhUHMaVg742tKyrGY73cmVQ4LBeSNfD7v\nisr8ePYG/g8A8r9Pm1lRjWHKPGZ9jRmYFiid/vqkifRQqHXxLAIGEnwjNji9\nE03YocquLXjNmSKVSnuAhHSlwHw0Z5KSuAVkSPVX+ybmh6acACnGh8Z264gX\nArus\r\n=jb71\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8WHEbVL8uf/9Ah1Fb0WPQ+zbQqCO+GKmrB6eaXEfxFAIgMx3CIWBtnvNOxZy5RsrMYNLHoJADvv5PGOAT57t6bP4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2674-beta_1552483034417_0.4346479440873703"},"_hasShrinkwrap":false},"6.1.2675-beta":{"name":"meetup-web-components","version":"6.1.2675-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e22f1da7f50e42ae6cffaa3eaef3b0a5ac596720","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2675-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UN8CjchrANIFB6iJQQ3qo6ybmw2eLMsQraSc/863OhvxgomX8zOwIpEVqxs+NGG6TPrf2PlfQKyPW2EAkBlv8g==","shasum":"a1c8a849d24576261839bbab830036e9d637b204","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2675-beta.tgz","fileCount":421,"unpackedSize":2313636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciQOhCRA9TVsSAnZWagAASgwP/jwIlTPoXccC77soJUqB\nSq5FpT7BVTGaz9DuoKqNJsRX53erNyWglQx6rj0l2R8eQzQGW6O4Aw1e3YqV\nWxIAbzpiYEXE6ID5Z054Y9r5kHjPF4rsP9+iIKQXdJaOA1e/dzUgsulntR8U\n87Fdx6fcjiRFA7zZjuZupwt/CWwYvIrI3lk0XGxd4ipCpwGlrT1h/i6/vqlp\nWm6/S1pHTjkKc8p/Zxdu9N2ypbxy92cQSTyr5TUjHhS/kFZ+y0YwbTzgvMxh\nG/H4uJnmk3I6AN/6rOnUhTUVxiqZd4ItcGf8a869Tcl2VGtLPoXtvFG8PieC\nPydfgd0GGr3nrDrUJuEciKgwtjKhwwWoFVntbL+cBOCbM2owx3AKQv7byj94\nWkjg3kZAsh+UWhxRrUK2NZ7/8WcGNNN48z804eJIiHn5w3yWGu8vog+1443n\nlMrmyur69/QqtUw9UD0jz9cObecljKNn7D8+22UuUeTbOUFZkkHEwRVqIRL8\nOFd1b9VlUbFI+XtZUBJzQit1rDssa27i2JxY7DasabvodeIev+H9aQwb6Q/d\nqt0K6LUoXa0kXLVqVt+bj6AH5gRpY79CjdYnP8G+TFLTCHDXD0as3uwqhuCl\nfor3233aNKL3oV4OobUE2lRRDK5W0LMPgOaHJrsPU4P8wIgThu0YtjoGta3a\nhhFV\r\n=4pqg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEIBKPu1c1DOfRZGKVgAhs+v1Veh9/WRp4SQw1NdzAX1AiEA4Shep48CNqWXDuMW7IqjjmkiWlqeFXeFiKETZIyw0lo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2675-beta_1552483232794_0.5713927334519449"},"_hasShrinkwrap":false},"6.1.2676-beta":{"name":"meetup-web-components","version":"6.1.2676-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3d4992e5b84a320b50a65b64c5cc21ca098f00c8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2676-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nyX65GuTowkjFGf/DKQHFPhdOHTJHp+Hvg5gSqAhYgA4+TJPUnbNptB1EmALD/lnDT/EpVfVC7bdA/vVBanYCA==","shasum":"5b459488d5d8f1d0e9d457346b07410feac1f12a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2676-beta.tgz","fileCount":421,"unpackedSize":2313647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciQ/lCRA9TVsSAnZWagAAxEoQAIx3vFSzPFiviU7v6T2R\nRpjZ7VevHCfqwXOEHultL2adVXTvyRm2fol42IsD5WUAiIpXUWzDj4agLbID\n0sqEY2K993wBRrtjAAXf5i/8FjJ4d9niPc9GSrOd5IHfuoJ8aX679nbcTtAI\nEFTbLPKJh+wlEjiBAoYjgTwfItzZVrgqQQKfOQeJtakxco90xgVK7rcE1WzX\nTJHXj5b+HpIE/nkPfE0SjaQ77cvC2c94rFvmXL3eP8+993YVzFBiatOE4+7b\ngXajct4Pav87OEyY5yYBQT7Mn0jvaYvaZjeht3pfTCOsKiB0HAlm4cs3jLYi\nFEgf7GFMmH1wjRToRpR+H6LLm+C1ShhV9Hq+0kP8txrNOJGRsa1sGxeGN4SQ\nrIeHWYNoDG+Wx+Zlo28WleBnE6cz4YjzpkULZU/Xu2EQ+ruXFXEMnl9v+eth\nIOwrFXtDYNTcaIVzjyNGogSqvwwpUDQ06BxcCI8WQ637XV4OxmDpO7vweEiO\nMMAkjXDZhNnHHdvkKcZuREimOhURV5bpxP1y7c4LcXkKisXrNLkR/ZK2DJ+c\nkOThUmwY/3AJqowZmw4tyHVIO5qDIJExQbMZsx1Q5J/n6Ml6y3S/R/n8N2rc\npEXJDTK3iGTmwnTnTiPpTJWIomxDjurDHUNcHfdR5x7otNdm/eUeBybQC0/Y\nlnrX\r\n=91xL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDq0KwXOcINiEDuSSCNFapyY1fs+uwMBshASCb49wnmJAiEAoGoE4Xkzc/eaOyxWJxAVNClSJZ55/9QMs5Hjo/KMOrQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2676-beta_1552486372447_0.3913610213192833"},"_hasShrinkwrap":false},"6.1.2677-beta":{"name":"meetup-web-components","version":"6.1.2677-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"41f49ac042f28d209aa9b3653fcdff6b3e44b752","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2677-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-phmwd+ySGCIDrB12lC7AlHRu8Sbu9Tim3ZbzDe6Jl+Zs1xcFO438iWCK3IQtKy2Uh/xb4rUkc4JgBuJjIMBwKA==","shasum":"113c6ba1da8043f5afaefee1223c5b008321ff6f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2677-beta.tgz","fileCount":421,"unpackedSize":2313713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciRZ/CRA9TVsSAnZWagAAU9AP/RgqAxsno2NOPwyzIPk9\nVLzJfZH6z0FKK6S4AjC91ipyHY81O6/AYa/BVX+4zN36j87ypLcCg+qqoGuQ\nnHFcF2H3GnE6rfOwYuejTwoa6njPNcNvqWumIxntex/xfkIJ7LvcpF5pta51\nMFm59KS5zHvAulBRwHq0ENYBQx4JM9DnzMbQeiJ1jbeOsSEO1n2vokFh/1Yl\ntt27RaRJlXrkG9LGXppSFjllI8ckgOQzu/ti3Ahu1Kn6H4UpxLIDqZtr+SAt\n9unDNkY74iC/yigrUFy83W68XPqkl4SekFKmZpHSZHavLou5kVc2x4jJ4iYO\nPYxlv6BkkWJQWYQ30aVJ92iQKXZsYu2tiNzL0nDF6IjS+LZ0kganYDkMabPb\nKtqdwaBgpmHafEjt7dcdCvRcPlEYxXU8qNJcw3G2izO9iKTtk8WEiPxTimL/\npbKRFrJHf1PzYc76U7T0Tv8q2ia0D2UB5C2vC41NSic0WumWGb2S6w166wkA\nnDksMR3Wdg18fEtE/KTKNDVk/QHXA1RKa15vPB6e91bq9++a4cwGtrvVIHUU\nhazv6EdciSQhq4bLv0B2Y74sLhQWaETQZYTQPy++bYN1Z6YUvH4Pi8EhyGqe\nfjBhGWJ0aglxkpIc1L3jSF+k00yJ4FLyZT9aClDkx7X84GwnL8eCtlu90g5k\n+wf9\r\n=FfVD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCz7tjPmioDfrBegLCmJuGN0hUzTdkfV3mDuOsf+xrF0QIhAOl90RhpDF2epWuEOkl2XMK8rRPWTfoEd+h/NASpm762"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2677-beta_1552488062721_0.9188565775567286"},"_hasShrinkwrap":false},"6.1.2678-beta":{"name":"meetup-web-components","version":"6.1.2678-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"555d81d3bda0e10d10409c3998fbee3099a80715","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2678-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1nBSVn50ZZdd0FLQsdx2mpz4Zm7jdqcdkzKv+PXytlOaXrX2Df5tOnsc9Ll6G39EEbM7bHNoF+LmyuxRI4ufaw==","shasum":"ecda6918cdda9d9ad2fde0576c0389ec43bfc1f9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2678-beta.tgz","fileCount":421,"unpackedSize":2312543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciRn8CRA9TVsSAnZWagAAn3QP/RYnDuBPIeGgODMz/QNh\nrTHKzuGofXJU0ElYE831ra7aJw4vAh0Bv1y7rAVK/vg42mFSTMSo2tEVGcxR\neJssodADfrezXXUscJ4Hhn0CAdy6s0tpyDJpZeSJAUyWruXiGQYM+f/PmtFI\nXgDPmzazQ56sNFv7uAEXVVVoNVGQnUiMVM0mRx9H6wpZkQGff3h5bbm8lOtr\nLwsqYlKJ0sA4b03tlAGXWOF/BOgm87y1+hT2PkHTNKYEgBQQ6/OOx1O8vVJo\nOb7+KHkmYJUzEXH/hVef7yCcLtXRAGz0Qq7dGLQiWvUtSwjmvccgXGfKCOkv\nsb7Y9n1HdqSxa3kkmGDd38UbMzNJB/cbYiITcbiF5Qdh5cd0/ENzOfsY6mpT\nngyxGUSLgTcA+uyCKl5zO7abqrIySh2v6qk7OOm2mfQwbGlMQe3FmJbyIdzS\ndYNTZ/BUtVvBzjZ3HjVreHkTgH7dSKBr1VVbbZOyfeM92ppFT8gAahoKq0ku\n2z7ATTEM77y+SpGrfmN2pLoA3ryLubgM064NiVm+cJGKchsT0jRzSN2V0HJ4\ntK20be9+8DU9eRA7JfuqV2+27+g4g/qTNueACgnvf/GeWsHSMF4cRIStH5YD\nn6N0alb5leWxTcFy1e5AK1iux9UObK+xgHZzRMsqT/J9uDFrkM+zcC6bd0IH\nUxsN\r\n=gYq8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBVF7FnbOxOVFNYfT9Y6mmrwSF0nm2tDdg54DqJQhZNZAiACZgQora+5vCxWSpQxnOVXdFYP1tkdibx/Zln1NSJN3g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2678-beta_1552488955869_0.34143746141528397"},"_hasShrinkwrap":false},"6.1.2679-beta":{"name":"meetup-web-components","version":"6.1.2679-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"65f2ef1ced88247e480a8a45e026d2864bfb0484","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2679-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Dsd9Npls66+pwZXiWPCKfdAL87Ut9LgH/CVJz1tIEK3eurZ803zS9V7FJ2FOAA/tTuMtTl6usS5SrAKGm9RNAQ==","shasum":"4bc6a92fc9b5af45773260afbe8c7571896371ed","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2679-beta.tgz","fileCount":424,"unpackedSize":2316811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciRyECRA9TVsSAnZWagAABI4QAI66ZZDqi4Hj3yfWK/Vc\n2ebChi4lEWUNogkRKRGgVWpAccLl0feA+kUVE7E1+hbiuwIbNt7Ya+srRIdz\nBgH1LBDY1FxvF4QvVRMo1EGWHnbd5WguxMIwHxBF1Dl8FT+GqiRhiVqKM8DY\nLiDWoXbaDe3mbSIinjxgZee7xr9+qFR0rpQUOKz2jx54yEFTw+ZOJInN+8Lx\nqa9mc+N01Wbh3f6K3Qlvo40BNbHjRLsEu/ePmqNBVtUg9fT8hIUCDSY0+NhT\n/+KJRVFY7oc6Vzqoz3gHJ6z431O4qJnp3CtLYsxRsa+efX0dSH1U4iJfKbYw\ns8tiKdpvRbxW7tx1kZSELqJaPrGESrUMYwSTDQX075bIX17XIRhcmvx8KxPO\nzSAqdW5oYtQIMWNhaocv7DIWlv3Q5aAaGSVaqxndt+w7NMhHR5JUmK7JcH62\nXrV+DyCvpxzhIDwWLLPD7wHjr3li7T3EjzOL7jWJRayHPPHCRrU13QSgVg9Y\n8K3p2ZM92A0aBy8RkvTptQ0TraVURBCi6/2QnqW9TasOCKvQle4YH3s9s1u3\nyKCpm/GgAGFrB+F/xgHeVcxuRo7i4QkIKEJc6CP/5Q0dtRRQEau3PgudncGa\ngINDWRW5OwaLYe+7nRWZ4nc7JPz7yG6RfLj6486k+rfT8aVNcZIHwcsv2Xrd\neIm8\r\n=rDLx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNGEChSyugSCQYbYRQi26fKKcuu3h6htJ7hb+5k7n0fAiBQ/oKJVNz0oriFig+0TtuPqLq20lslq5/OnTEJfEcCTg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2679-beta_1552489603507_0.7475643079003937"},"_hasShrinkwrap":false},"6.1.2680-beta":{"name":"meetup-web-components","version":"6.1.2680-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"06005159fd1f66a39d78c1c34a93c31533363260","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2680-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cpfgKzwJL6EdXtBOvQYkBRdHyhsVBNLo/0NCpAzVNPEFnC6zW/CldCF3Nr6a1Mlsyj0zneJOsCMzHByhQIHWqQ==","shasum":"f8fe0e512839a40b02953fc24e8eba46ba543338","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2680-beta.tgz","fileCount":421,"unpackedSize":2312549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciTfbCRA9TVsSAnZWagAA+IIP+QCR3h1ROnlP6TtTQeEh\nS60od0TXpJsTtMP5HcHHDEOgWdEhETw1JzYJKddp+Ig2O79EMsuOfYhAzae6\nBLTEg2nlg2oDK9ThsW+JSjv68EbYhAUNxkcI2+eYXwRHn8gsMfe7UJyvBg6G\nwhz8IDXI3C3dpukeNz+m3dcX27lhqJgZwTWn6BqA8ZVouRJdXH/qsoJloSMc\nZQF63pbNDU3zqSOqj4fxC1O+3X0WFPuY1WhotNRnNt5TyFyKH66BNK4Hmxas\n7bpJD6ZyagEgrTl0a7eswI15b30yVEsLoIUgIRa0RLutG0nkHNPGAe3OgAUO\nL5wMen6vEH/7YtUjxu1aw3KGwGmG+MgD+HVl0Zz5pX5YNjTnDXJZ+kBsbh0q\nt2GKOGfgTTCAJZx1He2dF2Gpw1vhikaJ9GD8TACQgTO0XPQP/tI0zrB6Kkfv\nkfBg+W6R9B1dxCOLqtw2NsIVQ53mti0e9KtFspRLA3y5xxkkhFBWgDHx5HBA\nHEfYHaz2ToWMWhHKbc5WGwf7dno2aKyDdHBMsPW0AdYc4nZx6yNCzNANYS9a\nsB/kJ/fhm8XBuHbsIs31OjW5459z3KOCvS3n416DKZ+1KXOdSLBYzGr6EaM9\ne++oN8guGDPcgLyD7jzkgTUZejPcByK1+BzGKX+KehnKdx9nrwuKUiD8s4sV\ng1ez\r\n=HFhp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaIftDOCXd+W47M6jI6Xniiuq4S7fUbxEYs7S8YoCuQwIhANteYieQFurnj3zIQ1E5bB2gPISa0QWWlB44dn5ZB0Rn"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2680-beta_1552496602189_0.7750007040704265"},"_hasShrinkwrap":false},"6.1.2682":{"name":"meetup-web-components","version":"6.1.2682","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c4782bbee58060fc7d818702455d944f74fe30cf","_id":"meetup-web-components@6.1.2682","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-eBRPJbgB6/aS/ulGiqYWxVCWarYS1OaJ14tGcNx6PgyGIa7KxFjp8kOGpQtiva//+VOG1qTeferuUl7kRkWOqQ==","shasum":"9380f9817962f443c1a1a1978628bc0d7f1afcd1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2682.tgz","fileCount":421,"unpackedSize":2312544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciThBCRA9TVsSAnZWagAA8gEP/izDASW3WCSwCUHvqDFt\n/awPrFp3Timzi6guSsBWfHVKp5c95ijtEFadrFbKSBmTlmre2U/Qg3X3sBDl\n6bTZpn0SdSvimII5ccqOlzVHvLW/jEV8GvgW1jiboIP4g0YWpesRwtuR77oD\nzh0PJJtBarOWfX2OQ3B1gJfBiRVo6TV/Dh7twbcP7/wQDasUObEKiRPdRbnq\n4tb1NzACvv9OlXqH0fiQcG+PW8aZciTwmcYnfb+243GrA03IYKaOxevXaIPf\n/W83DHIzvJ9WBuM9ponRCxsEiA9MOP9rB2LsA49oPAywTfsxqbopUu7A6YoY\nIaheH1WMFWinPi1040I5VHnN6wb55KptGKkLyRE5L4It2T8+7SY3f38UyGq1\n76uyUV4Y0cw27BXtrBgumcOXHcG64OovlDflExk0f4vgBuf+IGcJwp0ArSru\nB1G4SQZee7UnaJl6SytBJEAixnp6OporCnIJAEFI5lAC8Zjvyy61LsnnpXAO\nBy4LGcYcKoT2Sozl/nPsjZLkbCEUU9yBOddRktydvOeq/uByU54OKfhGF7Xr\nKjotqDHJwOJa6886CzjUSoMMbjQHUGWy2oBsdwyDzBlJA8l6TJr9+aqoaPmI\nlxApvkxi7wdna4C/RvHrU7BkfEWXGRvzms59ZXO6p8epHPPapK7OYQHLz1qk\nj88e\r\n=blPX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2jPJPkhGbYNix8SHOrtswJ8AnZjvYyKP4tzMOqAit4gIgFNN/yGAKbk2ff/p76kODNWvUZXBDWVKAxlK/M2cXCR8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2682_1552496704326_0.11776968267354926"},"_hasShrinkwrap":false},"6.1.2683":{"name":"meetup-web-components","version":"6.1.2683","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c3192c350970a3686134bcc0fa6086df3e2ec1a7","_id":"meetup-web-components@6.1.2683","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-InXy6JXrDGUtM7WWWO4GeAU1ew1s2ljT7ANSDrMqpuPe3gj+AxrQE/x6+8+YPmpkrW1h4o2ePgc/B7XRnH6ZRA==","shasum":"b26b130fe33df11106c4fb4aff7ae7c604d94ecf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2683.tgz","fileCount":421,"unpackedSize":2312609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciTrPCRA9TVsSAnZWagAAVgQP/3qTjr0v9gCfVMJYkK7g\nwd/iIprfUB6UM91mYVLkMIVRVaXCB9J8MAQ/PzHBJsEiuZINx7z2DVrFH4oG\nG7dy6NlW0X1yaLbrSykIsBwIbfMCmLbY/rEjF7/tP5HBqMkhLuTtFEiBrtHZ\ntMz9Ek8rjYYuphqXL1KFR5ZWXev5+/Jmocu/8ynthP5kHefWfGgRUafAwELn\nNlmsFjDoBFEaoKWPyn2bDqgLQi6j69aKVR8gZuUoIadbxKy9u9jQNk2L/hY8\n48wkjFluxzVl4uInjSIX4aUfwb2P8C+J3oaD2sgDPz0OnTwuOFh8sNvKsibc\nyCCB7yHl1qQ8JJA8IwsheYtxi/Qwf/Z//ACSvlqOjHytuDH+s0ZBfYop3o4x\nnUur2u7EUvMfo4IL8jRmCuudP/1AcvIZ3XNSp8+QqGFJTruTQkO420XwVhFm\nzjxJW2yPRjXORSkNyUbrd+7EoAXm82ES091o6cZYXSZP/G6LOewtI71rZa7G\nj6IysEA7m/OLup+k7/Bp7CkkIXzjIydNr7p0jWiJB9DTCY+wmWbSjL091zFg\nvTxJo8Isg9vCkiX7ScoyzkwfNrn+r3ZXQstvWtoR+p+Ib4dnY1w8dLxkC5WV\n/NSatzghWCvSsCFOSGI8UcKwEdhGcB2aXj5CKRc/QRqxFTQsbYvrYhCKu0Ns\nnSkN\r\n=JdP7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrubU9JhS36WYhCXTeHyNjOjmZdZ6SDQ7htI+6WcD+kAIgdrVdybkhs/i9cGrCs0/J7qj61anmhtkHBl/vWmpbK88="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2683_1552497359293_0.2510545044628636"},"_hasShrinkwrap":false},"6.1.2684-beta":{"name":"meetup-web-components","version":"6.1.2684-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.4.2","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"12accd9ffba801f1003fa7282efb73882077eb55","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2684-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IaP+3VSyTDEa4HrVR6qSzlwdQuRXBQP04KYA/GlPOY7JmtyueGnxHewtxYiGXJilsG8YY0J38cT4GIlExN/lhQ==","shasum":"33f80aaaa0d23356d012c69145f4eccb3c8095bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2684-beta.tgz","fileCount":421,"unpackedSize":2315138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciWYjCRA9TVsSAnZWagAAmmEQAIsk9A55XJvZAydsojgz\ndecQdSGM4yavqvKJcO6p8Sn2dL/LWCzPyKfVxzIhiNs+4tzUnWD2DYco71Jk\nem5B8Xk9fBDitaygq7+GDCFAYyieTfOuPdnmbmC2wQq5h1gdPesvEIBHY+mz\n0XofOCQKktn4GzczzbKBj7bUvk0YaVIkWk4NZn5muhj37QIJoqMTelHg6yPw\nd3XgIubjaMzdSMOPDSzkha6CEivdYVOD+0mC96bEoDvISDuihXudhivNxIqc\nNCXLMECA3RPHlfm8+/bTZ2+pz+/g9lQ+GJBf4XgdqZi+B6c1+WgCAZ3KiWx4\nkMOQCed36y5WSHoYEbIbvSTl0hpMOXCALsASomWJgVKwoSnyT1U2beeKlSUN\nDzCSPLfpNjaarp3EItS/yIYrB4LcqDn2osbr6QiX2Bk+04Qo5Ilv//vy1Qdh\ngZ7/dlEd0vmtuuEIRTdMN40V8dPTmZ5UFMvFS1NTaqPhqfrtb6ePPsWKTfbQ\nCaeMCl5FmHZ49h+X6xCC7ZmruNY3kuUPt7Gm825BdNkkEe1wy40LYRnCmZIG\nAH3RsdtuhZJSakDJajmRqJP+z1cpJXOm/oCnOx+sB4zln8VgybSBRQm2xurs\nZ1CUA/F4ZbcA0n67tN1NacP0t2ksWPKvjTI+W9m49iWu90dPDX5fYnW3RGoY\nyRXc\r\n=xj0a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmDxixsRrnE+6I92SBukfMmtUbvD6ocdYLYCPCuAT0HAiBc9S8kId1jgzWk5GMnnzKuNXg+4B6x3zWYjqaZoKwLCg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2684-beta_1552508450541_0.242510611831958"},"_hasShrinkwrap":false},"6.1.2685-beta":{"name":"meetup-web-components","version":"6.1.2685-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5f3108bdb411cfe15ebe855791b53a87145948b4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2685-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Zp8P4kBI3otJYZhmOdxmuzdTnYrAMVaiOn5jBtg3FgUAHmthwEFVBuZL6e10uKRdhFC7VmrNFX1J0hnE0V9MWw==","shasum":"01ad2e6e329bf196ee27845408de4d625257ae8c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2685-beta.tgz","fileCount":424,"unpackedSize":2316010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcimMeCRA9TVsSAnZWagAANVEP/1uZCCAR6K8HzTz8Gz0r\nBfCEMpoD96/+0Qs3JfD7eWbRS8A3DpWtm08V7Yds9CcHj90hE7mIDDr1e6Pq\n27uIQdiIf3npE9hSwD/ApFqQjCkOaHNBhou4T/ALGjGLK0FTXt5jKVhIZ0no\nbPgUNsZ5/ajb7Vh5OB63iV9ytE5FAGN1ohtC4W6T3ULQ5F+iriZ4PEwSZH9V\nY5vYst3vfB6dQdvGto3CajztsDYjUCxHBAc+O7KFXD/bRSZItDNOE92aRutc\nt0Zrp2n6XgEZYrw4RfFiexuGDab0D3z3EGT4AdU2pGqPZESThX4+5zXpMyvy\nkPN2Ddkb+EbSethL2hXU9L3p6EBqPP+nI4sG044dIUYxta19c8aNDOGPRBv2\njjg4jChfo5TkT2tM5uiNHI5dq67gHlrU85zjCz9stnwFQAYOCRDIsoiPoymA\nDBI8G24yj0QLJ7ew7Mjl4hR/9ZhawKD08JR/Ts6YnUKvP01mUZwBxRtvS/xZ\ndVgfS0bKLtQchABvtHRGGUoQMOLzr3J5vxOJK6x0yua2Gx+f3BdGfP4zAgvZ\nKCs35oduoJjU+Ry0+n0Rbn5Ul9+7aR2KIq6FeiXNeSu6/O5nm+MDJwn9Tg5n\nUcjh77LfQ2HbWwJUHLMcaYdmKw+SlhuyYf60DewqzDCKM5BOppLB3fQWTtze\nCtde\r\n=G9IO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFAJ8TXXD6uzZRqax3INhQ9tWNVsXF7gonLuipGrm0yAiBkFsPUahQvkjpt5pPLAjAIn3i68RDLQxmJBAImKDvApw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2685-beta_1552573213734_0.5960961998637975"},"_hasShrinkwrap":false},"6.1.2686-beta":{"name":"meetup-web-components","version":"6.1.2686-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8e40a18807db14e1a45e4aeb2126476aaf10cb53","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2686-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-x0e5CEZfSVIF5EG9O/2dxgjFnNbxV0NTb12cgC2J34toT8t8/Aw4ouvaGDUriyNZwXigNXMn2EnwxYhSIVdXDw==","shasum":"432e7a07ff6b8fb51254573ae1ebdf7bc818155c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2686-beta.tgz","fileCount":424,"unpackedSize":2316027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcinC7CRA9TVsSAnZWagAAePQP/29B/si4CC0RAROA2/Sn\n6cuqXhHZB14XbR/ezGxetw03sfq+d364QSoTPMnhB4af2x+AiSlZVrvoLBjM\nT+WYY1ObaTaU3BPa6VnV4TtJwMd2PN/i2Xi1hpXI5NdD4FZEf1aoEAkrAyax\noFFRYJYs0igvM6wHqA/eKibPVCCMTNOKWbocYmeW0qxzsNftxl/I/vSkRxtE\nn6clw8dIqKqeefWIRd7j+KxYXX2Vm5+5avtbW0hQn0JhXeZANmdW9Z7m91Lg\nFRSCJNBIMkW2povHglkZmHihdhcZ8OoGdkWAEpT0zkxLjJDnLXXDTqZwCDRi\nEgnU0391O6O6eOyt0E9yj5e6R6kTqg5rrXkEF78na30auRtdkCxtf9FuEP6q\nP2U1XvbqXK6ShVf1GhDHiP9aFXaNuVahJ46V9EpUzhGZVupGyazW8W1L46OD\nrlOG6LEle+G5HWcoOe8kdwr38DXVK5sYrGAgPDRcuVq/NYw6t1n97+UrAz4g\nibRITZBbGQZlx8DAZ9Yuu4sdPiN9yiHzYldVm6CnzexOZ8/hw1hH+JS/y49b\nkerKcfXlGnVDVqf+QoxgSc6TxE7jidnFfb1mgDfERbeYYoyp6VtZCxbxOpkM\nW5tzglQYjqH97genvTY0NcCLn+/iVa7euw2M2WlCoAvQZXaWN4jiCq6Xsiv2\nU+Mw\r\n=aTrJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCslMjdDcWfAbsFbbYdI7aUW076aVLukVL7ShUCM99rXAIhAJySwk28PWRUwFC+nuuRJPcZVVB45zUA2DniAevr+4Fc"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2686-beta_1552576698245_0.7422071657376912"},"_hasShrinkwrap":false},"6.1.2687-beta":{"name":"meetup-web-components","version":"6.1.2687-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ed1831d143f91e185e638d6bce226bd630b1403b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2687-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-p31KY1TmsczAU2yMMLh9rW05DWfzZuVYlgO7tNhE0sIA4DfHsdj9YvMuHbrKgj6sed9dznLm8PbD14t9Wrtr3w==","shasum":"1aea38e0f31f4f828b787b90e7b798af3210c0bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2687-beta.tgz","fileCount":424,"unpackedSize":2316027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcinDzCRA9TVsSAnZWagAAeUUQAJoTXW3/q9URnvvoOUjM\nejUFBjuiy46LuJFhLOzXWx0LS1NXOZOmdyHpdnYDiCRj558C7j8NhBwCfNVe\nomuQTGxDgviuIvOoGJou/AFQlrBfSk8Hfe9qRfRcvEHy5fzGRdp2j0llZWAD\nUFZEa6jucXl7sVR3noWHHBCGffz7sCqFMwxhxqlyS68xeHbbdCbgJtZAZv/u\nC8in+MZwM0tpQNDfsQIsWor21GU7m33PYPjtpBAGndREic/rrmp5LNmDZIQB\nKwUt6df5mieTWcguJxSWJhwrHpM1aFvZo/u0v6dW+Q5Ee0ONHOSZer1wDo+H\nYMqLRnPyfxq3B8A+XRS90Gvz03sokbaE9SgjzQC7KwNBsk0xZ/50wrJVOBdi\ndWoUAdb/ardryWaIiPMk2IFFa1KeS+JO2Sb1fYeEzRu1gI47hGnhvLgbuVgX\nnIIsCo2K8K4p+IF/Y3Am3R9Kl+H0GpFe2IwNFVH6aWqddCVD8Dh//Eq5bz8o\nrTbGAF9L3UC1Qq7RwHHA8PkmMPHcV6yOKVbOcNXnnMmUorYz0LIkP/tPSoDp\nmE7calFwI0U00sCW6KFZaWqcisRT6a1/qhipxWddk9nB+SVS8MXLsC18XBJO\n17ZDSm36GMVTwIKwZc1dkd7ptxrOVO7r3EZI6cYxwGrRwhdiu8F0W8ekxYMJ\nGUFC\r\n=k9Bv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMmsxJFURJ9dtG/3PEarwsnVvV3ykTdA+TeCj6IV9YGAiAO0AtFZ/uPc9lj7Uwc7nPCAr6EfxvA0QCXYtkQLRkVvw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2687-beta_1552576755053_0.6174523973894848"},"_hasShrinkwrap":false},"6.1.2688":{"name":"meetup-web-components","version":"6.1.2688","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0221fe3c5a32daf4f8f814f287d1120fa37f1761","_id":"meetup-web-components@6.1.2688","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YuRGTrRiZFvctLUNbyU9GsG0iuu1T/MJeCR9L+27DHBzWMYujZQ/mDFa3wknY4BSVLjeICiY/WyvN5J3N3VmAw==","shasum":"944eaaba45687231a26dcebddd9e76e33b8ba2fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2688.tgz","fileCount":424,"unpackedSize":2316022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcinKnCRA9TVsSAnZWagAAUbUQAIM7l8yup9Oxz2MXzwMW\nXvLUf3scGO6QZLRedruRLstINiSSx2Vxv7Ilxgop2slEoa5YR624k3fd5SOH\ne0RKEtWLemPSWrTVCjEwuvl+kkOZGtE9RN7Kvop0YCuLowufcBLmquXgKzCd\nlCxzkZl7//LkJm9TowwyijXx02b+9WevbvY6Ja8gp3CXv6LqXCcdX4RfemnO\nZHJYDB3iYkud70QAb9IQ3CBMCOi8TFypXNzNr4P3S7X92WSrL7e4M+Feg4bd\n+peHXcn0IjOc2j0MViFUjs0S/QdPXqe/dMyzORjJzklIyTg60cAVhppeS6hz\n/HJRe3BMD3ozTTRoAbjlD9flaEU8jPOYDipCV0LhxR27/PtszTTuEr3jf/B6\nF2/uubOTmNeWw7glaDJLCSC8DtE9qoJGeCTIxSUzYwUzFLa14FDVVz2vgVn3\nL+5W2DxEJcv4W7U1v9RSD/cmbOx44b83aJ3e+nKd0tvWG7xMo/tFnoZICLeb\nAQ3fxi6M0PoQCDq4ZFU0ppHD2YWemZlMDySmUd17pbrLZdaBJCXdPd5XtCLb\nr3SE3CSp+w1HAlhN9wzCqxMYWpQMt35a8425N9btKl4Rs+h3JlOViVjN8fD8\nQjRT5IB3HKEY1RyNUbjnDPjdzOXuwx7BUWIXKV6uIIcjUZOb7iWFZ/xR1GmQ\nGPJT\r\n=jLU8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpybNrh15+xfta9L+HoBTp0oD30BF1FiZpGnXaa40p0AiEAj1WcRhbTT2Vfgf82vRNne/LriQJ9cnXD7HGz+8BMmKY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2688_1552577190164_0.5555736359477579"},"_hasShrinkwrap":false},"6.1.2689-beta":{"name":"meetup-web-components","version":"6.1.2689-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c0250c30423bbd3821559d60d4a9112ccb980200","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2689-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xnuXWRIRyjlmODKg0SkmdC8706dlBoq73K546Bp1icpzkEtTg4AllEr+t4HhfpGATkXPkN7V4iNXKliwy3ln9Q==","shasum":"3d2f91edf7ff32faaf25f8f636344f07d362836b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2689-beta.tgz","fileCount":424,"unpackedSize":2316046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci7skCRA9TVsSAnZWagAAGPUP/2h48Pmo76gje4q7xNMY\nMUjGUtPk8SqdFAq0mn2KHo/hSTYdEcu5fAGrZoypkPawAZTDcH7w7srXCcii\n+Akv9Ou6HAO5GBUzm38jiadZR2liaoKuRXcg2DjfwLgYoUKLcqqh5NO98GSp\nAL4JkHLirf+P7Od1dmEv9PZGMnQepz6qIoHYAHq8aBJ380+XfT/qB3Q6Hn15\n1mTRlhvhc2i5KM9JWW5EtH9sWrsPzt02vVQBGdQQLQO847VO93+FcCxyTEE6\nihh6ntOJ60QouKHKrJoKEvCEslzq6hif5I5GKlrKJND/GdqlR95ydtF++PVp\nLo5N5nmqerUa772f6+TA40x6Ee+e7mdmA8lPeyjYxa2PGMmXA7M4jOXeXW+O\nQ8xJvsmAm35ds58BZeo2bvTv+LUOH7FsmchylQDK1Qam/mNgLUbl0PVF7n6t\n+RsDGE6pUJPWWLe6eAZF1pe5qdrZg6MSo1tLveO6vMWwrMDlaj6H8o+45yHR\nosBA2h/ZdbEN+D6tsK3xfiCGrSp5Sp1HTxirAyR3xNP9u8nWjeEqucc9QQiX\nNR7//jbPTJhIrzKdC/N4etKLbPZbQZLlZ3CP065R/ah3UKNW5AHVzNJZi0Hk\n1Yw4WYGNO8R3HsFF3rYVwlcRlabLYqJQuVGrhX5wubjusyqZhBx8+aYuG8Dh\n9hdG\r\n=xhjf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzuwLaZqmRYMUrKDGpiPze7m74ca7N117DpK2EUHlPQwIgTOuVOv60ZkNPbDz2S9J2tghRVKI5hLf5cEP/0l2xHC4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2689-beta_1552661283750_0.7074224287757371"},"_hasShrinkwrap":false},"6.1.2690-beta":{"name":"meetup-web-components","version":"6.1.2690-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b7a6916d7533acf0ec7abbca9de1c9812f405b91","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2690-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-/hq05y/F8xNwpYiOMHt8BW2IW9IVJv6sgZC1p39zjdxR25ReLaxcpSf2lsMZKIQ1fULRBaJ5oryECqaBsxb41Q==","shasum":"63231489d3636ea501adad78d4c0757157f11920","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2690-beta.tgz","fileCount":424,"unpackedSize":2316079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci7yPCRA9TVsSAnZWagAARmgP/2/QsbWgR5TJNCUN5+in\nb7K+El96TXW6q5Nb+N6XmLFPXAjTkn47w1EKrTD8AhXwLRrpqvn70Xh+/MVL\n5jNDVh4iDWT3k80IZMjhaUFKhFgJqCNI/rGu/ujLwhIyXd3oWET/GtkxyyYN\ndvIzjKV/0Km4imSx1l48QRRkYwIGIhG2xOHy25iPhfVPxw6YIER3wl769T/0\nOypY3ABudsdKEYx4B9DOnl+GyO40a9uSqL0JjNb4xVXZzNqF6lMmIntCJ+NV\nLg81pORbbHdmhzs25QF2T41893U3f5UyNp96oijNXYCCQAV7G2PUn6WWGMp+\neNs+GrcrJ0CVmDGu6OdIUFD3lRQam6R9Mafz+5Ns3uDu1V50YMiirIaJJ9fU\n4ZmnNB3Nx8ZbQmE8NhfkrZkb6KPorus82zR5QbuQP9WQsAgNBMqpS5i+j4SV\n3ptldMXjkF3zqcjmwSIkstyd75HTqhoTj2Ipc4Fosw6EFPjngBEOX9U6lszA\nfHP48wc88Igz9HoWxfcviH6LwOCkLFl9/9bAJSES0bTBtqK4yOOUf5C4hSDj\nLTz6OwN6KnI8a7kNECArVuSENu787TUp9gKjZ4qGxb/7FzGn98n4L4XIXBSQ\n36gUgt9paTjHCOe0Rws4ZbsyQjqGRa8dxEEsMUvCiqD2XSLtgd7FE6IG+CFY\n01wn\r\n=v3Tq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHEfL2qv2q22Q5UtCYzCgJNnBywmHz1HoXimiS4JKOF1AiAOsZOrH+ZXB5WHBP0Q3kQbhPWEB5k3vHNW1GZ5WO2OEA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2690-beta_1552661646732_0.15835202283015737"},"_hasShrinkwrap":false},"6.1.2691-beta":{"name":"meetup-web-components","version":"6.1.2691-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4d03adab440c666f3256f1326531189a547e3f57","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2691-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YR6fx0lRzT7H/XQUPHrJ8/1h7WAEJOEqaJzGfNAliFZqvv6My9jEtjc3Jn3cRsHeoKilT8BZxSe7Xj/xmYVKIg==","shasum":"d522a0019faf3cc391cfb4fae35f8ef8fb93966b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2691-beta.tgz","fileCount":424,"unpackedSize":2316137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci8G/CRA9TVsSAnZWagAAPfwP/RqJ2USqhJDRv0cqriXq\nMwYURyADGPJ+ZXiJ877Z1qbkEpabY0Ke9Z8bTtfLjITSWm5A53JEuQsCgieu\nN4xwSzdYrMFCfQp3txJiYqpKHQVZ3YwGjvt/cwMriplxB1ECmSX1oSivSFh3\n/NIXKB1Hw8ftyDBBxroiqo8X6+Bk0w2TeLMQx/sUP37+OBtVRRz7xRKZ6bts\nwiiQa4P8imoA+qVivoZActOPvMhnuM6JkWpFhfQGy6EYM/v5SGQ9j7/3yYCG\n6+NsuOksZ7twbuh0/IhHbR3DNSkkJos1srEcm1QZrI52D2LUtran2TUlvI90\npmSd+3RwNfwb7utLG2odfNcw4oLVBFx8GwxTr8Ldo10/yYd/Ask+M7IKLPXk\nuJIpRdsJe71eZHZ0qoH50uk4zWBFm18l4JWYuYLS/jh7RY7XUgDMdvuEGZF0\nwFTctZiyojGaG5wJAuD5Y51HIpaCccIgNDSdb7I4EryO4PS7LysL8BPsYkYb\nxHZVzHQHXSqJy3Kw+0jnZgQLjsCOqQZy3gp9LkR8R8gglA21+oKtZTYif/55\nbnGVH7Offd+sJzMxEKEe4WY7rkXVkJcy2faCHZsLO8fwUZ8B1B3iMnTGyxl/\nAQNdip+4giu9JFoB2lT7WaZN6yQg9qXfJYSX87iN0C4ybOM+D9AKslMnIPrn\nbwAs\r\n=ceb0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNoNG5Olkgz4d5bVoeMHN5LIrqBJkf88tYrfw0B+Oz8AIhAJPyhNlz+hrDhuNHZY3zsV0mRSjuNYjbo2hsVqKUVTQ0"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2691-beta_1552662974352_0.7430533590805684"},"_hasShrinkwrap":false},"6.1.2692":{"name":"meetup-web-components","version":"6.1.2692","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d6971c516ea54674dbd9ed4c42fbbd1a5b81c984","_id":"meetup-web-components@6.1.2692","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-lcUl+ZpVzLgNb3tguKend8pXeq4WyS5uOYhClQqY3gi+F4M4XYkezHRdwLDmJlaB6s+tzc+NHFq7/eK86LN75A==","shasum":"c19a6a31abb8caaadeb193b1a7f459344a1a287f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2692.tgz","fileCount":424,"unpackedSize":2316132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci8NtCRA9TVsSAnZWagAAhBIP/0sAxsUjtUFLTvQ/NR1v\nzh2YhBM3pJlRNSmhTwijYYnl80Z1gY7gImdOPuPaGH44ezv5PJwtAJ94ZEv6\nN/eGtuKYEvqblehP7FPvwx0Amtw3kBt2aquyR/2H6fX1T0p5t1YD86FBwnmA\nsgUUqvSUdSNoCOFbKehBV20Vxr4Zlve/ZrXjhWycX5vaDiw0yIUNur4D7+FU\nhM15D3/jqv4JXbXbHzp+WSAJuYgkNiSq1YW+oC0WPdYu8+74bcfVGhHT22YH\n/52epksAQzkPwU57a7jrFgOw/s8THMFVyS+iknKtOO+zE+8m6BZAm7tfYH+W\nOTecdDb+ksb+hYzdAZhl0TIewjOGgI0lJ3tDKf8Gku2cmSqceyC/i2tSWwZt\nUYvYW85E64H2vlcBUeaAd5FH2DTdoZqnmMG+9SyDw0hRA7Q3xySzCzf49coc\nAGeZA3onjkZ956mEnaz/FhbCm7871QFid1tYpx66wzqbiHlF+38tHjTCsGAt\n8s8jjjNKLdPbGniTknHggsxpcZb+wQb0EMDpx7TyV5E53PUcQARtTCjRFZbf\nSZrboe+SlLWKeWBBHp5Qcv9U1JyHRly5yByz5cmIbeHFZreigRzo7AUlcd5M\nwBhp5qD9XLKHEbamH855Jeo0rjstN8erORJt7rJajQVNDXMitFJG6e0aSb2C\nRQCG\r\n=DobO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKJ2Pizf34T3DbaDwzi+vMELVIMgQR6PgtJYHwd5nQ3AIgMlFIqEPNd/KHbfiaxV1Ee0G93jp0EpziOEKbtLf6aJo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2692_1552663404094_0.1567874923945225"},"_hasShrinkwrap":false},"6.1.2693":{"name":"meetup-web-components","version":"6.1.2693","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4b33b46d93442164d4babc840f2b8c867e2bcb11","_id":"meetup-web-components@6.1.2693","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tvUakzETxGxpuOKCc5+OpaP5hPhffvq6e1Em5khtqzYY3eLPCkGQzJhZJ/DylD6hJcEJHZsYiwGG4L28AOkRmQ==","shasum":"fb9c5e59b41c974e9c591beecf704c60821faea9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2693.tgz","fileCount":580,"unpackedSize":3276062,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcjAGeCRA9TVsSAnZWagAA5YoQAJoHCaK5vAZtHE3qNh5a\ndY47xbfUNy/R9K38SmHYfQrqN3DQ/XF8f4bMrLNLdw821Ujk+Y8nXulpaEst\n2emRjnNK2Bsc5Kv/zKFJ6sDrQvLL1piJaI8UiSsrpVALPw61bkPw2dgGS4GQ\nuqWKe7DlLDiwJAJupaSlQPNxo8BpE7kKmEVOsEIndqeKOouvq+Hfs1jUGwty\nROSaEQgI84qEd5Pd/t/EvjK9TlQqMLseXKhnuTUjiX4kh4AB0HLhnFvVp61t\nemv4xOi1EPHE4PJ1RnAHV0231b4Jsk5MCcG0e+AjpsOJC/tjWfS9pHXej8KT\nKCNPQCxxEJs+aNSlEgmVFHao/IWat7rLQue701NZWgeVYU8BNfW6qZFfwLko\nCBr3EEqIPogyt5+7cTGP1acPY+HrXAGb1JwrKN8F9pw0DwfxTjrolbI/KB/2\nehZNBN1w1zV1/jPCCDFQJ3bpKkaKM006QIbmb52vohhRzk7OMfd28n38W1xO\nYh3Zl+KQc9hy7ihjKtlVrQCLnLYXDDmem+y9/JZjoDpJR++6WTUHitHK8Re9\n6IWrUGcr9lbvS9B2WaEDjhDyr5/3kOJR3CVDnr5FuMI/325uhExlGOtR5QZq\n9eIJpfHCKk9ZDLRVyVa3UApRAQzVokL/o5RRz5De2znF748H5obbo5ZmCAFC\nWAyE\r\n=admU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGhNlhjIfn5qQWf1qyYzFKhFLWfFTBm8THkdODbqxVX3AiEAl8uxvn/F4qASYpA3xwZAPsxY1RTfoS8qgxpALTBWEG4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2693_1552679326092_0.7250904395133062"},"_hasShrinkwrap":false},"6.1.2695-beta":{"name":"meetup-web-components","version":"6.1.2695-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9b6b9bfcbcb007c8dab0b0b569948bbbb3b3e1bb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2695-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iZC2G06NyrZndncPnqy1Fh1pDOF0IrL9bnDKf5RqXkGd2gPs0be0vM/cVZXqczd0+7urPRkpYVcOx+dzLTQQ7Q==","shasum":"ddbcd968b83e13e3bffb21a03faa3611019e424c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2695-beta.tgz","fileCount":580,"unpackedSize":3276543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcjN5yCRA9TVsSAnZWagAARuEP/jZ61oNKf3w3Umq9mgb4\n99dGc6zrTRohgH6AGtSulferEQC/QqphyAZiWzW7jq+2jAhsBB3vuEJbSIEa\nzFz0cM6XszOmoZAuNVtg4ZAMZuCvtsPeJZX4TgeHV+NXIwo1hJLi4VjAuB/U\nKVC9fcJcY7bXbXbh//FFeqbHV/c4eI07A9b0lunqKmKc1/1B2sFH5ARtWblE\nIjjM00SG+iiFCjUqzgOIUc1IcGkPaT6JO43Ushc9x33+5m1lU4qgkg4ZK1Lg\nq/aSqHk8cdx305glRW8gnUVX/ztS9UusR4c8ClP2SDCOH74VAvZ5Sy9s5aji\n6JVqE9DJNBAZRQQVm1xFldGQxT84qqIgVx6aRI6PHUcvHOSfrQQZ8Xc6+F00\nX5vMAD/cePbP3udZas3BZntA454dNJfbO4ywlb5LaQxO/Nufuo04sCQuy1Ow\nndhc+K8Arm86P/bp+OdxwR2bzapWHMNR/rOHwxo43FyWE1Qso/XcSZeVm+o6\n3uoZ8SA+8TCIsmjGiA1Bl0kIhYhZtmzU00FA7MbkTtV/uXfo8kJ43qJsjyPo\nGxck61Aw2nGRQ96WjzgylY6/TZUT/R1L/8jxbnh25OUdj7qojZo3A9xMbpBx\ntOYYO4NHNwjXtpPchJV3DaYShQ573cBnfHXid9JdPhX71Ti24bIE65OivqhI\nb6HZ\r\n=ES/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHr2y8r8/0sbDJOkZPTobWCJt+SQuykbDDewoQCEuH7SAiEAsIm1OkZ2gbvzpbFyQkZSNfqqvcMCz+N7BZz6HGEb/DE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2695-beta_1552735857090_0.052888961404984336"},"_hasShrinkwrap":false},"6.1.2696":{"name":"meetup-web-components","version":"6.1.2696","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.3.1 || ^15.0.0","react-dom":"^16.3.1 || ^15.0.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.74.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.3.1","react-dom":"16.3.1","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f07b2ca28c8cfe9eda0d5c59ce952615c0e35012","_id":"meetup-web-components@6.1.2696","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FnzzvLd76Y8Dm89xhnfsvaG9wlAmssK6UqZenocXhmYYNMVfczYGP6hL/XkKrJff98CeCDKYnQtYpfBev1HXvg==","shasum":"bec1c871c889ca3c4718147ad4bfb2eca6985022","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2696.tgz","fileCount":580,"unpackedSize":3276538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj233CRA9TVsSAnZWagAA/xIP/1n0aFAtgbRN/Q0wG4rS\nlI4VKQz7bffYssiIQlEJE/4P6S7NWLctLxKRI+3M/mP0zR+aTMQqStRboItr\nCg0u3zvr57KfIEVsdyne4mLaNegd7gOauSpCEVgifaxO78YE53mDvBhu/Rmg\nU1kzC7lF+X96Z/5xcjSzWBOO/lJGDSGSDcHg7CxTXZ3WHCTqPYv/+p9M+f23\nS0t7ASAhDeWqdNC29weY5FH7IfJfVrUUgqAXp3fHiu6VFA0RbulSL5//38Li\nfd+DzRNAqIx6fgLh9bByEI0gyUkU2rgfOEltsJlC8yoLc+doHblukhaN7agJ\n8W6o6VmRGO7SmiYL7lYKD7e7fKILc52f0aEk0EnSkz7qpiKzDGy+0Gvt3zHo\nfAjiUCQr1rC5ki6aWycoWxFb/TnwRybPzaQUor+jsIULeusmbr2EVMKOwGyx\n5TwxtnUQ6V5ECQKQxI7JXSk6RU9ho8/vH2vYJtsCQt5Gpr4sYXlZL0FfdHSq\n/Gv08glCue6F++4EhkY/tIVK+NatKtfxkkw45NeC3NdhlsFYQqsxIQfMmgNv\nSXl4scWSdm40G7HPt1arvmqimPwOiuQog31fHe5uX63NQ6z48QQFus6TEIKt\nlpntUwbAhKYbUOZlNyCQN2vbRPcaQG3HzR6hwxthcSobxaX3Ms1eIJe+yvb4\nK/ot\r\n=qUJk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEL269pqmw0aoOeOEgU17wnZm4Zr6LxeCfR3mvo6yHAAiEAz8sOIQ+6b2nqZFhLzgQ0kg4S+PcF1qJTMg5QPWB/PMg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2696_1552903670285_0.6083485455238613"},"_hasShrinkwrap":false},"6.1.2697-beta":{"name":"meetup-web-components","version":"6.1.2697-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"67ed45774b9ae668183b1eeebe0bdf0d109fe24d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2697-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-xULIV7dXDZdL/X9xSf8afUSUpLIbhu/K/t7r7NBU578r19GS9XnINzJN0dX13++R2vjcSSbcyN5J3O5m3cl9PA==","shasum":"b3362ba424e6b99ac8ccab6e3aa2bb132fd8d9a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2697-beta.tgz","fileCount":580,"unpackedSize":3276883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj8dvCRA9TVsSAnZWagAAo4oP/RF5R9J89cgyAWp+iY10\nGjcO0cXPCCpc4kCaj5r4R3Z63fM2a1AEzv3VIV1EMQbbqmmXEIaPrXPrrQqr\nQx+DZcKKQhKwlcZG+V3LXj6JJRQxG32dWuvVvQhFKcXdb+YAs/ydp+LFJtx9\nDOAkMQXlTtyCYlYuQ77LQF2JnzN6bteN2KGBa2a5IYyEA4zr15+N+xz9ID5A\nQm5pz7meht0EEneUVay/0d23ly4v5LeP5vuDCh0o21dMDbh6z5ay5XDcVsuY\nDzKtP3C9p6q1PBHV3mgl0zSUg+JGpmhpssuwAgtLea7P544wUfIfXDqtYZNy\nS4xnSSmyre48zyyE9LqtLVLuRDTSy2B3TdIsFEj9TTCR0/oF53xH8/It1REx\niodl6NGfkYdRSL7/+gsHDGnZ8acOKDAuFVSV/msJbzc5OkBT+xJv4TJkAAcX\nmg0aNkhrYLVKw3lspwd2jwPe/cun0F4b0z0R712Uk1N027bnW9bHKXRCk1C1\n8m2MskiZgYAwLnWKHQHiol4GDtsla+pZJF/n/uCrN6wTntLCp9+JBZZXszka\nnpSaZsSseWuOtW6gQyX2Wvv9TruQBmd2wYwlYRZnx3ewPqnlXs+DGpsu/iFb\n8LSW7CX3xgFMxt2pfOiNurkjqIYzGO9ZE0HCnq2wB4/Wh3TLM2SxS/29Z0gz\nHni6\r\n=Kj9r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFoC3fbZaWKLoICmqNQcgXOFp1cNXkV9jSMZbqeFr/qoAiEAj2rPAj6bAi7Lq1iLQ4llTqcXeV8YaD9wNI4J63osOw4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2697-beta_1552926573115_0.6123881422008481"},"_hasShrinkwrap":false},"6.1.2698-beta":{"name":"meetup-web-components","version":"6.1.2698-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.3.0","enzyme-adapter-react-16":"1.1.0","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e4b7c06be336132cf742a3560b622d05d313492c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2698-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-a50kvgkLdWYsB48O5t4/yTW4NdQKQDOsr4KGXbotH5zgRRCYQ0grgw8O+eHxFPOgDUV99xE961aPN1w2DWI58A==","shasum":"1e84db1762a63039909ae1d373e92d2cc5216c66","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2698-beta.tgz","fileCount":580,"unpackedSize":3214642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj9WxCRA9TVsSAnZWagAAFkYP/2r5bSTN4NQB3iBg9uQ9\nRPykSHLb8lKKYfXeomsdJM36AD22GV2HjZ/3NUIfsXrtRZYlO4RWgvzXLL8/\nJUEd2LBK1iRCTM1GreZM9akiPdRoqprSUktHD7zM9FU6WyKuyNLTufmviB02\nYi5gpDQeymlhkWVQKPLUQ3Sntk3ofnepZ6WcmJf3kLNNrYe3LNwkuSSpo1tR\n0nMIH/ZwYx27ZSA4BEJoVU/tKmoJjpoqicJupCDGxrVbZcwcTlQ5W0p7pJES\now75ieZiG5+DTgCEIOesNywElrHVAGQ+G4SxtI5RuQJIcni+ZhNjjClz1KBs\niSLTXVsznTDGsZIdVE0m31KV0IOXi5OTf/NmUHxVvbfxfYrI6kHO5BIkaZql\nXZGyQMYzMQ3HT7+FUta2jBBDyyX7mgNv9mlGTFjq1kh1EGNm808N5cCi1kC+\nAdBQ93QIsjCUt4BbOcIsDpFxYfmI9IROnSxS6HfcHe4qVHiFCXUAlUAqzzed\nFq7FyoIpdRoAQ1ik9JrECdD2ESo+HOP+5hx7iSzzv8iVuLquAPb5D4XB+hFC\n6BhcxPW77+jbDSpUirnTI0NmGcseqANFm2IbeGsjgNWcvAY59kvwv7DDyXvn\nUwbS+aIbTcfNbDVfPgquEeRbTgw0WIgkU+VP9WUHI12358Ks7SAv8JYYL+mc\nPl91\r\n=Uw10\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9pU0JgjmU0nDEJk8JPx39kzV1o1z0Fx/cFJK4uGf/jwIhAMKsJeu1VA3L1uZVyYxUEJQQ13EhiG4Z4WlZyUEV9Pbo"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2698-beta_1552930224429_0.07882251553234165"},"_hasShrinkwrap":false},"6.1.2699-beta":{"name":"meetup-web-components","version":"6.1.2699-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"002f7928925a970dcd18db6439c5a9872ff96b1f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2699-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6s1dT8SLJy5rH0vNIeyd/i4aPXJYhun5cEjYFpgc9n7rAj5eEBM8MF2k80iui8+dlbAJKC00mwfWcIdnzc+Vyw==","shasum":"6d990b808a8cfa88a667b5ef37240ca009239162","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2699-beta.tgz","fileCount":580,"unpackedSize":3282728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj9ZnCRA9TVsSAnZWagAAqPYP/R1OR0/kHt1iHVdGOB7u\nidPHv+XTYWNYjvVj/dPdw5HTOZi/1sxxqxGrw/TZ32NX3fyAg/5JaMVcXH+s\nylf4jTpLC7vFaHFV5NyVyzaQKS1yiWjj3BkhZrFfNl8r8st+o71nH4GI6HTR\naQefEAOMTnriVF7L9rEQQQqquTz6+mVW54xTlG9fpl8VG7NkBI4jE06Ehe0x\n7snX+QOB98QwcCTOpWO9ahbJJKCeex1vCU3fUOWaIbCpkfGArIkD06j34DRc\nEP9u+QE1XJDqEt7MuiyMqR2OHkR/eDPxqa0iYDIbR2RSEjceAP+uXnmlf8dI\nUJ8C1/SXnivj6fNA60VJbyWDR5nETTPT9prHLWsxVceUkqwhb7UAhCvW8cz5\nDRB+icnZWElIcVsG51lbxIPjHBDnsiNCD0KrWA08RbSepjT4wqI2NP0yYa4E\nu1MROyqbNVudIGzvq2drtsgnYMW+XCMF78MPuevLxSxRW8s66ecPnV/YIwg9\nchQHiINLoVwZ4VsXSEhlQ/8TbpnglRabNAESzmIQrR0PIVJNi7K1BbFtfdeK\nYxb6m/tfOUXeGwXsCSiW4fS4rlemQq0KKdfO7s2hBWnVvzSJjKMxd2PAFMTk\nPAkrIoFgH8gAvZCzuUuMF8Fo1rN2yOW76R+yU9AYgZSzSBwf/FVWI6qymGYQ\ny8Um\r\n=1AxD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGMzHCJnkFgbY2hwLIvzmpFRZTDUNA0fErWLdsrKNFUmAiBrS0bDS65tNVDiltOeYi9VaVqAwarQz5sLWF4g7mT8Pg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2699-beta_1552930406016_0.5867334847498391"},"_hasShrinkwrap":false},"6.1.2700-beta":{"name":"meetup-web-components","version":"6.1.2700-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e12c41e9143e7e6946bf9950606bdb9e67042a66","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2700-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8TFvIP3M4f+irfstVxIhhR4wUNhTjhjLS5/u5kXwtBMBsFiVYs8JO7qvXryxh8bUlLEQ37TDEJq0RCpYvPR8Og==","shasum":"a9aa26ae478e0d07734003dbf9bf2cbe70880088","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2700-beta.tgz","fileCount":580,"unpackedSize":3282719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj+h9CRA9TVsSAnZWagAAa6sP/2cm2UKVAVOfoNzn2P+N\nVL8e65adpH5hI8h0uwrqNrbo4zV059+qlTZqRDhnChUsUovEztQR3USni4I3\nH+XTX2aiU0AryPtMJ9m9xvDvXzdhaCGOCsNn9n2ew7pwqFbxP2y3dtanPWCE\nhD1hRObEWikdW3Jluln3K005CUewvADIT7mi1hawfda/ba0uLGtb3mRLBfjO\ncBAyxhL03Djf6RGdXiu0cBw1fQR3MnRpir8qM+GBESOCTJnpfaKX5vuoyzZU\nahV3A8Cb2edSn8aHG0qMOg8hBS/+kWWRL6iPK+vaDRTwkMUnQUrW3kD5DyFi\nAC8bwx23K+xuopFVMyUpY8xN8MXavxHhoDmCh7xfGQIbhUj8nRg4fvt2B0Nt\ndJLOibfsLKliBhKbaOEMEKkCBxAs6ZNGt+9XjLepLGqtkp0lZP9/OLWUeMkr\n18aJPMBn9mCUZNfnpa1QIeEFB1kPtqj6q1qFHMWZNQx5huKeQftATRB5X/XW\nLJKo4VV7bQ0joC5eoYX4uFiWFb0Bieodymt7c5FpB8IX8e+Sh3pxUbswr/Tl\nsW/8p0VLa11cM5A9hBCgIizfFkcZhVTmNf9H4liKwBNtMEHk/CVkqK6pVXht\njz0mps3QYFOcieUU4lI3DZR4Ofaol4jMHBjBB0MgbBk3aHPziQ2SbAOpyxxH\nCni3\r\n=GfmK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBnLc2tyqAIvXAkJvT35fJTc2JENUl9F4EEeYOGfjvpwAiEA+YRvdMVYcSyWn9m3FhQkte9I4Mh/vRCqr94VHP81BU4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2700-beta_1552935036235_0.4223910200156096"},"_hasShrinkwrap":false},"6.1.2701-beta":{"name":"meetup-web-components","version":"6.1.2701-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0893165ba82d1c73bd18564ab9c7ed9de941af46","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2701-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qSvhz8pag8KluBCNRMYlLPXlBE9kykuqQ3pSgnoQz+kBKRbBt2hTUGna/DtudyM0Rgq14R+LsacDDOS0uqCULg==","shasum":"2334f227b4b868315010830810ee5fa81fd1717c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2701-beta.tgz","fileCount":580,"unpackedSize":3282752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj/wkCRA9TVsSAnZWagAA7/QP/iB7Pb6zpEJxvjM2wwBy\n/nKg7LdVFgtiKNzqvb9GL8dw9vWP7tYu9ntpni5UpzgKj4uBoW6PY4aBjrf3\nKha2D88A+IJ05SX0xO4WVFBYYuNJfaU4o77P7IHeYnE/XlBOoy2nA4zK2fjs\nzvRsvI2uJ/YyS9/IVdkcgq+2HtDnnbNGwzPYtZWcZ3uijYf/6ae9Ewb+4LWu\nrvbaT/0lU8472ScqQbZgN4SddjisF58ccSh1qS6NktWWCV+t9Pu0Emfkm7tH\nGSOBiKdrx0Sx8FhADN+cDFGvcZBCEyLDAmvwpl8qVu3fps+qhXi/+TOWCGgI\nBdrcqDgaEUJzopTvWg4xNnSCLTC2YhnAmglHBEtQ4UIIzeHA1xzzgpo52Z3A\ngr3/U5KNn1q2Dx9PTHZXNjYeD+jIykuJp7cLieBxHuEoRtp8Qto4V1Uy3rzH\ncRZ37W5N2TRxTt1OI3PgZnCo5lluBE26YezaRjqAk4exMPLJM0GgrCmyHk8L\n0mpPP9aCUZftQNS03Q/t6EfX8PchS+e0R/KYzt6VLnY0NY/TsrWjYSCaCGwJ\nj1Ro5ITNIp2sAnjlHY79E9OWwZh2yqPa/m/vCGNABxepbwzU2Shu+GFI+P0z\nobaTtQF9ZEwxCqkDmqhTJZwfCFrynFFTNBBVRvWSL9FMPZCJdAZp0JgRv043\nxgxe\r\n=u7wZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEoT+ux1OzbTDop1pLoYHRSQnhOFlIb3UzeRvUOpi2kWAiAx+BbDd6V+HLdE3QStOvpENOPMEoEEFZ5ZafzAOWW5oQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2701-beta_1552940067445_0.8574449633933152"},"_hasShrinkwrap":false},"6.1.2702":{"name":"meetup-web-components","version":"6.1.2702","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e3650f2460f41b5990370f2046a5eb4397f4ae8c","_id":"meetup-web-components@6.1.2702","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-69jqNxWT5xFXdqtncuhiMwXZh6eq9sIDG6vCXSnp3Lqyjs0e/s1if9iyBxrCDEuwN/EbPVVaY3b+AqoIz1W8yg==","shasum":"90873b18a0436ac98b11552f06c9893de0f4cc3c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2702.tgz","fileCount":580,"unpackedSize":3282747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckBSrCRA9TVsSAnZWagAAXeAP/0Z3+VXYSznEfDjZnstR\nIueVC4P7UUg6++I9G9wwx0Vfm4C9noSuMCnB01obI9wjgDPOyfGJkWaIzKXx\nTIIqXA9RBYgwJS1lFgld3DC37IQPq+yst8Hn0/wmKZslkakZuZZd/lTbD/4W\n5xzZpxfLBVuyO0uhrdlqt0u6RKmz0nt2RzFWbFhAD5leePAki2HSPzwFgDEt\nfoxlaM8Ic9yWnkLjbuVzm9EUg7/n/J9211YIhCUxX/38Id+pXyzsHyrMxFZz\nnZua8Ya05M0Nml/ce98BgG4rWRa++5upz75akrJkFfY3zq5mlu6SYMUQnn8K\nBzvE2jVGxn+aWGQsK8xksY+8XqXonXurxp5EenIf/YJ0wn4m/4mfW6t8llFg\nPnjHmLVvOftWo1TAw0U6J0Kvha+6U0yfqToV51mdjVT7CPO0s4kb+IT7Rz4E\nuCMDwBcs0IU1yuV0KN2EPuPHi8aPdQJLRA48AucS+qvibpN1pJ6HFyzeeC+G\npzOWz8lL1NIPS2lKOUX6zGAv0OyF7Dcl1XJl7qa+wcnUcQnW1czjALfv2P8V\no2a+HjXC98QQZos+BROjbmH/TmV96cIQktQ6iaZWBvI7lx04T+d+YHHA0P3A\n4VUHvjbDYSRRGcZw1szUmw/G1TDsNZIuZAimnmkodhq+boFQvKbBKxQxhCpb\nbD2s\r\n=SNME\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtYPMa+MGSoVi9nuv3HjhPaznNLYCrZumwTMfGccWpxAIgeVONrabIwDrTlvN5tcq0HLkY9HhH3S5ex2x4ZqUqTbM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2702_1552946346617_0.014771047075354149"},"_hasShrinkwrap":false},"6.1.2703-beta":{"name":"meetup-web-components","version":"6.1.2703-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.4.7","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ff7d69a1b0a78187f27c7b2e6ff8afadc9ef0e94","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2703-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-yOEos6oiL0dGpLd1RWmtTrVnxzZja2aJp+jCkA27NfiiYCXt3dj0/d1qsZvbzPac6euOHoUOBA4RqnLxVh3AQw==","shasum":"7ad3fe88fab50658017dfd8b1dcb93ea8a18eb76","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2703-beta.tgz","fileCount":580,"unpackedSize":3257479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckCIqCRA9TVsSAnZWagAAJ7AP/3RhtVKirEF2K7v3f67H\nL2iPs0ty2Z4YW9ZXxIs2jQzLyKd4nObcddRezwaiTJdQlLWSYwYs0MyhgVnI\nwvQxPw1Za7BOVZSfa6qDaUagP/oUaSjX3GX0PmtGfBIIMvt9hZ7ndu5ITOFl\nwSt+8+gFm+bfWUhBPiGdle+unbTGZwSr0ybEsYJvwAyixKmKdbGLj9O8nu3E\n2FpD/hnf+/LWoxgi78P41qTK7HJM8eS6+tDIF0rD49I4cYUfB3gdkV4LB7R5\nubwHNiQ8mjpvnid22TqMqUEFqStdJc/iO9eVsSnW7Pl2+eWKTGVAleqRtWiS\nscAWieJa47mD/oznF2ydDMKdrhB51c/XifKNRP1ze03+upMjLmDSLG+EpQE9\nDM9uxlAVqMkrDNhqFwr7xaNxsdOvgkjJo0l0sQKZOojtfL9DqdlfrFwdbhsW\nTHms7D91daO+pc6Hy7ji+ra0Ngv5QlZWkmriWnjwno0Omiym2672v2JCqrac\nnoDT4zurvPaGLgVCT1Fm6ldxUNt9cwe1d9OKdZXc/fSpZ3YOzni2O1SaSZMn\n1x3fqFRCKb/vHzAPfP+EBONTQKps6Xn6r5R6LWigE089QNL4uLwXhoycclwx\nd1IqIB6mY6TVzvUibt1HveGPMIWfAye2nBliZCMcD/vX+PllwaGY0OaXqMHl\ni/c+\r\n=nMBP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXcFWEAU7KNq8eE5RHzY2f2Dv1y9kZbDSQ/wNiOjKphAiEAz5D/GDSwwWJPuLL8CmixkPe3HB2y6h4d+qcASvYXxv8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2703-beta_1552949801328_0.38028116993651007"},"_hasShrinkwrap":false},"6.1.2704":{"name":"meetup-web-components","version":"6.1.2704","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"efcecb659a4218f9b2172899436b231c19ff0ea1","_id":"meetup-web-components@6.1.2704","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-3tRsd+udMPENxzQSDDn7Ihw45L7Hq8ONr01Ex6+LXvbG6BeUmDtPZnlhzw1Z18Luy1tfsrPlN2cnYFOfjJDvhA==","shasum":"dba7aa74093bbbbe0767f4dd42a568e3203f1757","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2704.tgz","fileCount":580,"unpackedSize":3282764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckWWdCRA9TVsSAnZWagAAlqUP/0lYdMQ9R/j3gtsoQW1b\nTkTi3mlfHiXuDf2nSy0ZgXK955EP8Emd60tL8f1lpLUQEAw5CFFhr/oRAS1j\nbuCepCdAv/LSa/Uuxd8Houb9hHE832ySBr5cIa7AtDeELGY0vCyveZHOJ13L\nQRNkaDtumpE0A4a50c9FI/19FMcqxKEx38qAW/1TOJMzfFLsWh4swIjcRdti\npC0ZjajLSXnJp3TBZRACIw27xrcuQVbN2YsQaJUm67epp3HnyGR/9BC8QPbp\nmPCbBmrLc3UbSx2nCG/Qhp028bQE6I72Ey4OfncqUj2C0eWZJjpkyOYLveV1\nOIRQEWygbBSu7HdUGuBs9Rmu7jRseP9ImneHUqCXPVGmnebd4iWrtdf8GKlZ\nF2AXEKwBc2iC5tUrZHBs+XWfg2og+gU2x++mXYQcL/k9GHOkgusV+KnI4rHs\nPNFMm8YcyvuJz5aZTj1gNYmm5+Khk2YBrWuMVZgCAmPWLQA2HFuudAdpKJj1\nKZL5GhUbdDx8IZSzJ6sG59oN93av+Z5OXt+Wyb4j3KJylIw9nb09pgjDZgP8\njIFSyrkn7g8EAVSEilZ7YRC/7g+lhFk4GOIq7BIeT+EVtYpnWyUk3lJscOpN\nlNEiAD/qlglOMoW0Qj5U4mai6UfYXxtJcHmHiQ649P4ZdsH2Q10DAWEDaJH8\nP/cp\r\n=XrsO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDj1BsjtTIuH6rer97IMU0yeQc5Pe7MOn83iWB863hIgQIgLwfoYENeDnfDqrfYc154ZZZQjF7J//x62A9OtkAPVm4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2704_1553032604714_0.7874557677759986"},"_hasShrinkwrap":false},"6.1.2706-beta":{"name":"meetup-web-components","version":"6.1.2706-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ea5fd779b23b6951a1b07c319c27d6d3d1639a52","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2706-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EemCNZvEsXZiW3xKks2cXAad3W5SdoyGJ9uH9AiN6JPW+V4LFEe/NleUZV2ThpaHgUSoxMOuq7B9IJ98HhJPiA==","shasum":"999fd5fae4d62661f4878ce4aacbcb6d064183e6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2706-beta.tgz","fileCount":580,"unpackedSize":3283649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJck626CRA9TVsSAnZWagAAqyoP+wS1V80wyuFaIzw7sdgo\nfKHjxHdi7VVWA4mZEw5Xuq9Hx9xC20KCTkZpTDIZFlo/QUgUpvn8vczs+5My\nxflRXTEeNZzPifWkCpYZaxPlXtj/9dDFAo8EqosLQxom/aqeFfqIvcPeeWte\nNEO5WHeWKdUSu84dZWKbiTFOML4v7HGGkLtj4r5fYLoMWb8FsTcSBARolmo1\nZFfz52x6BIcdBBeVd74/cyivh5tNS00v4lB1h5YEtGFRBOE7HBGIm9yWB47z\ngaCH8PK+mubnBrlGHA6HxiAv0n/1E2Fmk0dO9k5/1kwHHHg6xh/4ULOr8KFs\n6wUM1cdxOLcPYAJFdPFCIhR5MBXrt3zOu2+6cm5gz3hltfnKQ6kJ0pMmm/Gp\nLC8DkcHMb1swDInmsGSJvtZx8VmqmD5XPJ9gw1lHW08/HpEqxV2aLUUwM32l\ny/4luwwso8t7u6U4btDjckqdS7mSdjawhHL9OlZK3CfZKu83lqS3CtkRXQ0v\noyQzxah/ztjoO63pYdjTtGC3o3k6dOB6TQ8DyQjo+qRjOG6SWpOqOLsKULMe\nJgGbow1qAqqfq8Uneg0whWHiEj57AigCjPK/DJTXc7h7eiwu4qzq7Nr/HTR0\nD5Fng5o+iogLoTOubEl9U8BlW8KdPAX83FKVPS03m5U+iPFz+JEgZ0QrVsaW\nKjbL\r\n=Qldw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcfbnuAHmSUtW6NxkZ3SfFu0WETnFfcJSoSBXrR7gYPwIgXta1/lTKXOXApubUnhqRm8UIiczGUso0VwV+x1mln24="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2706-beta_1553182137942_0.8864509082648084"},"_hasShrinkwrap":false},"6.1.2709":{"name":"meetup-web-components","version":"6.1.2709","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fadb89a22c2daf3672df35cbdb0c673fa59c91c9","_id":"meetup-web-components@6.1.2709","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-reIBInfpv08qjw3nGZqS0wso83xc9qGuPXeTM6wuzWBfTt5lFDLfOL0cXNhGJVDOHoXTdYsYY71b0friouKQHA==","shasum":"8de99268742e9cb7ec49ebe0e29f9d4847fb8294","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2709.tgz","fileCount":580,"unpackedSize":3282776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclAzuCRA9TVsSAnZWagAANaMP/2S6lXpg1rkEJUyXc9PW\nwYJIKfUj8hTq/fcrRWUXaO1oHd6cnalgBTwJEmFOxYV0O0MioiA70Pso6h6W\nk9cO/ti5zoowFHaTfSe1lv07daIiIMkBIA17/hr2PTbpcdrGTzlHdu9KinZ4\nAEFf6QHmY8N3yO8870+Zst/Z4ieUUYzFC4hzDoWo4uz5CzDAHfq5DdrdlsNl\nBfq7Ct7ltBHb8eiiylZMqwUKhmLRvUwQT1DqR+taStvSlJo0Vu5rQyfyB7sg\nDIVofjwiK3pvKmcfHWTofJMAEipLKdNcC8RmWEy48KbUxkgjVoXccQO2R4QY\n8JhR3ygtCy9zIYpKYyKCFISyg3fZk4twPcvaO4DL4DI6klaPdxBM9kzXHla1\nOgplu1B4rLACWG7sWfAxGfWHHsnG+cB6pUu3ineTKjjM0cNezAexdljHrtbd\novfNqJMKhSDMwDyiA5jDwt7fArPEASOcI6grtLrtjUGAUEbXS+Unnvs2Oi/8\nEh9CrkMxW43BbqGoBfR9nztJ4KmOqvoyH6ZTIiP1TyjAlsJdVDtx9kljiU7g\nJqwiEWDTU3L4xK6McvjzIojJURtnIMF++azwtd6lSlne1C6QAUl2p52spS2u\nuP4GwHwuOECN3sefi5fb6GrPwXTWU6AZU1E7wTek0mJP0hkcLTpks4/qrFG4\nj3kP\r\n=NIK2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRq+rDk7J0vMEriJeGoyIZohb1DF22hStZvYImxGUVagIgCkavsGARAIj+W+f5/HiQkFfW0zdKNKVWHtbyf8DdfkE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2709_1553206508942_0.5244546432795638"},"_hasShrinkwrap":false},"6.1.2717":{"name":"meetup-web-components","version":"6.1.2717","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2e15bc781258eeb2e67a30b6a3fd17928ff70897","_id":"meetup-web-components@6.1.2717","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jiSRq2/a2tNVVcII7hKl+jUepefCYBSA1ZszBRzcv2pLqs5dKTwQUFc+BMMBS19AQAMemhgo2snnzoUZzMmvrA==","shasum":"75a29401f1d5672b01283909a4e7c9feaf569955","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2717.tgz","fileCount":580,"unpackedSize":3282769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclULLCRA9TVsSAnZWagAA/coQAKUHMi/Yh2vE9X68M5W1\nhdSpqQNYpZvOr5+V28AOFcphuk7qSedLvOjSwHyppIEArkkzaFmNaEni2hox\nDV+wqddKGZ9MUqXAdB5z9cs2tFJKoEm59o3bMK6bQ7FopXU3fxbBykIvF/vA\n/yJdo+ZpLHkN5i7tg3fYGoGSdKA18y8J7aIDrH2Ixx3JD/IF6wRtlSugYZyS\ncH9ivxl6PaUH5g/3Dn3m4p+yUJOhGE/nYdDMm3VzWcOwTWdhxAVqaMNiIEzy\nXqfieseWE4LnQFzM/HoanGh7HC8Szq624KlJ7FroRnulE4qOPYfMSo/xQObq\nfgY1A/J1PtjzifBXpQs3nAcb+4qOO1mSWqEWsYuI3o6++A6d6WoO420wrZyD\nOke2+IWxcXc7aLI3vmTM0WbGNUTSIO59NoRgh1tWhWDqExpgNAwP3QJkBfoa\npcAzwp8iSIqvlGT8ijKDO/oh17MtWflfoE83Qm/7ILrQWeClqDjzR2ylO7AK\nLNLrj30ihQVDrXlyl33MVJmXETpnRUeNlkDc5BkCC4MvgT+DJzoq7YKO3JqM\n8kC5xgUbSD/GoCz+LtCg4weRDGERNvJeuN+vUbkU+6jN71/YqeQrQFct1tK7\nMjzZKsLVUpyiFvn8SjyeDITZfDgI0sdaUyNcWJrsd8/GgiS8Im04+fbVV0lc\nPMnl\r\n=TaTp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNq0mATfhXtBNHORyLkHSaWtlHx+9mDx1kz4nOXxcidAiBK7oWUJ8Lvov8WrQB6o6IpBdx7NB2f/dYwVOOOwTu/sQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2717_1553285834457_0.4564949147817563"},"_hasShrinkwrap":false},"6.1.2744-beta":{"name":"meetup-web-components","version":"6.1.2744-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.5","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"704a5bb8a861bd724ed396432bf9e46850f28e42","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2744-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qHGRexj37IzDaHWJbQXguWAHuSUZ2tSkAOnTov5U6iO0FiLlcH3IVSMhV2xDgUMqVuDkh1AxyhrS8wECDjETHA==","shasum":"2f761b0723638b68d5aa8a34b40d75770a5d784b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2744-beta.tgz","fileCount":580,"unpackedSize":3213646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcoijHCRA9TVsSAnZWagAAqk8QAJJqw9TsM0491UFFfFqW\nZ84895fzU1hwhx2utFSR0sjgv2meRwLvCDRsMCnXM21qq+Q3gKYDvP+dCk5Z\nXr1qsQqHbYB/4uxinLEMbLblH/iitCefw7GTla6hyNjfy3okVPnMT1pvFlMG\n5Hla6WAjmW7DQNT7w+kyZPxc0ebsaDQ2DMu/urCt+sVNj10PXj39SBOSbMpC\n5/4HxPxi2EJhA7frThouY7BvbwTNMq0Gf/52J4SANyKO5OckMAwVNZvnPNBP\nTsTxMi5CHvw/VBxgH9aMbH3iUjOF9Hq2ik0ZsGdrAT5WeQ1tHQ+lX0ahU66n\nL/R7Uh9+GU02C9sq8XoME0jBU9bfHyi4TrXxxYe4pbvGiulRdtBgI/hBRG06\n+xBOMQgl/VJsW7Gb9Ri9x8h9jTX7JRqVA8ff+/eX4D54TtFsHqoGOu2Nh7xs\n8jxLQcd8My1yaZZZx9hGgyQZVGWwQsGreR3htc+SO0VecQRYU1HGuZo4uq2E\nzxgHAMpsHwPuVt6Cn+8/pGLQgLsP+ModqTEvjvVBaRp29rb1g/6ft+1FQ3r7\nLa15SXiFaxP7z5+PvQ9wsPzuAwpWDQH34XEyMmNs1z7X2JePEzDy80Fu/HdO\n3SHyXc8WoAOlW4vqIuQuOhozaFSOKsh9wOcmEfpIrcCxN25VhIvzhiJNOKnb\nxp7w\r\n=HhuW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHxEfJyLDjyCMykbwL45DJRHhhf0LJcsNqaY6OjBdHKGAiBm+COgJL94o7JxYfUZsQkOmc8uG5/IPynguNElcWMk0g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2744-beta_1554131142511_0.4572502535211176"},"_hasShrinkwrap":false},"6.1.2746-beta":{"name":"meetup-web-components","version":"6.1.2746-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.5","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"32501725b34902e6cc82c9a45da9fce29e9c3d30","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2746-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FLR6CWTw5LxvJVhouPl8k20KsgipbrUjIcyp+boTXZirexGaakWqICpL95ZKesveZJSQgHWukAtzOHClo1hBsg==","shasum":"226375d9a820fde990014818f69e2c8e41da3cfa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2746-beta.tgz","fileCount":580,"unpackedSize":3225074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcomp6CRA9TVsSAnZWagAA1Y4QAIXa9rq4WhocyGQFYXqO\nkJgGI0Dmly81xPLby7WXehJ0cPVk8Hz/obV7EemGJtdljZLU6Etr43EGSNLc\n7uPJa5jAUCzSbuny0VapoOQDd0hBrUy6fIi/D16VTLNzYl/eDkb8fTKlyVPR\n6bfDxXgavtDKYFmRoDQHX+ktE3YUKANybnGMXya7fD+BLQ3hlJz8IUzPGK9j\nIJLPzG04iCFUZD6tyeXCTS/tLgb7zFggtdkJogSPSuI0NEol2b9OaO/fE5dB\n1Eyh98trs4GhQ2ol+t9L2ZCQJg7usSoa3iEcxbCAX//d4PcEi8UHqLeXDzWO\nX0WsLIbsn8kanlS86JeH21vfCjFYvYP28yXuzefNCE/aCCQ3sraoVZxtNnuZ\noSHzISznaGYuN8+u56w84VUsBncYzjwWMSpuTEwN68leMkgjVi1Rk71Ysoaw\npqrKb1AlRilWuyyFBrsQZTv9RC6U0K9nbfyIpVE7/b5NB1Ie6nky9x8T8TC+\nBq0iZW8vXNXMY8Iv6sP1P8uk+PwcOIFeTDsIi1lYH5SgMsH9rBT3pILTPq/6\nO6Kd/kcqN6SiW2GN9DKOF8QVkOj1oWdNuIpydlrwPwmMd2voLHiZjEqb3NbT\nMqSHPAkTv2tCCw3YDMWt5sUVbGmt6yKPKWmfzeoHE5+/yzKfFo9Uml93JBn0\nR9Z0\r\n=USNX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7112bU2p25bezLQ3ZG4pGqMlAMTOHcaPA0Z24swUQCAiA57zHzxSU3qQPP289/kPT7M1bdlqxTz/WqnJI2PtTHqQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2746-beta_1554147961673_0.7697816387995806"},"_hasShrinkwrap":false},"6.1.2747-beta":{"name":"meetup-web-components","version":"6.1.2747-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.5","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3ad493c6aeb68303a80c1af5d7f3b986806bee1c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2747-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-bTiN72Epr7ixgmvB3du90T0IW22nZy2VcviK3OIEQzad4tFlndb3Zbg6/pX9ule1UWVhO2eDIJgSY+BQsyUEeA==","shasum":"293af83b9a382bc35237940f353d1649fb01fdc5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2747-beta.tgz","fileCount":580,"unpackedSize":3226829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJconE9CRA9TVsSAnZWagAAU9EQAI1OPArvuEqjWSbK36b+\nnJMqGJ9u3nRrZNFA3wH0CRJ3cAPbWCLmoGK+ayeTWuCF3QoUV7yk6IQOMfaC\nDd/HCjTCZyhhW3GdW1778/ABP54e6yFhiN/fmzOokVgckTw/Ei8et4ydlioP\nanue1+9MzqhpJxKtmZtjRqCFNuDtvMv+CIZ7KheUOyoiyLuyI/TVcZchum2C\nDsd1IAeZqCzfm4ERI+Mcn+/gceMV43eIt+Ho1O6mB+3OphGCuYWSs8ON52Ti\nX0Sn/kLe9jDaRD1SwV4zg7+XRgPo1NDc49ZRN1QOE2EMAWXWSlJs5Lix8Tcq\nfbfP/zkUSsGCVv8lEHnbqiNPkY+AAg8cZht5XnXCf/8t4hH/lQ1xeYS291jq\nAAPrVYXHytWPTmYeTGHtZTLU3111/S3SuDsBh9hk50IhRCzfZn/Hd7mVjh4E\nyl1VRHwcCZ1nCWrKZdLOTXPz8M/2gxoNBWs1IXMydgBu8UiHtqNVMcA8+NXg\n8BnTyMx7N+SyXAO3mV4JsfzB88kEPOvuf0rg24zIZIRFXkmE8khGsN20Eyu8\nA+UVKM7GdUWFqXLFkdkzlVEhZSd2Nl0QU7dHN5pmK7ADRI7ydsminNLnON0l\n9EP0hu3XtlOiaELk8/h9yVu7FnYnlmjUfXmotiLbpOhgAhJtddJYhW35IXMb\nTp/u\r\n=FtT/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLevfQ+gyXvJbALuPidEG4yT4aXMTzHknAIn2N8DphWgIgUNWdCdPIvTUHPlQ6igIUxREy7fXBbJBGuMBjFW+7628="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2747-beta_1554149692487_0.3569832506159274"},"_hasShrinkwrap":false},"6.1.2748-beta":{"name":"meetup-web-components","version":"6.1.2748-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.12","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9b94cfafe36a41c6d71796589d5c5c0ecf677072","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2748-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DZEzvqEhu0h+17Z/lTdps0mKklKHvWojUVU5nElBG7bvjRHekUOxFQkFf7AB92znsMwxi5co9phyJ7wYg1mxvA==","shasum":"e70cd89e82aab550cd49aac71b7a573280b30e30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2748-beta.tgz","fileCount":580,"unpackedSize":3226812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcopLOCRA9TVsSAnZWagAAy10P/3n832hmTi28NtwdUlLl\nxT8QYS703uVzwe7XDsZUqS3iyFQrpCNjcIAstm2jsO5NQKPJFCB/dzvyaTzW\nnZeVnJpM7XAs6O5evQqZ1gkYyPHqEg0f3ei20gdJhmjfDzNLwj20LJHVr9sw\nWW1hZ0SSZRtZpoxQWIqRXGC3TSPGXupMIp2Tjv7I6QfqkUzQ9CdEsv4dJANA\nXOHrbnOCf+3BNWByAPfIihxU5HGkitdD6Cjq5rvirSKp8ftVowFiunQB75Ju\n8XocazZrl3Kpccn6jDgVmjLR8nRcoArGw4cuiMkbO4Xk8UfmphA5p2zB2Gj/\nskVzzoPrve/SAndFteI4+x0xT8/DffK8Gg/TVILPG5afj43E36BVbrzGRBI/\nuTVUKyBTSOZ0LpADBmM50hjYvCb2ONxD60ToXj7xgGG1KnYIQdbz+yDvaosy\nOzF4rTfO02bWKPJQ1s8GgtRS8/2VpskvS5Ul0XNoTYXXLZFEKLd3ni/R8SnW\nyQ+rlyK64Y3GJ6AWRYe/FFTiII+EhOybbZ6rlCssiaaX2r93xrANIFLmIDJy\nKMy1tjmxyNNEG91FMvN5YKodFxZOBMlLFFWEXGwFIHVB8BlgV5KsC9Cn5+rc\nnq99SzIiSfK2tUN8s1qO3uEfrkd7w6UQJvqeL3L4TBcw1V1OGQT0SebX2+WZ\nPVsA\r\n=dlkH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqNUQpjvVT7Jah3hQCrTLvJdWDYghkMCo96m9wl3a6ZAiEA8DE6hTsl7yAKpCCA2O+/+WzcF9S+0J93UFecPrAmqaU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2748-beta_1554158284754_0.07607993745536668"},"_hasShrinkwrap":false},"6.1.2749-beta":{"name":"meetup-web-components","version":"6.1.2749-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.14","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6ba01cd133cbaed6c788ba1aca96bb5142c7d081","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2749-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-6fVeAFZ8PComNxmRViAwq5PZAo+fT3nZY8/Mhqjd0X/uq/1Zzgo1VqUfWxVUbAFgIL4qLFSfyHP+dMLxz2ZKfA==","shasum":"e50fdf76606753a1d797d243bd668a283df874b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2749-beta.tgz","fileCount":580,"unpackedSize":3227111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcoqSNCRA9TVsSAnZWagAAY+oP/jkXLojQLPJiLfUaKzDR\nfYmi02S2pAXzUvXQfnY0aE3BiLVk0/uswPS9blLU95TFZqICcqBF85Hq+ycL\nCTIgvmOOXcLdWbkZ8Qnty3CeaY34fQHKvLk0cL9wlYtivWFhv6QbxaZMXZfJ\nnhk+RGufQjGB87XSRx9/Fg+5/RElD7dURHqVVJJVyx4Zox05bsxqdJHXldWB\nUfgelwKMdl0LmZKhRsHHJLpkt+6arU5N+wNy4af8BnrQ6qjqh3maCc4dbSmm\nFZfFPt0h52womzIH7F5vMK6hmmYHMiJG9TryCiifmz75J95mCW27ezEAwVkv\nOXCPxRf8Xi+gWIgQw2Zavy2ZOdCkQGe1B0TXdsEoHNVRFNG+nKwHvhkIUgsM\ngFxHX2TkobMpij5bRmF88EmoohJLfzZ4Pg+JWcQAeqiWxnwL2xKR7+KBHonB\nUI78B0ri1LVcDjGTkLZkCPO2WrBZePmwmrNTLfcMKmFvdJ/N53I55gcAVTjg\nkhuKPqZ47cfolDDskY0oUkvi5PqdAGgyJB2LwowKJs9aHbYtqzfvr0eFuXXa\nMOlqFkIOzni0JItu6fSDTSiJ1MCqcJNAy8hiiAhb6nzs/oG6ImIfhQm51vDp\nCzIbOzwlXDfW5lCUVtxp5l2gs4UuCpUsFXAUQyPUHINx28pFWPyGVT6jaWEO\nmXtB\r\n=qjP8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgjSC3HTGhDod3SMA+pj9/afgBmRXC67BrQpya2fGouQIhAMvIrcVtx6oARxsJVNyPpf8Xg85D7v+ejlFWYOxwjVN7"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2749-beta_1554162828765_0.004736095111783856"},"_hasShrinkwrap":false},"6.1.2750-beta":{"name":"meetup-web-components","version":"6.1.2750-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.14","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"670bf711ec2cc60f68905db2c8a0bb21ed5766f5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2750-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-uUVdfcPPoq/onCUjJsmGhumu9Btyzx++VJE9eZIV8+6QiCuh3g9vnZIiPYyuuuXC7mlQ0GJOU46O2fsTZ0cSRQ==","shasum":"6876a206d0a07bae94cbcafb068b13ccc86ddcb1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2750-beta.tgz","fileCount":580,"unpackedSize":3227111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcosCjCRA9TVsSAnZWagAA8lwP+wac0iDA+sJkY/0h16iW\nG2niO/DSJfIRpF4GCs0sQo6yXuCd1b1+/VjINW3x2+3IyqpeyJho9+CmggNY\nuS60F9AZ53VUqapzZpjps/VEle3JGm4PD0TzvNoUO+hqCAlMf+YicM4a7GBQ\nxmfQYXt7BgKxy+b6YA1RvZXPb2sCoshWGS4WrRjpugRej7MCBzZlkUyxe+4r\nh584UdhIs4UqDXtcpNqua+0T6ccelCHbrNdo9Gq1Wkxgq5tQX8enDueRBEUR\n9L9EEVWd9n6XQALhkBb2UDpqvdPTiFBR9bay/PESo/qS+kYCasr97e5RUnT/\noxY6QJdZHf6om7IXgaAa2Z1WqSJbykKgZgtNKn/SJXFCIa//z/dp98/g/nBC\nxsCvuJyeIxfKKexea1RWIJKFrf9s207dwRvjQ7bVVFtJ7502uQH7KaHuao2x\n9LJLXoxktbGDk11pvwGNMEzJ3YB7E7mnS3vMzxcBdh5OR/+10Z+UqdNLNG0e\nN+UFimkPaINKbVKTNsMgCFqUaHMi8x3J21qHYHopJQMEeVVtW1c2Rfd/NDv1\nGjDSfBTr/fIaVe6nawzhDV4VhyFj6Up9N72CaA2ASVWlcWetR6vpOz123cFP\na6ziE9bslVLuIDwbXfNe/MbWsg3ZhjIaUQ1dSzBO8Z/BONVgaERu9oPZ5i3A\nyA0I\r\n=FVUi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8AO1D+xlCHBTuxEoB8v45hijjs+t7YkxO47sYpej3HQIgKTqV0rMAbvYSa/rpt5avdVHGMbYFipmW226wROiHufo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2750-beta_1554170018111_0.23387806587551974"},"_hasShrinkwrap":false},"6.1.2751-beta":{"name":"meetup-web-components","version":"6.1.2751-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.15","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"71989e8db149f6357ff3c21832fc0c4a7b01b99d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2751-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cQNlwBeMhl+BMdA+0e9I3EYmZeXq6nlchcreCXAoMuiNm/PBC0q1zX3qkLTjuU0FilFBc3cxRqbobYJJ3EagjA==","shasum":"758ac9d2ac34582de565de286dfb519af3f3dfdc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2751-beta.tgz","fileCount":580,"unpackedSize":3227111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcos1BCRA9TVsSAnZWagAAiogQAIhLhJ4jXA2nCKgwh7SY\nAA+mOzYD8irYh9UVQeLKfoO4z5B+JJUnNS+vKATDIJK1B27W2BsFs2nOxXIz\nJfPWn9xXyP/3xDbpODuFaT3vtj6TqOfE07F0XfzPDryDvKo/zJNyc/6p3eNF\noZ5FhRosogVOq4bDyjpiKKVS1FXFCcWJaAIIWcS28VejaQ83kO230OeOALBQ\nk1ervMSxUN3jdNy02HVmiDDuAOmKbPgyqqLhfdMzPCzN9vyIhhVKmtR/YJnM\nMPOak5CGNfuIQfvJ9IE4M81tUNpsgY4WASeXx+7zd9rLVpIWjmUR1XN6MLxr\nYIl24bguEZ0kYZPUiOjqBxc+hKthIh8KdqB/RzJqLDkOsKpxFe7tf3ukW5AF\n/SRb4nfMd83YmkFA7OLf5aiSo8RK/+65bExkjnoelCvZSI72wxWODT3z3Heg\nUaIu2tKOQImFuOVbIxDGSp5a6wTBYKoSJm94iFF8SccnhLcjE2tYVcSBJJ/y\nwOH7o7AiPHzo/VJyQ/TwshRl1wk8I0AL5Yax0ayLWKMiM0xqMACz2Li2Ma6c\nwY0DKXK0cwDcTVNjb5ro5q+YrO5wdxicTjZndBwYwhgsiUxdmzf45z7Y9zfv\nCQwu/3jFAZOoMeHmyqAwbxkYvlMsJPKzPMJrQ+1MXvl90IQ3t2/wpbpWJ3gM\nxRVd\r\n=FV3U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICLGcEQL2nGVoFOLTGzIUZsQyLhG17rVHSkGvMI8jB6DAiEAjbM+E1yZRPgrdmq/xMvPG8IRvOB0W3fea0Aa4JS3G5w="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2751-beta_1554173248746_0.8818128294346133"},"_hasShrinkwrap":false},"6.1.2753-beta":{"name":"meetup-web-components","version":"6.1.2753-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","coveralls":"if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && [ \"${COVERALLS_REPO_TOKEN}\" != \"\" ]; then cat coverage/lcov.info | coveralls; fi","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base test:coverage","test:ci":"yarn lint:base && yarn test:coverage -- --runInBand","test:coverage":"yarn run test:unit -- --coverage","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.5","js-joda":">1.8.0","prop-types":"^15.6.0","react":"^16.7.0","react-dom":"^16.7.0","react-transition-group":"^2.2.1","swarm-animation":"^0.0.95","swarm-icons":"^3.4.334","swarm-sasstools":"^5.0.412 || ^4.2.408"},"dependencies":{"@meetup/swarm-components":"0.5.17","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","coveralls":"2.13.1","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"4.10.0","eslint-config-airbnb":"16.1.0","eslint-config-prettier":"2.7.0","eslint-import-resolver-webpack":"0.8.3","eslint-loader":"2.0.0","eslint-plugin-flowtype":"2.39.1","eslint-plugin-import":"2.8.0","eslint-plugin-jsx-a11y":"6.0.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.4.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.8.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.242","mwp-app-render":"18.0.2805","mwp-config":"18.0.2805","mwp-i18n":"18.0.2805","mwp-router":"18.0.2805","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"^15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","uri-js":"3.0.2","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"398d86aaab25ce153871c80c2950028c1b144871","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components) [![Coverage Status](https://coveralls.io/repos/github/meetup/meetup-web-components/badge.svg?branch=master)](https://coveralls.io/github/meetup/meetup-web-components?branch=master)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.  \n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.  \n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`. \n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.  \nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`. \n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.  \nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2753-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rI2TRnZhYqmC/R8mM8u9gVaXgHzYSgbpQRl0B2EQws/bAJ0S+08LEsCsX9AgAx23Y5zSKigW9t+DQI0zaD/xkg==","shasum":"a8ae979920d549afc40f59757bf82a0395046c10","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2753-beta.tgz","fileCount":580,"unpackedSize":3227310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJco5snCRA9TVsSAnZWagAA8MIQAIrpavJeWMvE1481Kpwu\nOzfy3SFmCKJU1meTfk5ZLOcvex0Cuen1ex6zuv/6jmsctA8BngJsb+50UBE8\nVQlXPs6jFveXi+4evmlIc34u9FYmPnPSKfzAPag89mTnb8bXErIL6j0Hj9r6\nxm/S9zayMVyoPriFzYikVpAilMAhkc26ye+xwQ9KrjYSC081GTeId1v9ml8p\nqXPvZMSkEQ9St3xB1o1fLhVvDSMBDV38bQqyCmoYGOZ7FsI1BrKMWHab1qrB\noLFcxYwtT9VDcVaK0i2YZUaCX4rVDh9bfTEpg4afTtaxjZgJ75pNePDG6X50\nePA/pJT834yV40Izf+YrQ3voTKzc1B6o2ByKAHsJ4crO9d4MpBGxjCecS0x9\niDl7OxShdXiaWC4GEiA2zsZS+dn/1u7fQFXyYQUEyLRnk7fCIAcs/bQkoIIp\n3/BJQmXviv4qs7JUaF1yxzFt3je0kz5BcCZrXxs5u/w55Ab/AqGDevLwbXjv\n1ykaJ8AepA3UURYf4MamUXsEHySHAgRatIk1KHYJixuM6s0A5c4Ips0vH7iY\n+hN/NwOjA+4jpXZbaNiO04UGlcXky1lCd3+eyo6ySCMmR8tqHKxx2mbdSxN3\nzmn42uZbBq9uj76FwDMgqghC3pS0irAafGeph/14KktYunGOsFgftLs3MsE6\n/QTs\r\n=SudR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAN18iT92cJ3kC+bBVqtgMkSRnD5pLVVitjHVXrJMuZWAiEAuXy4fvVQKB7aRgnupzqkFvmvgKN9IolkAi2ZjRYx/d0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2753-beta_1554225958908_0.04422549425479394"},"_hasShrinkwrap":false},"6.1.2754-beta":{"name":"meetup-web-components","version":"6.1.2754-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"59e7fdbed1efb1c9c27bc096001f72f98347b3ca","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2754-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-EP2puivrEWSAQFD4zNsYO12M6oede/9k17BchqQKrWHdvPzSUH9C2gp3DNf4TSAqxvLxTePQz8Z5UAdx1lhvmA==","shasum":"528c8d18ecdb9346003ef16c8a4a2001babf7b51","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2754-beta.tgz","fileCount":580,"unpackedSize":3281500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpMNNCRA9TVsSAnZWagAAW3IP/jIXuWIO51CM7MSuSK85\nKKXkKjqI4iKV2NpLOtJ7bd+7g2K1hOPiN41JBDELRaPqxem5a4LPXkXGSZzn\nUksVvINS4NgjNz/eSrxkTeFgBATBx6PKENHM2YwRcuzWfzHfBUmx1rezXfGh\ncumRI+YXRaHAOOAbnt1r+r3vFlCf//olAPhPJTw/5sLvgrSufHqP9VGwvSTb\nG862FURYGWPu0p5DQVVnrgENdoc6BhwiYHxztCKa2YZG1z2nCTkA1SVfyLpy\nq5Xa6KAo2sSgBrX0mCaz0oNOcf01PlZNRDXbxIg943TrBny++2SCx4dX7oJ7\n4nic8GOCoKZhC8sLOTRY81N4M5BobfllTbGfTsHEWBl+r2gzuBvBylZOciEF\nnUYwR932m8o9ytlxBaKao/usIfmCqQxE8TozPrW0MttHyXX2IMvGLnE/D8Kw\nCae35gJ93d8OgviP5aFCMaZJqWz3AsSUvPfJ4P68tRmQ4iA7o5L2TBuetAyk\nLyxdAxJHJMq9WB5GRI2dCACuPx3Pi9vnt5xhy2PyRbod7eSsDHdvLYy9iMDu\nqYUjKygd7oUJXuZc2I6ifiIFdS8ZkerIN5ZWMEnFPCpqXyo+jlC8e8kqN8Qi\nNwqQxVabdKnpw9u4Gv3PwuV+2TogIL6tJ+QzGLKI51qcfw36lf9m51X3E3fV\ni9wV\r\n=f1e+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9Ahsqn5lkiz8VWr58F3ALQHtUDcP78ORb/sIdOIy9pgIhAJNON8alikFBceXm/04DDGISqJZmDJbmAInwvP0i9DkT"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2754-beta_1554301772488_0.2729519748097309"},"_hasShrinkwrap":false},"6.1.2755":{"name":"meetup-web-components","version":"6.1.2755","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"49b4c8b13ad8feea36ad947e44abbf14e1c3dc61","_id":"meetup-web-components@6.1.2755","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9mJdvLtPidaeATps88zvfjJ0PYgsmUICngHe5u0uj+XZ/zDy6314hI6U8aVHhyaKJS2cbgv0H52bDlvUxhjsVw==","shasum":"f41df5ac207f1590c93cf66a2a3cfebcb47bc423","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2755.tgz","fileCount":580,"unpackedSize":3281495,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpMekCRA9TVsSAnZWagAAr+IP/i88PpKLsR5qqv4GObQa\nraWgOx0R+uGHuJPa9OjDGnup1FFrmBEmJM49Pz2DZWxAnsXvC5MAqA+G8T0W\ncCksI/ZwWKJ76zjai58ZAR+WbcAHFGWKLrFlEWWYhzEpiBj3Y6l8yJIwCf/d\n+HMbUMG6g4ak10zqlc0Uut7gE9Qo7kX42AQgS0n/2kVC3fEPvAe1+JBy+fuY\nBes/43dmufELFzu7leORN9xnhSULTyYUUcrI14yfG0OYMcHJb8n7AzF1YRMC\nq5uYUvrCeNmJ1MiQe632ltinVIq0IowFkkmwJ3DSSwVqnSWsdPE4ZC+6IRd/\n4tyozTumBlghg7AHh4/9ZgKelrHjo2w3x74ElOhh/6eNl/JQsVwUS1Zf4y4j\naVVkPLywzCjCcFm0+KPgMkVfm3GRdRvmhNReZBgU8SV9PFkBPiQpVPTt2q6q\nSbgzLsgf+URnw3KWe/yOkjnPLWAx4k2WJCQQl/lunrD02jC8v/JCl9uoCKGN\nv8kBtfoFiYHy17BE8lLRaATfZb/HO1UYQG/nNwCbiIIeBPo3eildIwi3iyhi\n3Ydx8oAC2pPZjtDn+1cs64YKPkouOJ0H418ewfi0lick78KxXLMwyjayZIQZ\nAllArdDbFkJg4DTGd/DUXrpAvsu40Lp9JTO/eIUwb0lULrtpfxVTJeQt1UKc\nV+hL\r\n=Jl/O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDq6WCQvOL475kNTRLi2UgaEyGbiqFI1CN86VTZ731dIQIgVf/tsDYXp7s4EokazY92lEGZ0AG3aOJywGn5buljgLs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2755_1554302883174_0.6388970151135758"},"_hasShrinkwrap":false},"6.1.2756-beta":{"name":"meetup-web-components","version":"6.1.2756-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.5.17","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"89d75938ad304013079a5f230c1865d20097fa05","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2756-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0hf9hulwKWhBFvnz+DQrDs1UB8ScLWFR6QNPI5Yji8ze4oQm6AmHUS1FRR8U6YWls8EjgsSXnfj/oLT5nwiyaA==","shasum":"68f5312a570ea6bd3f74fee1b29287c79050fea6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2756-beta.tgz","fileCount":580,"unpackedSize":3226036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpREfCRA9TVsSAnZWagAAcnYP+wUO9eBiFuAAeuDKZMyT\nUY2soWdyBt/pp8syAWgeIKmOEH6TlidN72cTQ3U4LomuLPP8POIxE3u7H9qm\ntJq87sNDuJj7H1aaSSQKTWegT/BhN5Vuoi+CH2hZCuDG11bB568Pgcc0WkE4\n3oDhxtXWXqLSamZeXY9Y1/uGGvB2Ed8iOtcmf7m23BaT7hIdJgn3IOxif0Wt\nX/ng+IZxB+RV3nubVyq4dW8z3x3Ozp9+2coQFC1ID4gIvXhJqBS9w6qtyk8b\n5C78tW2arbbt+Aa1I6PevpBgE4qeEbf7LiOdnVPDd37BECedbmAqu4eg++e3\nqjlRNaFn022NoG49XrlgbzkZxgQMLyP9RcDjHCwdp/yuqwyXAImj9XWUFMbw\n8PtD04eSg14EezUzIp7H0Ko9mW2JSvT7nmCcCEN6IPjz8eq3v5cte6pnEmuA\nsmiuDY6Y7llGbKkwlpwLMhkWtxsmCzWW41YXBqaCV1+uk5M3Oaw0G+pbuv9Q\n86LMNWK1QtwURr0z9FknwFLRghWEiw6Ew5lGGlVts6nWZHcoiZQNJBOY+/T1\n489lzUWVL7W0tNnzrd2lLdnLLF1e92Urs8kNJvVf2HvXHAXMukYLry5Jg5Ag\nH5xYpQz2wSs6hNWvw9cJWnwyaX/63AvzF7WPryVAy+2nBfTnR5z+CjQnube2\nqF7l\r\n=hlE6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpbHNZe1I+sX1sT5mCsUmgQS3dhWHeKSQKAMlCSJefbAiAMlzvUTbeLC71C1c8241mTx5O8fobCpIbQcYtAcUkL1w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2756-beta_1554321694842_0.5694546941482452"},"_hasShrinkwrap":false},"6.1.2757-beta":{"name":"meetup-web-components","version":"6.1.2757-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.5.17","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"67ed09c0673f5eb4417b8207d7f61934d11bf6de","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2757-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-9kMBuhbld4eKCRlUomiXh0T4WmO2FpslV+owVIatwbODAIO0EmfEMntru3VSWMOslRsX60mNZDez740RooWc7w==","shasum":"3c4bb06f1e28f228b6fbced85f6894d72aebe6c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2757-beta.tgz","fileCount":580,"unpackedSize":3227407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpRT6CRA9TVsSAnZWagAAPtIP/Re8zUWTrbDUeMYgjmll\nZMTgQxHQRVNEoxmi7a/AoIBjgapvOQMaJDHBKvlnm3ZrnePqWQXVCnGxocLg\n069+PJhiCcqrXq0h1YmrjIoLWF7JDBdRPrXExr8fVtNN+DiPJ125U20rOgGm\nUlhA9VQ0aCBkxZBdeYCY80fh670wrXRU3BeQ8nVar+YWTCnQj5EdsLTUsI0r\ngNIz4RJaIhEH/MbaBj5Tvf9aVaXC5SmqJQlUbPGkMBY6qTkJGOC/FA/llMVf\nRc7/kChDaQqtJaPW1gc4h20ofIs5tUKpHQt0gnue+IawdtE80phJexMRd/Cs\nr+0AsTwpu6s4jk2F9y2VS8ZiJi2yK3t05fs0x+x/Syp87+g2x88nBklYecmv\n+tTJj8qqxEb17KjRbdE09XMoTn8EbVZ/9Yunv3syomCCkiBhUAgIY7OIbsmg\nYd6p0OqN77t38UacpMKPGpTK+AfeBGyX9Cm//K/LW7dCbd0fAMWDsa7f6j2O\nBDr370lqlvTigwTPnX1/xRCTMcAVQJ0WKO4Q0eRPOXvI+/4u/clI+Jj+rq/i\nFO1FJL8m7ttv268/V6/lnSVxhFlUuoTMElfF5qC6cDFeyHc/hq8tnNWHlSbS\ncOoAcm/3k/0d9+PcOsg0PVM5PKuX4zyQ17OwZsJAldzd4369X1F6UFbIPVNQ\nB2nX\r\n=o7No\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRlsGgUND4XTKQJ7/MW/v3iuvM6fQt8bCiFrvrUiyhNgIgH7htCLgpdoPEMmF26X1sU9wNs+PMI96BNrzeedkGp1g="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2757-beta_1554322681423_0.8271727430241236"},"_hasShrinkwrap":false},"6.1.2758-beta":{"name":"meetup-web-components","version":"6.1.2758-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a2283699cc33ab0d5fe87201f9349a8128fa084d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2758-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rLqVhYRxRp9E0mCJJogRz+wdidZKz5h3A4LkaD6Z/PAJ/YZx7wtDbZ5m+pplYSKHehnrt60kHxye+v78+N/vpw==","shasum":"40dfe1106c6058d24ef783b3f310f42b53039f2d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2758-beta.tgz","fileCount":580,"unpackedSize":3281679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpRaBCRA9TVsSAnZWagAAljYP/jAy1+Lqa941+MeWqXAT\nDMF6z85p56uV5BOFQv3mHbwWzLNCDB7C9rSqUSZgepPwG+eNtEI+jIoXhyhw\nsAuC2tLQYVy/JReFz6hq+OXtF2MkMyRm93uce2dcP7VWkNHcCuBGir31GyRl\nD3BShIHfVr/n5RhPDcc8ZjW5ibZHobaUtAiSXvR8E2397qrTI3Od7tKlqxdc\n1sQn7HndX6ezHlmdZkFRkGSxI+QJphxZF+IIzxRDut+YHogQHZqBS3p50B8A\nwpKIhUKoqgG5aFhvlHiAfOPVzPmyT+DXWy9PYq+J70SV+wCgMayD6hDEybF/\nuvakT2Dm9nsVdKYRdA+tKL6zD/0x3HxLTH8yQRGfjQEOnLWZMDxwDWmOPi8U\nLCD5zzd7MI2nyiOFEwwEQyHBt/CllyXfZhP/45HmFiJQDn4SEHjMJteDrrzd\n7dOKvNMGdVK3uNbQojropqJHb6ucj6KDCzULAERoc4sWdbtPmdsqq5v3RZjS\nAEknfAoAvjnNmM56yCptPhy/Wn/Zv2AYvwPYxFazqzU8hk1riZb+joGkU2YQ\nfD5nvPtz2hgn/8zVBLwiI6oGwS08JurJ4KpKT5q8Q21J3F0mj0iqM9dXUp2z\nvU8vO3DkcCVmdJ5hO8xnBu2VoGmBPWzOiBHkAp3tgcf8uXEkDRApRwNcIOIH\n5mRp\r\n=huwY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCn2tNBezSgluFR7HhwGMN+Uit/INR+qXyJiB4kR07SMAIgTt+e41tQwfjYGlElevjEc8RdOJo++WUF2mMqp8UrnPs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2758-beta_1554323072915_0.9620250894531686"},"_hasShrinkwrap":false},"6.1.2759":{"name":"meetup-web-components","version":"6.1.2759","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4b46f6ab8ce39000ddf800593fea2105853165b6","_id":"meetup-web-components@6.1.2759","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-8FCb+IUYJZfP1A+gKldIllMGSD89M10QHZ4+TX/b/lWZAQ6zQ1/RL89SqaU6PLV8fBO/2uS3lboPymZR0upwgA==","shasum":"d5bca46d6980af718e1fe44e463d8eb60e2e656d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2759.tgz","fileCount":580,"unpackedSize":3281674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpRqGCRA9TVsSAnZWagAAnsAP/i1kX99j7QsoH97zVIYH\nWQsdnJwVOmJQyjuAfCkRA8zUDOtmb23DGs/9DT7t3++ZN1a26ZO1Eos1MgnV\nRv3+TVi2T5Utw7WVLs7vT5aXeK0OaY67+PpWtRPStIiOI7pE1nKFZQ3XNJvU\nsq6kIqcRboSuChOxTWTx6RYYAKnakTib7p6UPfghW39oYphbzNvfjfQatbIs\n6vYekWxPkcQrhQ6A0ON2gbD1eAg/8CXcFy1RPH1EAAeZxtlXOmfaiZ4YskN5\ntQBMEamkBe2edKmYK4ZfM2TA3E/OgTXbR16zWATND685Vzg6bKJUoX7mTzZJ\nUykg3oj9kWKd0WKjhmOH4ltiHeRA1PmZCHvUVNHB7KFGPTr913iTG+Mrn8Y6\ny1X2CoquaQvXJU4e+QrZrFlyDKoetuihTXb1FIrJMIaPGPk6C9Kmp2wQBfGs\nY+qoFeLeeewdou+4Yw6bCnIMS5JGg3mcVafAchYto3G8s3UnuOAruq4dekB+\nZVjh24eTb+jxtuYRyle9WyVfW/ZqWgCJEoJOvC6ek5FhQ9o2oBcIC7sARYfQ\nzzbyi9b5sT8YZCIRON5fDzv6ucroLP6jlY/Dm86az+BrEut/0jcQ6MRbp2Zy\nms204r3DG+tdYLbBU8TD02+xNBXOJMCQpap4qYOAxg2SxCjBYy+AwpGNBxpV\nRlAC\r\n=BQnS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDP4t5gLkPemZh70wvXeXdKOGa6KS2dTmFfv1k3FSdJWQIgcDcSZ24TdRAMzxpCVoLp8IMemROpv4Di0CgTWmTVgbA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2759_1554324101809_0.7926796054880052"},"_hasShrinkwrap":false},"6.1.2760-beta":{"name":"meetup-web-components","version":"6.1.2760-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.5.17","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f609ae6936134dd6800ed48588ad226ed7367f67","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.atlassian.net/wiki/display/SDS/Guide+to+Layout+Components).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2760-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ZNlmdq86fuH0sWLCyxendQ22P1425KgFWVDBgb1kgImHa1IS1itzdsrJHmhj569LC4T2uTmBIx1dpvipG13NZw==","shasum":"5f68e330aa0e47d68fc2c913ceef6637bbc0a633","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2760-beta.tgz","fileCount":580,"unpackedSize":3227586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpRsrCRA9TVsSAnZWagAAV7AQAJZ8aFLnQBHXaji6HU48\nh5Sbl/lP9eiwc1ayWVJOlY7GSbs7PfDHydkINXgTLGJf3NYuTDOVNX+ArzS2\nMaWgBGxoPU61rvzh+ewEvuSi3Nj6e3tudG/7q2zGeJ+0GD7wrukVAyJHTUMv\nR1TabOpr0ElFR7TbYw0zUpvVEUSGOPwYgYRZlWPidEEoZSeJPwdAPokrbP7V\nR0VHjxhusYj6JLTOJT9yAhj6ulpmnsNMb/xbSrLS0ZTGxXsP9iS50E/OKR39\nkrNJO7VyOWfA9wXjjvd/S9AiWfYwh2Rh6voqwf4cvCTGK8WbT9p56ab8NXCt\nHKSFO1RGUKK9AwGglv7A+ABdoGouosjkLQgrgfQC89oVBm4bxnZae5QcTzTe\nBaNnobV39Vm4SEqvstN3fr3PyQ73dmNPpnR+L9hAc5NP2d8k5l1KXZl7yS+X\n0AWc+4JioUec/ZedKj8221u0805tp8RA4bqUF6F/arg5kzL2sRQqOYovIAu3\n15ZThgPLK97b+tclrtX8Ir0xNV/JGykntglBv25KiHPX/dlvfSzYynum8N1T\n8N3fEcLLasbVwBx9K3uldgCz4Mn4p+7s55EsUKMTMNr5gK5sR5XLvoJfp2lp\nayIoWncYBP4KDYOMNlNIj/ODCx4zstInktHAI9OhDn55IdH6eCe2tfwq6M7C\nJb55\r\n=F17m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKf8r9Xo+A56agVLD15NhrgVlnlHUkkCPYdnpaxFLb1AIgSHY4R1ZcYT9SfX9o6O556VqVxw7mXb8kDxhbXoeu4fQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2760-beta_1554324265941_0.7577377068684619"},"_hasShrinkwrap":false},"6.1.2761-beta":{"name":"meetup-web-components","version":"6.1.2761-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"51b257980ccadda12762df48964c4bc3bf583f76","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2761-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-50P956NXGVb3BPmdTdZ8Da1PvrKXbK+KTkojqS0wS+PS/KtmkJdMHAgQVxqZTXiUoj4vu/K/BViTq99ZssZewA==","shasum":"7d2e2139a7f36a72da2a80a63bdbb5e4a88e793c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2761-beta.tgz","fileCount":580,"unpackedSize":3281679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcp3TpCRA9TVsSAnZWagAA1UQP/2w/t1lfzp1di7J9u0ih\nYXx+W0omNeRrpypyYUQ/PSlRZF3UrTp888+KF51yQqP77xKYueJT6o7BXL2H\n/bnLIVfs5yx8uZoPmsEIpAtxAr29t5bDuNj+skHlF3t5xIWGhJT2faPD4U87\njKuidKDQmaFpvYq9YhzPEVx8VpSvh4EUZKCkwsWTYrWwtkoflof7suqQ//e2\nn9A3z1sxBIqLGxXagdi1NxWKP257olrwBtLZ355tX8PkytuiV5wg5gUe7t4o\nB+UD4mK4HFq0ZEKUOu2MvL8XSdobLecKcl38eFkeLSuRMwuQUiy+grXtNWhm\n+eomKRZyv3vZpr9AbH3QeS/Gut5KMAv8gvLgpIBy5GBe7IG78X/ad6PcfYet\nGipzQ0ZhiPc6eofvDI2bD0+xGBBPvQL4ljwcdQlw+nESod+mA/ui2B3ONkQr\ncmQBoYmS6rDyKPr5OFezajstQQIyFXUPZ45UZPnWW8SS0g7Wp6xRSrVGmKlN\nf48idacF8J226iCtVHwqSaqYipAn+5QVyi2fAk4e7eiUpeA2BaZYWsqZzNE3\nRklO42ApRd8OqcgeCLLRqhVkcxMCaht2lop3H3uVUOWzTT48rJ1w8Smt201m\ngOtOpYYQH54gbniPK4zIiWSf6kL0JCpIq90hcDri28LkvGiFHS+Aqfa/6rLO\ncMsJ\r\n=3yBQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID9aN1e594MOaSZvAA9niK2NvKI6+7sSsinj3aDZxXcXAiBdWp3C8O3eUuSlvuqG/cqVsezNhoPE6uD9arrkmq3lCw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2761-beta_1554478313059_0.15674404650477936"},"_hasShrinkwrap":false},"6.1.2763":{"name":"meetup-web-components","version":"6.1.2763","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3bb348ee13237ec6af1527af86b030230bef80dc","_id":"meetup-web-components@6.1.2763","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-oG2Qr05oK3ib6KVS21zA6lMVamh5ndt03n+FL0m0+NVuNBjz8j41AyiI0YcLXEPsE8pSa7uzd/R9pEObi8+KlQ==","shasum":"8ad6c2095ff2eb4499fe7033b793586932fe6d18","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2763.tgz","fileCount":580,"unpackedSize":3281674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcp7T0CRA9TVsSAnZWagAApb8P/3UE8i9kawY/KDNj5SgP\nXX2w8+zaqU2ZHESjgHfKSfrcaqnsF3nCFmBVfWefP1P7cfj8xr6zSP51ljkz\n9Q0tHaY1K2GY7RQDWga3kmZ3WM76WROyzyy+Ah/O8qNDnQy+q+Ym1WauKBW+\nZIyrV4jf+SBhJW+yxqvb9nqhJbONjSa6wMfcQ9IgymqNeEvW7Fn3JgR0QSMu\nBN4SF2ghYbgP8HEQOq5G4NWWMSv2hSz6hSnA9hoJvHfAMMwxchQ+48uaLIZB\nk+YOpBNwPz4ORHM07tZNBiuiRELDm6ou1/Sv0jVq5e3lsIAp6olgeC9Wp0QW\nUJ47SfwrR/3Pf9c4EDE4A2xTLKuC2AmKGbGLfNH2Ypad4c/ng2tLPVs32dWq\n0zRGU5u6/pgmKPQrJtoTBVbAR5CMNwk+48SDSpSBwq68Z9Tb4bIVEYwgqJu7\nf9EWadSbYOTs1Oxx3DtNCc75SxtHEqPXBv0MKowhNT7s89tSY1s48qwv+Y8U\nvOv7ae/dBd33Oqcxj0a8zuwko9pw1Vkh0e58aMwC7TWuXRE1B9zBGoofMpFa\nHJn2iFGJFHrR/u4ofsWRQsHDMQM4ONtZlGd1tkGT9+h0LJC392kt2gnCCSV7\n2h7OcColFMMDhKVz0L8ZoOucpfDPPOOfB33KXKHC+pRX8VByoYuR6S8c2k9d\nOb0u\r\n=LT+q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEhbPGCQHhezp1FOWqVM9th/YBMU4L3Vy4vsihY77YFiAiBSn0t7zsRRiCQWT1dvkv7yI+9CEF6OmpmBnqUAYaGVOQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2763_1554494707344_0.503985620803616"},"_hasShrinkwrap":false},"6.1.2764-beta":{"name":"meetup-web-components","version":"6.1.2764-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.5.17","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.1.15","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7fe4c2a09d2e5395b5f07601044e880464e3c9df","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2764-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-W17o+Rbw/aquL3IFb0zME1EAhNun0E96joVsjWoJttZOFWjfbzG0vXOe7652Qn+tiXDxnm61ksg1Fz3+dUyZQw==","shasum":"f7c14e7086f6e682a1c609ab843078d315778951","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2764-beta.tgz","fileCount":580,"unpackedSize":3227586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrlOYCRA9TVsSAnZWagAAt3kP/0ZwI97u9hBsIfb1WKST\nw7o5PUNzLevDGwBUylCXZOjDssF5JkZxiymVPqFQ6CcbxEHq2PqT7mJOWJFm\nZRJgOSxxHE6dm3jdwGXcizqByUY+fx/347QXm92PMcQIjh8MChzWZCEhtBh7\nwoTs1Z19Ii8Iroc9jGcDwl/9Hnh6PHjJ42oE2lNbgTphgx7wi7L3HqxObjPO\n1ZJkPYUJ1NGA7/9jVh1zH/Bc/0lw19A1N32Dpk9sW7Y0RzMmmygInjZPimOL\ntvziENkm5k1fj6cVFEg79RB6gftPFAn134m4YJ8MHPoNv2QBJpe1El8Cc4rO\njB/5ctVTjODrckYtYzopDvhc3Gids2CyrFWM0rJh0mHR4vjjLsjdZtAHdAaS\nt5I145o1C9XMIh5QJFAUfL3tner2cK58nmXF9KLPuI4RG5D8VYy2P351nWeT\n9EPEJJFxiISKRnzPXbQ3791mcccdjNqFoLbIb5zlPFYv/8t8vPkKMb4tTBvl\nu0boHjmsvWB0K0KSspVZ+LAn8o8Xq5iC+sKp2/0IARy5ZunhGGdgStOpknZt\nGoSV6NzXlnDarp70XAfj5uoopGWCBtryqEPdqHe8pXO2LU4H2sCz0Eeu0Z+k\nGlLqzRB0hxCKHlE6Htct524YBK5yiz+UOMrk/wZ3Is7az9GTAt3aGkGX6qb8\nkBM5\r\n=AKwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFACNCzMB+S2JLSIl0eEeWMBQNuvlIuFIVrOZX0Lh+wAiB3oF5uB828w2EsA3vPVYidl6cXLrZ7/LC2iSOkJXXOgg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2764-beta_1554928535826_0.7614364519165391"},"_hasShrinkwrap":false},"6.1.2777-beta":{"name":"meetup-web-components","version":"6.1.2777-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"517eb02fb8ea1f97be2e7cdc462593bef383e01b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2777-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-eTkHLvMpqEaYdTCS3kXoE58cbAXu+vPvGSSaSK64/jUYdICsx1s0XxzmnpKxY8mGT0wiVS6j6ojgvsnDhc3Ygw==","shasum":"9b7bef839a6ea42b670cdbe2d408263666f906a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2777-beta.tgz","fileCount":600,"unpackedSize":3426724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr7clCRA9TVsSAnZWagAAtIMP+QFlXJCodA7EP6w7G6tT\nVMpGui1DYrLmeicULTXK0584hLoEmPqXPn0y+F1pUTEAwOpRorV0oMBphy8y\nNKvRl/0UW7rAYYOqXQ6HZ0w4MR09gC2W+RtKwmpYDTvMjjqDC3aJF0LReLmp\neztowMsiHZ56pEiS2OdWnRSeroPx8h7b4hOC9wD6CTPDF+rv/dNaCnZz4rPS\nRnMx1Zpa2AQfV6Mvj+3dQpTxb0NeeFcaR5BnnvgKp/kkJ+chUFufcaVWSE3W\nSyL68t9qNNbssoKH5lSzvJoh9Br2EDo/XdS4su1Ga+kcxbqa2qFQo/t/ytGs\n2etm8nfpBEzoElPSUHceb+sUXYXXOpLjhYlBQw13vYsooa8x4yOB5lCK0pk9\nJ2BnB1cNag+DHCpOTqZrzOBoz0S2zztuql7n7tsldDkcxj+LZdOBjCgLtwTQ\njeiTiAPeIbHKKr1z2g2F+6tf+TRdMAHcBU2AzUzVGZ3ZgrIr5wPZKimf0c3a\neSHR2mwE0c9+tvtn5Z47DyxaVD8ytbQ0cmONx8kbuE4hfMCSwNYM2OPuTnWP\nz7e3XBhCb2gC6BLjfeHZ4jBp3n6RbKrGSP8+G0fbsP7g0nh7BSJfhnFx1ZA6\nFSm3FEw5u+iMWf4g7z1PwRK/P7/PigzmesYUMNCJXuc+iRGbMzWtuXdpdY62\nKjV2\r\n=vnRC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCa6d68efIo8QiDj5oyLCtZPRIjfxxjw/euTswIhsF0QIhAIDWAiQfIgSF2Q90G3qnWQf0p1PERd/k50PeSS3tJ3Ec"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2777-beta_1555019556085_0.11926404019190628"},"_hasShrinkwrap":false},"6.1.2778-beta":{"name":"meetup-web-components","version":"6.1.2778-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"85f7ca7b8afb91fe8ff301d80bd53026b2fa2656","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2778-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-vjo6sa65i71LNli9l6bWy6FvspH6sY6EYUWfxCP6t175MmF4Hw6YtTTakXfbst4jKrNL/x/vo/uD5T2k9jUOgQ==","shasum":"bd0ab7de0203680b21414357b0d06dbe0863da67","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2778-beta.tgz","fileCount":600,"unpackedSize":3426724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr7g8CRA9TVsSAnZWagAAKToQAJ/Omgi09oE1mvbZqRFl\nEuh3H6W7g2Z/2ISGadq0iKRF2r59cBv59rt49i86GG3RN0JGCAAiRVq+bLzP\n3IkTbnQy2eGajKE+snsR7/esu8NFE5AkHLC0jRm+bpE/rKcnuO9JmcIe2lo5\nNWeJTOyaiNvtcEbHDRFRgryuHOs+GSyyOX+VCeSGKtwPFgPiAXJQDcw5LH1+\nhYlo1IxVEpNCQL7rsKe3LZXGkt+pmoln8Wgecn222c+ZzHvKddWC//vIAqgr\n44AJHgbnpgfvI7Z1VCihegLTyMciqlyWl5fPFkVa9CoEtOTVTQz/4GAT3MOj\nbEOViCk1ZvSVzPQGCVk0eeS/aLy7fM3e1L/YsxPGAijJbOd368D7TXlN6tyj\nhV+V/N5cQlWQYDoO4By6Iiz2jKhUjdb7FBqKngsC6HIbDV+l7cxCimz5aFl4\n360p1vKIWu4zcNZqSYL+7nODzFGVt2OwYodYIQGmWHPeD+/diFfraCEv0Odq\nemw0tYLjEDu5puOrWytymmh/GVkFx7FpTCQIuGfqB4iMsZz887BVngnBYAId\nfkEMQxvneZX01K5BZoBzvOJUFN4ut9PXGoOhECDwiA9S1NxRSVtdXE52XADo\nP0kpOn813bh25Pign1qepcgOMJ3xEDLcxLs8cDPqxkRwpT6V9VuhLSRHRK2J\nbcyc\r\n=6TWx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8/8JJC2scYwl+VW4HEJmYvQDstmD6ZTQkGfQ2kOI3nAiAgYNKVOOFw4V68ceJUeKRi639dmeUxAkwwSaeCyob2BA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2778-beta_1555019836024_0.3107272704165125"},"_hasShrinkwrap":false},"6.1.2779-beta":{"name":"meetup-web-components","version":"6.1.2779-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2c5303920d1461d2950d6b783afde584cea6e153","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2779-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-k+p78VzH+tvU06v4gfQpxsZsx9IAiKtMR/SojuPgdUFmmQfH1GurNijeR5Ybx40PE7Lp5VopJaSZ1zbLXnS4yQ==","shasum":"214a89f9f2997dccefcac35edbc0ab3c36668643","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2779-beta.tgz","fileCount":600,"unpackedSize":3427616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctKf0CRA9TVsSAnZWagAAH9MP/0Bj1nHHlSmdh18yYdCX\nO4MDlsJPRH7OYBc6fcnP8tLJTk7YFnMWlnDtbc/BmGKOFZWNQdvrnKeZX9Eb\nXMnmxjOrVeeU2Gs3wD5QC22gQQZHPuOJj1lfpdHQa7l34IhmALNGd3M6N+08\nCiWXNm8TE0F6ElcQcUPYaKRweC6dNjFDUawuWTCc1vN4ohUJT+gsR+/Xj2Tx\nZUuWRcSHJfkrSdDpcpIqwaLh1Xwzdy+zvbuEVTf+FZZShTgB04TimMMuIH5b\nHwTP4RKILZFgotS5NJFBYcr3iTpaHqZsG7jkQVXXw9qkHwMmWZn/Vg2ewz+B\nCeHfgtdEpin3A1FIepYWi9ORr6tgOzXbSkLTCHZryncPyKMoWk7CVyIc+NAO\nXsGxm1E700m5/4upgJsiTjRjytN7OCZLUpaaB+hFYrkZyFeuOtcvWVJZyThy\nuMIOK2gN0ZkJYhm04sfUmAC76HTR6bu1YUDXBYwfNU2KdX0r+stb1OiUbamf\nBzVOv8c0c1/88oS/VfUIJg62wFYQyVQSWpV/nd0dll09Shlq2vTuO1giLF1a\n2BCVlrVduxXVHKj9gb5tkLDkLILIqTnrp2hejzeUOvOV7H2xWb5FXxTTc2l4\nowAftfLI8Kw+cJkhwPoEylOud7voDeTtwlWGYmUIT1iv/rAMBK90RdPDsbYC\ntUXK\r\n=a0e6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM1C1SxDqCQl8uOhkFTt5wqbeA+J+h7DLE6hMeYjdIOAIgG5slAFZlkS7qpnKtYKcpp9ST83l8xnEDueTTF6WPO50="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2779-beta_1555343346970_0.7980360866201712"},"_hasShrinkwrap":false},"6.1.2780-beta":{"name":"meetup-web-components","version":"6.1.2780-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e0a489acc735d24031939f8824ca8b8b119ccc0b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2780-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+xxqESGXN0u/8shoqM/IhEz6/E1GlCgiLB4kJttMPRyy7Z3dAb7T/w3jsGqTcSXEi1w0VhFOC0fydwTQyCU0WA==","shasum":"34acf421195a1bf787aedd08ac976555494792b8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2780-beta.tgz","fileCount":600,"unpackedSize":3427616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctKk9CRA9TVsSAnZWagAAPn0QAKAATd80HW7e/PwHnE1S\nRjztxUNoDDAaXMvLXOR7gc/S9TZ2MD/9oE7CO/Le6aV8Cbcv4BOfLNoBIC6l\ngvDhJUGw+dWqyvUhxVJ+uJhLK/ec0HT7XYm0jLcQd49Kt6mHkpqbiS5gN/uC\ndgzphFOOGgXDpvMGuL+btR98bb+nAxA5ZPUiPVeYTrRjZtLX5YGZAijB+YR6\nJKccAUqcQxrcgZWuWScJa74AVqHz1sb7I3+3L+M6omsg1o6y8XaDroGOd4t2\nHxDsnQ578pgT25jGi75x7tOpQZFMXBnmQUxfgqWKlmhZ4GTbEOsYPn0JtOgU\niAogeAKY/ogK/3Tr6QmUl9Cf+xhAaQFFlHFYjrmX3jsCMJhU0YUFo3bRv0fS\nv1o8/2HS3X2EYCFIBSUJZROyoeoA3tnSRAJRqZWOZBol5xDoMfzokRYzQ9zA\n41jX68NQMQrSbpOIoxR6VtohbbmeoOKpBMpG+K/u2DFjorOxOG5zltZ8GvHI\nrsFz6auOWnDzjjlniTOOq1cytqitCmTkbiHzaUXLN8jgKkaiwaKF19gsNzNz\nn3wrYTkmG1tyg3Bm3+uCBFol2AkPytR2b1/X6wBCBmog3f/RpFyvXnSR4mRL\nJO4IzbSAu9wntErysDGJAltnMMNA7a2ULVFetSCmYAgxAfDIpM+3QNwig3Bc\nDFIY\r\n=4A5I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/gbjJ26z+Ln4uZpnGUu6GUkeJRQzOAjMBMjXUXYQzrwIhAI2V72+6qbnWnlbHrX0DhcRPLDoqPVxMiY9Ss2uDM/Ch"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2780-beta_1555343676299_0.8223075602926191"},"_hasShrinkwrap":false},"7.0.2781-beta":{"name":"meetup-web-components","version":"7.0.2781-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"59a5196e43176c40a071f759065f5524d642b7f7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2781-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-27k3u8iWjwUcinV1FC0qeuy789FBC9JZyYJsK5Lurewl+otGCdhl7fiQbGmC1BU5h+CkqbAVu6FScttCfI/5uw==","shasum":"541ad42d7a9135e9e19a0af8d35faf111954ba3e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2781-beta.tgz","fileCount":580,"unpackedSize":3281748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctLoRCRA9TVsSAnZWagAA4rgP/1LdiPVBsGi6J9Di5hIb\nvA7t/jNXhrveYYnyE0YBe7BtjFMLuyP1VWEZnIC0P7NkcQmuHOAS/S2kWG17\nM342WZIIySG+BN0kgjJ7inJGKjTbK0coKmFNAGuSFCPZdEsUwCUwXnOmoz0Q\nsDbSbjnCTwgprrtcYB6Umq5iKonSAnixKpKFvQ0yJ+w5gUEI/yUCyUGIMvUn\n6cHVpM5zVFkzVg4MLsitH8xwB2fCEcahPy8jfOs2fTy7doQsVeSRpd5DGeor\nNwjPz4uSSxgSHYKRs0zKcJuk/KfuY52uKnZd3GfpgsvULHe3RXFqR6zkIqf8\njB6mzzycetTAFPF9UgMLkIGGBj7NoxVUVdON4l6TdlCyiowGDWuqmEp/0UDK\nF9Mp329bUYet2gE+yZZT7rBBoWrzT6z0Hmpz5IE3xpKkDH+d1e2bcK+WQlHP\n6jTl/cWwJJd0x3rS90Zk1ezcriypDCx8n0xpZ1Gq/0OQNRq+En4Xw2FAo1AD\n9LWkdGqi6NgA4lIBEr4NKUumzBH/FClmzuDR72MGh/CqokkgCPvPr6xIzgcr\nmAdZ/K3lhFUWtzBhlHgzE7YH56YXtaXAMI+m+vx0WpCY9SDpSh0mKdvLRYmU\nh+TdTZy0y/tUgkDa9rhIZfgbo9kWRqOCuCHbJ4OSX07ll60DudN17QO6SpI5\ngRkm\r\n=y6Kh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDj1/lGQf57NdJgNWjV5wipUyaTDDecHI1oZObCg1NMBAIhALYm9v0Sw1Bl2BPbfYAcJxYaaRrMywKDL5T2XOd5S4k2"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2781-beta_1555347985107_0.6660488769804238"},"_hasShrinkwrap":false},"6.1.2782-beta":{"name":"meetup-web-components","version":"6.1.2782-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e533adeb1cf0b6c275843bf7fb55297e91c31049","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2782-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iyOzYp1ljS1Nit/QjUbi3nN5fQH1dOVYbuHwPKZz7gkep7ispZxp4yGdATD0onYnrjG/R7+lkzdhg+C473+znQ==","shasum":"1de2b5c16b9b09ddf66c5ffac894845566041aba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2782-beta.tgz","fileCount":600,"unpackedSize":3427744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctMDNCRA9TVsSAnZWagAAoHIP/i9+nGQqIErQK/h3U5DY\nVpHBTgwHVQHaZpBMf/SY7j1Jv02KGjOstBtdriRn6sa4dw9cH9MNwxjjcOXs\nLFPhh/ucYkVO9uWiypgecBnFCmY8h814JSzGrsf1azmqccaqKV47MHWpeRCK\nv8PG+JE3ZHw65bmA6jW0cwe+BolMzVY6zfvkezrnvhdJ3GURKAEnazJdP5Zm\nmNWgQyuT0F6fVSI5nkbYoIH5S1mf9KvrdF55AaMzicQzQs4fNUn2LENf9S1B\n9NnSFrACPXSCe5hoD2JNXywvlrg1QQoihH8/QRO8g4Cps8GGsUQtkUFPC//1\nWMeCHAQo4rV/jN8kpv7Dwp34pQaBT44+sYFqXB6DTs5Fdum/IvpMLeB0Qx1D\numtD974XDbUTcPq1RPDCSo9BwYtqQR5rZxwvPkMpIPY+iX6xngAyAL5FTqta\n5W3X0de7Y4NzSMdRXiW9qExCaYuoJa+ef7KSxB+zXytXtdxXlbsN8wkq/JkX\nACmEEgiGAXxOQ8D91NlBhWT9wTx9uLiUJP26rqJg8JaQLJaBN5NJZQqf7JGK\nJujukh8ZfkuTb1FrXkrHJGQWXSGzFW1p69aMiLiNuINDtz4/fYXvN1Mvdg6j\nn3L3r0MlCOFVOquD3M6r68U2URLC0DzkRy06lgThuW8z0jOKbLoqiXMmTXTB\nS0G+\r\n=MV3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlA8VmKaxSTOsx8ye8lR5l6otpa3AP6CWqA2C4ITLBVAiEA56bTbyu84F2KKtVtqkmjoElz+6+EIyJ5loJDELDkp38="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2782-beta_1555349709124_0.14489082997513347"},"_hasShrinkwrap":false},"6.1.2783-beta":{"name":"meetup-web-components","version":"6.1.2783-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"838208131f11bacc9a92d7549be3e82f2cf9e5d3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2783-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rrnOVZ1NeQxx8fxqD3f16RZqHpQhNxAfNrqJE5qWlKUdayUC3kiL5alyFCQL0MxHtXXzfuAFe2162viwUd7XaQ==","shasum":"9982bdb7b8cde887bbcc15ad2b61fba1d3a30c77","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2783-beta.tgz","fileCount":600,"unpackedSize":3427744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctMe1CRA9TVsSAnZWagAApb8QAKNDVUFCQtK3CcGIJv1K\nvpOqF815TNl+ZHs7x1Elvn5/cveLhMB9Ke+HjOY6Ga7YZQYezdiHksYHYze4\nS5RrEhg+yWCE5rG9peeyfVLxlibaDzTmWvC75SVKyyiHUBcRt+9mUwINeEST\nmN0qT+FzdNLflhIawgOeEUnQxTQbtrd3tQMMHxxYGhTDOl+uqrmgzHf4N+xO\nFHSCAcOPNqS0D+md7wfHai+i9AFDhMScQy33PG/48VQiwl32OIY1In/FtjpJ\nUwHt3Ar7NX/D7Iqi9wvDMNGIxGCbMfYSTJPRwukI9eQpFR312AH7d1mXE3pk\nnQy/584b6pqm0+bcB5iw/SDuPSb8trNM4kKmAGUxOy5gF1Fgpcbnw7N82iDm\nO+/DiE4cDLefkNhau73Iiip/9sImfO8PGMWcz4QaefBrypy9k+1eq2oI52Bw\nnnNGUzgI6YekgBTzZLQ09iJ33QLfcbLHRndPTcHxUFc/cBPYJQlY1un0dPbY\nvZ7KrqGi/CY5SdJwgme09rOXxUpQPhcbWT07dw+49wSnsA2WCZYD65dfLRbj\no0OYQgmLeP9kO6usi+f0VkK/SHo3IkQDhoAkhst17hDAO7e8ymYZHg2GLIym\nuH+u6aIRP0t5Qoaui+1Qfqht1uNObT9FRvxKYME5n/7iDsxIZmGOozNuc54E\nrG7A\r\n=I5jr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeXzkNviBjfbb14bFwbkF1gFnVrS8sOa5LXtg5szfdLAIhALgEMwqx9pdLmhdBd4ktnbk2k6QoWOu0cpAH1DqSwm8L"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2783-beta_1555351476700_0.7763082483980144"},"_hasShrinkwrap":false},"6.1.2784-beta":{"name":"meetup-web-components","version":"6.1.2784-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f8e40702c87ee99fbbce49b399085746d13cb26d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2784-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gdtwdxZgtnIc3xA60I/l3gFrzCf9YR+D1szMAKsgZgNCDZHL++P2sM6DIOuNMCbxqhMJOTbz0MTI5yk6EKXz8w==","shasum":"9815cc4e025b216fb053b5ebb9151f0658bb309d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2784-beta.tgz","fileCount":600,"unpackedSize":3424819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctM+MCRA9TVsSAnZWagAA/J8QAJjMXO2PyaZihs8eYULo\nt2lim6qpSiMoxoihQU7no8YV3eY2XmFOiWN5iWCH5kDfuP+6AA0y96jjsDIc\nL7cCVPa3PfdU5yi+NbbNeHnPng8ckgirqT87Yl5InSSvr/wkN2sczz+U6iFw\nf3wz6Spc7CcZSV/xwfVkQsPSE2HfdunikP/SfW6amS9OK+/4ohQa5r61J4zx\nqGGj3MKUBW5WrqcuCbH2Zljv5X0eEdDP5oHLnCl3qPQzG1dQ0Jbt6z7FNJGn\newEuvArgkwfrwjs3aJEDBIDBSHWb+yn2yhc15a1CKBWEM7xL097xtGzdwM2D\nPJyyBFUeZFFulQTXACjPW8ntJHHGza0qTERfJj01MKiw4tSY+kjo66KSF0b+\n4eLGnndeoQjkTZqHSkRjJSRc0FrjpMtT+xzoD/37hlI0NCbd1yfQrTRvqRYl\nVTmewrTCDLAu5oPGvnmw1+ST/tfWP2WDpnStJGcpxNK2zVor7z0vTey81Oi8\nza/Um66l9s4NjaAHJiJHg3BrT0aOEbg9RDKV70wLAIocCPdllYAVNfX6Ngmw\nMoHpzgvsFWD+kI2pY9Fy/wmKilz+R+seGie+hyWu53F4lRv3Aw1Op1FlX/YX\nOpKTqcHrsq4l1nVh3R5fFKyhxZ1ciH335cotNQ9Nh5I7rvWMBd8lKuIG/j1N\noIx1\r\n=W+iN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfndv9wUv2G0H+W1sNH9HMw7wcLfhOLikQr/UbYQZvjAiAUIFz+mPpTjYdrXNNKVKvvn3u0wRgZsXPqe1sFmgMKbQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2784-beta_1555353483109_0.5179981657054726"},"_hasShrinkwrap":false},"6.1.2785-beta":{"name":"meetup-web-components","version":"6.1.2785-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"dc99f6fc3144858c152ef748ccecf053915d1b74","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2785-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ma+YaoB+ifD/ZfVdyXX98Gstr9TlYjMSEMiYMJZrfjjkQ8FtQCqsL7VgKr6KpnPw+lZpZjdmcAffziJ2Ni4cSw==","shasum":"cffe6f58aa755ae2b3c4d1bbfb673f38b5805af9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2785-beta.tgz","fileCount":600,"unpackedSize":3424169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctNviCRA9TVsSAnZWagAA4yUQAJeellnOM1sd2QUOXWNd\nf7ZDtUZUKXwCfUOZi1zcjbBbB/LErIwvhmOtKH2VWT4xhDuhC7x9opjZAELT\nrU+kpvXcgaax+yA9ZPjQFb0Ce7PRFjD1iPcncmPVzYwqd7ERMHP/2U2CvWZF\nzCnABkfc45UKW1/k+rGQ1gTs2r5TNAScSzvbGZ2dL5NVdOlhG7YztD8DmhIo\nhEHnb6R6S39VdZwiB4UgCJjudDo7WAYg9kA1lPTtrUuYVqXmz6JgqFtvSLMp\nrk72u+XBHGVgg2YUg37La9f4I8AoLaWqv49dUNibQlN2pEPBvPTF2MZPjJRt\nNJbF5Eag6Zzge5lGsoubwftSXMSxRok6F/QvVZUYIoGlt7srSMOto7uKzoCh\nfaXRtNJ6/ww/oIN04Xlv2mNHV3o1hiH92NLrlkmVndIkE8MdGiXZLMAPx0I+\ntrOX3NiQmvTGzWv7y1E0et6/JKlnwX85RNXKd1EQmRqbHbIABXolbQZZFBOD\ntDlAKLJxV4GUSWqHu/hbFtZEq3bFK+Y8S8Y20g3NNJ77e+E+o1ltsnSXfUDC\nLfoZDhZZEGGD2zzfaoeqHDpn4Op838waDamTi5EwktnWX+nkRfFZuA/rEopT\nZstfS+ntaFLKqLJprbnOWbWHWMdg5P8Wv0si8/9EEBE20/4S0Bbd+mG9Yz8j\nBpsf\r\n=Ux37\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD08ccsv/tcw3J34MAU5Nt2pbJvhwGEkyeHu/Zl8ibNhwIgAwAXdwBrMjpLl7G6IiZ+IGFV9xthC4EC6fVF3Rtrm0Q="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2785-beta_1555356641321_0.045226618973905675"},"_hasShrinkwrap":false},"6.1.2786-beta":{"name":"meetup-web-components","version":"6.1.2786-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.6.4","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.4","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"10b0769e81799c607b467e61a03c836b8a23309a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2786-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rcVMamP3B/9MgqkHaTrV+gcZ2tPl4HJMQr0lrIsHs6BcNpVnPNE7IEetxmMDNhyKqFJpCXq5sJxCEcQKruONuA==","shasum":"4bede69352e714d4c0f5a113403643c37b0a5f4b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2786-beta.tgz","fileCount":600,"unpackedSize":3424169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctN1oCRA9TVsSAnZWagAACN4P/1m32zomXwRFDF3VnmJS\npeJUt5USM9bSSZc2AXfFXTJq4MVtny7oHa0IKQGLdT3XpYa8P9605gsBjQm2\neHQ/SIR4r6eFtTvXW5VqGmRNkz6sl1XLmU+49ONSGR99n/XYOk9SLyYqj2Gd\n0y7TRftyFkqwl2pPXao2BU+SQpeyRJSxrTzp/+suzOmei7/OkaDJ/kYY0QEH\nb7x2HmrYUU2GVFswInpmfVr4/dh03Rnb3OSmLxREooCyUgChogrVw4ULCB4F\nhnt7hkT1+8qUteBlrkaL9/S3mwrZEkedFlzi4RYTSCmjxZDgazN7ntwLRIOR\njXd0KqVN4M1oiznMTIt/hBfRAbzPZroiR78tB5vS1rghYHZ8HZuubDGbjmmc\ntKuzPcEiEdzoocdYlXT+bPo6gI8C2wjZcMUXouhXXZ3rGVoumXVB6umczCOV\n95PaL+nTkYArcPLmzRGxuU4IjAlcc/imF8HpG5ZNurdx4VdTtWfAcdGNDujm\ngL29DLnC9IC469FrHxumFURtd9zrL7Ad3pRtQqXAqD+CYrljCc8csV2ALigu\nHK/HR6+U6/nvjjk8/uYpcaJ9ovMixP3dh5bnt3O6M3k6rtcNF0R/vOw+7m2p\nvElvA+km+zKUKpyvskpdweMt8QTPvvLpvRhGp6QXrulCNESJ9Ok8lPTrUIif\n1dof\r\n=0Sy5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnDuswMKOkR7QMRj5CQKli4w5x4kxrU3P87kDcbE7CWAIgZ2EwHXhzbod0olNKk/6ISkuGL1NW7Poo4J/QsSiEZMo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2786-beta_1555357031294_0.8383925766324585"},"_hasShrinkwrap":false},"6.1.2787-beta":{"name":"meetup-web-components","version":"6.1.2787-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6f137b9906deb5b36ab0dea5a057b1a63df73b8a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2787-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-NyNdE6iDcebuZqAn1wNwgogpnr61Afu02458+vTicFYZJQlXCtAp/S9325jzcnG9fDKWv4wVp0HC4BcORjEF1A==","shasum":"a294dce7de4cb1225e418349d52574ed71086bb0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2787-beta.tgz","fileCount":600,"unpackedSize":3424174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctN+CCRA9TVsSAnZWagAAncAP/38fgHZNuu/pBmPa3Ebk\naYRiAtjC7nBl2Upw87qKoZqYkBCJJWvixJFQA/P8kWPcIt1nhzlMzYveK/nz\n8WzJEzQyJx3YPA+Wdjc7QeMGtc3qL5Nu+EGEVcBmlICOrQNpXQeeE6eTupwi\nqQAJp7u5i5apY4Mq19bKWqCd3+QMQpPCzlscbooAOcVUA5HWcrQTCjS9Zzaj\nHlg7oSnWUsdeWBpaDRRttFL2023VuhOn37FtVVbo5t9AXmcfCWqJZtPaH4SQ\nLHda7L4suEkKz+naBcvxXcxYcb+ysGVJ0RSm7lzg+uWiHQe4NA4lyNf/lyGT\ncasFzFb5bRuKsc0Lw6o8xYKrqFmgEz9exdIgxvKr5W6BOs0Ga0rrsD3w6W/+\nWxBfUGE0AUGD765TtdsqSSYKreeZR8bIQxzCa5E+A3eYl6kgWDR6+CdxRQxa\nBYB6f6RAMQlQL3Bp8tIGnBFXt3KFqHP4/Mk+PBX/SNUF+hLxekV9ANKZW2N9\n90PJL9FVR9sbCx7B8wzeXPxb6Y0CrDO4A9PNFnNqguFaUaPR1t6CXrppH7F+\nAk/7xtnrXQVOFOC01FhNAMtC9/TQtegAfYg0aVcmy1OY4u3i1LQgo54hCiTu\nHU0ua/NFY5x/DRjgk+crOjTYM2H5/g60Z4TMlgEqbTAv+trkjzw2mTL6aZvT\nDyTQ\r\n=socz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC54x3p3GB3RKKEP6Wdq7hPudlexrGn5cjch2FuZyPZ6AiEAneqcRScc4sqBnNO5c6HlhVocorsPZgYHFPZSeaQO7vE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2787-beta_1555357570220_0.8236397704056451"},"_hasShrinkwrap":false},"6.1.2788-beta":{"name":"meetup-web-components","version":"6.1.2788-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4eba73a1a438186519b772467541f690a73bef95","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2788-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-f1tqSNNRHVzjwlUgwBF0W/nG8D9TuBTd2AZ62VGidNg5rLynToQmMT2EogO1YQEHxaxYyVndaLxzquCz6keWOg==","shasum":"8c6d8ab075e7764831b9b26c3eebab23d634901f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2788-beta.tgz","fileCount":600,"unpackedSize":3424178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctN/qCRA9TVsSAnZWagAAWQ4P/j4DpVDGiHSPXji5FzaB\noAiAMEXDhmAAuPUPAkB0egswx1lhbPho4BxKYi0Ux7eC6TCJ8DK74Nxkkhm6\nGDxwRDLOcscTIRMoOXvWMtd5RvJ06szFfuFo4AhX5N3YhDbsSijA8ekwzxhm\nPPPG9fhuAYziV5OwRfpUtQJqHRKC0zrm1ozSXOb8NT/qREwT0fPLEb/Vu3or\n0bMWj9F0HlfpmudOmK9j+g12e0+NGG6UIYQku0pxzk7vv3aw7kAbhIuEcHYU\nn43xnh81husNBshZSaobeVX/imX/MsHxLl9zamVHgKW3+449fc1+eEeUWat3\n/Lad1Rm2LQcuNdLZJZUAbc+nyR9bJTBg8jklwQJR7dY2F5k+7SsZUROg6YtD\nj5vxuC0QiFqCsR9LXSDwz2jHSKuOZ4m2tTbG0U2vim4/gFgH2ju7e1V+JWMc\n2nyglVJ/1P6T7CGQtY1luYe/BfdXfXnjPh6I4hnKhW///RLCb6a+tW4KuSPM\nyvpCKwxahN597WnDYJuRhGo+tU5QtKOqD/7+7SL8/vgilbYXZSTVjKU0gx9F\n2/aH65ja1hk5ViDyEZJFNY97pTwVlXxfvlyOhv/c+f8BH2L1MzrxukkEPdbE\naZe43tvvIC/mN/ckz5OJndp39IreHTC7blxV1Mgt+PfMoxytDcm2PwSZ6euk\n7qWy\r\n=UtCl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID3j/fAgx1tCHLKzSwWvedAwqTYEaUvV8p4TB+7PolydAiEAkkep96DBtllu7mIWR4IcJXhwPX46r5/CjI1dnalzNmA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2788-beta_1555357673250_0.6748074133206143"},"_hasShrinkwrap":false},"6.1.2789-beta":{"name":"meetup-web-components","version":"6.1.2789-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2d03d81c3301ab0bb98970c512aeb44d9c6bdc8d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2789-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-KtMmgwx+pO8UNt2lOBCyGCzOgOauGVgDLxrAw3cryw67kZ4eIkXJjMxcVoVVQRteduWjvlsuzYm+XjXuwgI/2Q==","shasum":"413a8eee124b40f25387f32c359b0af43e36b47e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2789-beta.tgz","fileCount":600,"unpackedSize":3424178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctOEUCRA9TVsSAnZWagAApUsQAJGZpkr36+DCnw44kKQB\nMCmcwA2JsBlfEhGWkDvgi2ZP2w/xjedpR3EwZgVwP3W0Qi5TttzVaHc09v99\nJ0cjgtw3x6/IsM7xaHy0/mFdTqu7a50j95nx33mi/rbVj3eOfz8FOZ+pcgmV\nISnyqaDra/ypT6RiNfGjeqeup16xSewLPM+mVZ6RV4jXB5feMbl8t3PY0OkU\nWbdALxo2J8fOwczT+6xt2ElSSkHSBC8BICgdxmAbF4Yc/n0uZjsSdxzKch/j\nPAIrveZP8bVpApF3dojODoGiFLHddoXnpz1MEmyCmILAJkibok0HsSVUFMUJ\nwq+HzWPhH+FQG5zYLJNI46JRZ+t+pWojL1hph/yH+6nJQNrkvXosx7Zhiv1w\nN57w43anz5tZB31lqZ0FlCSlIFIEK7U9Ex1TXVKIdlbEUdX/VTch4ePyLi+L\n4Zftzp6OjX++yMh9Q6kLRNxH4XmUSmR91Emp8pcYmxUq6PnmmwBcPskcuFIf\njz0NrrNEtMu68torrTgVOsauxSOgzceICOIOZYmJtXUHvb8vpB/zgEde10tX\nV7I54S7Jq1O7OlBfaNr4gs/jVQ5WPo+jcBKe9VGaQiPLeD7IYK6YBY/uAbbu\nX3IwDYQDsAiQbvncIPC1YMS7Ikj43sW16LF4xCRxwNvFGyg1DGjfnfX0IyFN\n6cZG\r\n=9hRK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkI0Zgy4+cBrAKwZFU8CXCoHUFq1BuSjZxAbNsh0z8wwIhAMNd7jbq+Uvmll+JCq3TBOc1RLgL1RmLT+NdGsI4JMEw"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2789-beta_1555357971613_0.16261140454685474"},"_hasShrinkwrap":false},"6.1.2790-beta":{"name":"meetup-web-components","version":"6.1.2790-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1335b1cd3f66f6b36ac6df36c131743c29bd8a7d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2790-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YLLBPTGNYSJG0FrkfckYu36JysQbQkS6V8mXsyHktLTwU429u3X9F+hU7nKNzTRsI7BghE3mpPiufy0jQcp1/g==","shasum":"d5d017af721fc84b14f65989dc54ad8e2c5bf25f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2790-beta.tgz","fileCount":600,"unpackedSize":3424382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPrPCRA9TVsSAnZWagAAvv4P/0VbM49OTHisAz80PT5Z\n0by3emFm2EzdqZ8MDhSCYTIpVIN1FKiwGZPFtQfevlB+rMwk2C2zsY597KNY\ng4nzEXGZX+R/UX3FPZT960bjugqMYLN8Wr1I51f+F6pbEyJIdx1Jmx99vs0l\n2/xtUQ+Q1kmKv39JmubWkY0qlNkCFtADXhAgTH/0z+jSQhDV0H6X6FlPO1DW\n92qhvgCDIJW65l7oMTlclQD2SqU7teE71CJ8btOqsMaz/IrjzmvfBBKfrzhZ\nmJm1g5/Y03RkaXYC5RIuKPJOi3bH9WA5jd69TWUgpdL/HEajsCUoizWnkYGI\nO/gEZ39XbZ6OSga1rKJHXddbaBEaSTJFsC9Get7Cc2tR9gUp7UVhQFL4iR/w\nv2vn0Ta+uNC3frgBkISn1e7+haebp8/SEwBBLvAP2ljET+5NZwJyAYRuAZ8T\n8kUzIu59vpWahn2ofWvVzDEXJnEuDZYY8v5MQAOqOiZXemwE8YDkPHQTc9Gj\nB4xC1c2dIeiLN4pDzDEoX625yjR3zqUSRDgvTHwVD8hvD1Uw5s0d153saXLU\njE/Wr/oDx01OoXylO/7Ue1LQEid0anmZ5UKPf8mcl4Y1+1fR9WfWAi7p54DU\nt+M3gvc3DmqFizQVw/kaRPoFYy8gcb5vTMYKLFErZ4TxtAqqwcobtRLWMYXK\n5jBv\r\n=umcW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMcsR9efCLmrZ9YCm3gaejU1Abt0ETytvZmWj9zY0CewIgD/y6jJaZeGrpG2n81rCkdl+opgWlagbheuZIM5eVVtU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2790-beta_1555364558798_0.4157708009877197"},"_hasShrinkwrap":false},"6.1.2791-beta":{"name":"meetup-web-components","version":"6.1.2791-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7d9ffea33ac33c1dc9c63f96cd9bdb57c3514f59","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2791-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OYrt55LCAex6PRTzvY/Vh1oLjTcEeh9+NH94LYP3P5K9Wy2eRolfIERa0JYd7HC88eY5HuYJpOY9JJpPnWTy+A==","shasum":"30aec70370388d6271b646f05e9a45bec56f21cd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2791-beta.tgz","fileCount":600,"unpackedSize":3424567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPxwCRA9TVsSAnZWagAAntcP/jPVUDB1UCWKJEQrgMOv\nteHfVnnnzOZi133qWti/46C9k+Pp0ZhxoaGgwBYx4jrxxRB4IpUjj5rJoGGQ\n5vGjhRDp3xKCf+O/Jt6X/qBus7zco0OGWSGbcldYf8x6FF5x+spgnM8OLuL3\n0A2S7Jux/kJN7pwJZ0JLznGbjz45J/PuRdEponQwu5dkImah6baq66SyA4Ih\nN1wyGaWgWnGMd6UTOk8nzzj70r+y087tKfOC/527GUCAZmOPa13GDcITlQuv\nkb1qWeHHXJdyc4Hy6VGYWIZUK8Ylok1ZbGNX5gB+JtfsrvQxMnkXOG/vKmxO\n9uHAIu05Tzrl6pLRyamNodAHx2VRxDEXFs/oVTWZwmPZ66aOeY8F/rJU9nrL\nuR6/YJwKVvISrzvkJMZ3TCB7QhGn4yo8w9frk+mADiKjf8m4oNZc7maBxBAc\n2gaAdlUnYWSrai6qEQERpAeWx9V3GGhVvLbJmv3/kwaM70rQrr5egBqnGohu\nM7BbOv/0Rz0iwnRiWa0Bo8JD7wPi7emEdCjuiQFzAmFu+36T6aukYIESRvs2\n1uSOyGx5J4hvkXs9ZkqnlEWvI6Q3GC0/Nw9f/KSLbe/5P9rq1AyU6wYouQrJ\nw+lFUfiKU1KX9ACeVh5+BLIwqV3xex+/54oTLAyXEJJUT05dsjynlb0OjR3A\nKYhd\r\n=vDvN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDlnu1F3CQGgcAn7OTJ2mAtgUWJAGuJlmbqC/pLtlI4AiAIlkr6lZJzH7UEV0Wj+DQPLyZbAJorDZ0bP6kRvcNP4w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2791-beta_1555364975630_0.3441271658006724"},"_hasShrinkwrap":false},"6.1.2792-beta":{"name":"meetup-web-components","version":"6.1.2792-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0031a47512a4ceae4b7baeea158f9d9650c4f2c0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2792-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5MHBGLNH2Di+bypTLxIFHN36NQcAoTLlU1qi7YWW8iE8lqkk7rTp3Gwsn5DKuSL13sQFedzNfsg0JGyb3YaMEg==","shasum":"0aa690096aed2e9848c5bb77edfbbf8f5e4e0775","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2792-beta.tgz","fileCount":600,"unpackedSize":3422432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctQDRCRA9TVsSAnZWagAAdb0QAJacnA4uHzLJ20J8Avvj\nijWIEaaSC6dbL1OmcURuLHIbdHXNyW9R3XILHhoY8F7rz+WptL1mvPSfqlLb\nsyw7TnCXafrZbwFsWIj1gppM3cjSppKKemuqRb1CEfBrcP7TcujNxtgwH/pM\nwDg7uBGirYYkMFPD/hDcacpqq3DXZGNHYWKSQXjam/I46exxedGrs2y4ncUC\nhy3Xnffp8Q8BNityzrLtQSLOJqweXGyu+YxhElP0xHYwsBMGeAmjYhtwTUUS\nQvrz0VzfMXgkPpUjYc4/Q+fGpKonsHsXrpbp/LAEU0sjVoxRPUR8gfxtc4uF\ndYa2+mDuxJzTR5xxGNRHiicYJ98fLNpkFQZOUuNmzMek92B58TaZmSdGIHhR\nLzuinXsvLU7x6+NhwTlmgbugljq4VkaBpkVnumkEdBRqgDUWZoc5N5GUxP+C\nmmJRvT1BF/2C/bRXShV615630btUfEnfMGMsrxBKnIobuh8nz6diVRhz9ugE\nYq9FmMa/NAjlMU321nKq5Y2GVY1H+6Qes6uPCrS9+DHg27ei9F7ruhg/3OGK\n/QBzqiD//90SizDVRujupfU4MXahLy0PDcLj6B9CNMzfDUuqoHJb6kvYz1HU\nm159bgE3UyJfURq4HDNOkGh5lqtEMIAuVCiL69edfQYNvJmRB2bt/qQLL5aq\nXj6e\r\n=OIDk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDXZhiExwONu1cw/f2oRbgvtef2wOlxA3rWEyQTdatP5AiAYFyoN776v+meVl9C8LaTPwJthySveHkEyb+XAUm6Qow=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2792-beta_1555366096822_0.4554796721313761"},"_hasShrinkwrap":false},"6.1.2793-beta":{"name":"meetup-web-components","version":"6.1.2793-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.1","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6c7df19643eed7eac72a155ac57f37f2c3735b03","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2793-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pgQuga3viRh3qRicNuupXzRye7dyb9IXI3Y6awTjSqsNORyT/5GV+kH++f1mnjQG8GYuLHdmK3pft3dFs+hrFg==","shasum":"4513e51023ac15f6bead6e30cca33a67507c07ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2793-beta.tgz","fileCount":600,"unpackedSize":3422432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctQaoCRA9TVsSAnZWagAACXkP/R+NeXFjoEsbMAha87TL\npKOQqaOes1xeK7W8snZiIQ5yoV+RvWmC76DJhsMbc+Ha9xlHqGf6NqprjDzz\nNlRkgtmJCGTKl7PPaAQTgNQBKW6QleKJUEbC+5wl2AFPycft8Foglc5H4IT2\nq5rtUkUZ+RZ8H5THAGZlcFFBE62eD5VH2k5IagyQJode+jFslio8aQ7ebcCI\niwWkPmtAq3RkKalbvzFY/DWCzLMqFcUox+Ym68JdsZKtt+DL3IFCirtoc4Oo\nLZ8aqKwkS4Q5Sc//grVGx7F0Wxn8dnr+aVzkOIJue0oZ0T9kR05NZ+hRfAj2\nzgB1aVgDso+Luhh4peyJNOoa1IdltpFbDYeOmnTZjkown01+nNvsyyj2d/Xg\nbpJKORR6T7jORfZmw1XhqznNB6GRJjNPGbONAusL5NInjPAf+3ogQINL1fAl\nhg92ceDnzR59uEU3PZQLSHF3//Z5mAOeW4kWqqSG2OWERdiM5MqvmxujSYec\nbEiHPYDbp6XXGMVv88ADVuuFd7HdMB9AG32k/l01ynwjMdq12jcsNWhU+zHG\n5atTQ7nhoi+8DcPC8NXmJOfNpKXUXSwqJ+WJANqlWQxqvufjIJbXT0re+ACc\ncC7I/ay+HbbG22wm3IonbBHHlkfHL38lUXCpiEQ/k1YMd3Q6NR/WzQSBWQqK\nqxP0\r\n=g8gI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGSKoQt6eh3SpC5Ho/P4D70HKH2uHKq3u0GRxnvHNP6tAiA7/vhtmjm+jJxLZujNsdxvRUIPN2fbWeYujUIFJSrr8w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2793-beta_1555367592049_0.05143097764177784"},"_hasShrinkwrap":false},"6.1.2794-beta":{"name":"meetup-web-components","version":"6.1.2794-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.2","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"247f3737edabb04445f582507ffc8120f98ed102","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2794-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-J2ckCr/6/kJBEa0VeNwtXndMWGE8SrzuzFDEE7FA1zGQfDwjZgmXfhkulhD//Du80w1nkZufhPzOTc1xIyD6Vg==","shasum":"9e47fd394c93cf039719b6f5cc27ca2a62f852b4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2794-beta.tgz","fileCount":600,"unpackedSize":3422432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctiVTCRA9TVsSAnZWagAAR3UP/RS3nRuej4C649Ygx2m0\nbankJ8q49b0rumo4z6nr6iAqK8Ioi31E1dscE89vRq9DVZiMplKXi6WqZqYs\nmBS6qFZUEznE3+yhpbap1zm11iskVyH/s6RljyKlpT4U/5YV7LUpFDGHmZW+\n0aQ0JWEDtrBUlDP0Wgo/4NXErTHH93iSH2nh+0Ujwm1ijQGT1NCWI7e4RAn/\nK4LLBMLrbaS/oorsEvKna8b3eK7DyGUi8cHyNxHh+ukEVFCjnI4iaeY0WiJC\ncUIgyR6p+Eei5ejjd8opS/i161Dp87cx29lVGoHZ8+7T7ZjSV7yMa0oYkMY0\n3ElbEzYl9mkigJdtGbzY1UBTXOp/3FrVJ5YXRx8WR1UK2ZtHPZ2q42NypXKE\nHbmlEHB38ElV2KA3htW2kvF0JJ85mVRTXMfDk+yUHQ29tq5J4Wgwkm2AtRhc\nKIfxmC7MlApVBelCPq4nmoTgmbWpyBdd6IuYvO0jG+DQlTtPK01a685vqL+u\n6BrAi8jpdPNWNq8s+tYfDHNJVCNkvbJymf3nrN/XXnzf1jrTewG26xSTkxtn\nmn+CCH1gTCwbtJOsb8csIiRWleZJxjNPsXDW3HQMjotd9cv2VVysZDUE/4g8\nsJYzXsC1vPVUbcuB/r1mYnQQaXUyHopss/j0dZe8Xj3zpXfZa9Ad2RdCxTBm\nA0Tl\r\n=2Cpg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVl1Z14L0huG5DNDAeRhjxEVuEgycRVYgvX9xD1/WwNAiEAwCBEHZx9Hn1SxqCoyjJbn2Xl1aq1hsE9F4O1lnqcZyQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2794-beta_1555440978839_0.5226036447426925"},"_hasShrinkwrap":false},"6.1.2795-beta":{"name":"meetup-web-components","version":"6.1.2795-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.2","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"467080382f9b822f29839efe9d0cccd52996b238","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@6.1.2795-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-psuSnxQzXRh1R3VEBs0O4Kwy020XpCUNlyy4eAjoZ8IFBduL8ahei2bsvE9ditkGopICghcvL3SwCvHDA8zSMg==","shasum":"ed708de92f73602c0d6b27cad916e6d0bf810abb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2795-beta.tgz","fileCount":600,"unpackedSize":3422259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctjZMCRA9TVsSAnZWagAA4VQP/3W+nBiIc0qCMcoGIB/g\nMnnE6meYqJeN0oXHRpxeDy+zBRoc7TbYrRl9irFcBk1gnZkWQ/A0a58cpA5k\nWEdn8E/Luud5O/j6D9DzSlR7kbZYfArzXHnIStLbdY3coUTEW+yAjyGaUufJ\nNDWe94wHUfUkUvSkWJ3+/+mInAZnKainR9E5jG6docgez38xnh3C4zUxKzC7\nFqzFPa/uUcAznxxwcc9QoXQ1ubsf7Prjwrb8PCBc3wfn3oXtN3c0vS8Vqw6z\nzVZfvKaKfI/bzu2qTDIOI4kniAyWER2QBtvKfdajUHUoAcDT+X0C1kdzv7Y2\n5Z1w4RcsrqnZYofbcJkuqdyrYcR37NxGxD+3VKZb2Gvcy9GfU0Yr89WaYytJ\n9M8IyBoVJ8g1Mngtwoo3BGub79vtERbO+/fmF0NfP9WwrPVfgGaibEYHXBFu\n1ucBo/ymxofeEC/AU37nFHF+PR5JQYk1PK4MDBK/7VoELh8diYjgVq8Usx3c\nC+KFR9tMMmbdZs5bhh/Vz7H/tEJl97tKE7afzWZER4+35V5U2l2eZoYf/25/\nTC76ue6jbH9azm5RZ284cessFmTt1r5fopgxaUvuf3xsCMFl97sHtdSyVXPi\nmTCdOZIs+QU/K9jYfgGpGIsdLd+wmNalXtynOYQEAELg1Bdg12PCK0pAlwFJ\nZdSq\r\n=g0h1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRYGNpIucPUh5H90GfJX67rmdb5Oz+ZFZy3lu1l40RZAiEAkzuhjiFmYAdX4UVZGHkWXNYnCGqwAVQF1G2iNlHQHEM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2795-beta_1555445323619_0.5887840923255805"},"_hasShrinkwrap":false},"7.0.2796":{"name":"meetup-web-components","version":"7.0.2796","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2d23a46e510f22ebe9167d00a189b2c9140eb3d4","_id":"meetup-web-components@7.0.2796","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hNiNJiJpwayYB8h6PUUjDgy2xrtu5ttWCvJ/YH4Cjytta+gbc9dxze+fTanWn5xLEEwp/h38ZorHcVnlbaYdSQ==","shasum":"4b928eda849a3a294b598a08d4606670c252996a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2796.tgz","fileCount":580,"unpackedSize":3281743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct2hCCRA9TVsSAnZWagAA9foP/j/PyAtTbT7J6FSDf2PV\ndm26omL3RlytoWnat1rSOYFCowhVMYkEk0n5EDckpWVKAjdw0NNB0uksir9R\ntqDwI9b1YbnteeAIs4v/iqvldK9lDbqYi0Jvpu1TfRZ4mdIaFnrcgqzlJq81\nAdtiwFubrDa+dEeVfq8rMTaRlpS+qo4JNuAF38qtVZHZ9ldQvbGxA0i32+0Z\np3wLWqZ/hVR48e2aF8VQX5Mttu5On9KYxE30cglJoNqVg444oy52qHndae4K\n+Cu9HDkaSjxPcKhOc3SQQrYHGUMhR6T4/oBaPp6kZhPmoqncfaQVq0vG4AGU\nXKbm5scjKmV+yjiv0KRZv29EfH1ThZL7piPMFVYdJwy/ZtzkpXt/T3zLqn1j\nVsZJft683h5xxWQzn5wC8yyIuBz1+1LP7F/MR1N4Rd48ESBlIP5id6H6QdP5\nN/u6EWZXTAIm6/sQ0RpH6IA2KNDqo+F8GacKwitzgNqCwVU8HCNyQGAz/Wbw\nIt+kVQ+jDSUfReYLaMQSLYiHe3DkRWH+YDP0eAG5TboJocaGQLpgoKIObgSH\naVvX+eyvvD75i3i0mXcBAa7JKj1BZVd6ho9thqFp0ukl8LytkarmwSWc4k44\nsGCaciOC4ObpyY479giMk6m+wVxsTWMXUDbvXX+R2q5+kIHXuNdzHkk5jTbO\nzSN2\r\n=Pp8+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkuTMd7wSDaE4fGric0sn80s3Dv5aDXomGLpWVPzvKgwIhAPMwBPVle2YUVJWFefI+jvvDgpEXmKQOYP8gNs9jYC0g"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2796_1555523650079_0.05420126067650921"},"_hasShrinkwrap":false},"7.0.2797-beta":{"name":"meetup-web-components","version":"7.0.2797-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.2","autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"86edf3d4dd1fe3fb54cdef7089c1700ac5fdcc12","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2797-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Gphfz7uUQL6q+oGX5FCUes783v3tnXqxCFlLnHXFaIfFHqbnNc3xdr+DIL1xBfofIElODG2ouWWjpYgNpeg49g==","shasum":"cd4dbb88503916404e0456f8e05dec2210955cc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2797-beta.tgz","fileCount":600,"unpackedSize":3421496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct20KCRA9TVsSAnZWagAAbXgQAIfJJTLhpSyxdPx6QxC0\nCgFPb/0+Qoc5uP4MCzuSC1Vqh060aAyiwRybCeAsbF1j8WInpU3Vyb0Zsu1l\nt5Yn9UgjcnSOA2K00S5ckSKZqoOXepbhd/9ByZdsPC/CWWpX/aZnsahMzbg5\nZsfG8gKm8L3TeJI0mOfglhkO8xTDIAXLOWjGpAMFpSq2EoWy7shaoIboYlDp\nu7Rj1RFmQf4v8aLG/4TmSsBZ4+CZJj6s4PANszcqIHzWMREtNUNAqOv6t6ZI\nc3nqKnBeVW5v/2DVq6RiyTKEvGqUh0L2mtxZcFk70b9hHc/YEPx9UrJOk3Eh\nrgi4PiMLgXaKuRwT7LxK48nd8pTMIyvQ8n+E+5qFZJlhjZfgAHU1iNiZXNbe\nfsi9Odgi4X4j8PPPn7rj7p9bj+j1xfsOvwWjeDoZ5sLaup90Tmah7RpYwfO8\nhpb/C7s4OfKngLXXVH4k7yOIUBpof9h9Xeti7ipG+MTT3IhPIPWSwR6/vl1s\nq0niHASRMHmcbYcbyutW1Ju+BfuNpVIl4nWgSiZP5N/LesVCQVnw5kmapUO9\nRUtGPVXodBP5UqUlNQHHx681tLnjM8D6SfuFAbtWNd3wgmEwL11i/a7MJ07l\nmpp82lNF0LHgld1wqpoH/XpAa3ygWjY2EgHI1HfUVwoAv9JL5OVr6y+qOu+T\nnAYy\r\n=BNSN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID2FKjZA/mhs0AxoHmDq2xJ9D9kSWZdCMJIvuP9tCYCkAiBlBMuePtfCyPPLo/pTVfaNeEgtcehGuoN7OxmS6MI+UQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2797-beta_1555524873923_0.894181205331706"},"_hasShrinkwrap":false},"7.0.2798-beta":{"name":"meetup-web-components","version":"7.0.2798-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.7.2","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.2.8","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fade56fcbc3724d095c2f99170e270bbe91ddfb8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2798-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Ek3qVneK7k447P8Bu8N0Pv6/tdvgjybIQv7It/ONFYz8C34TpkVGxOylQA5YNeW1rU9MrMg/ovwhZBHv0bvoqQ==","shasum":"8a229489eeefccaeda6732248778fcef718a706f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2798-beta.tgz","fileCount":600,"unpackedSize":3416662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct3FACRA9TVsSAnZWagAA9f8P/2HEfqU/NmYerDAhD3dX\nDhmFV6W+jN7O5uVDVXSD+zgy4TC7M252rl33vsrbbLjOlrGVxhi5eNh/5mOB\nhiuDQSgiTMBrr4Wg5vmrRGODazbgTsa1CqY27YJ2N13YPpNPvheq67d12N2C\nm7FCcXso+GXmiyU0HuXjt3o0oWwrHmPhw5SmZ8L99CqBimQbBWbW9jT/FHUF\n96l7jFDP9iDi4i6u81FH+g5ILnscHEt39s4kXXemJjO2nSCXPbaayLCPloc+\nTSdhLoNFwK1ot2PqpWztDJPNT+WKOGDJgkf6WYfmLTpsxhjnHrwwPXd81Ltv\nk49t2YDcrXDNOI7O3d8oYyL1d7fuWclJq+868WcvIx3i/80jEX//UsbnTBiR\n69Nmober+VZlo3gAIkEhz5BZmzu+vC6NGs3miOy3ELOZtx8U+Qkmn8Ix7xmd\nLJ01hYR4SgEUb6nhIBOAnPd6NqBehv8V2eR3W8B1IEuudrrL58xZ/fEJL0DM\nYIhFg2y6iiZhWGSU8R5fZ1D3gsTFbZAw14Kmi2WHbMtdWkSA0B4yltUzQdGz\nZGfjapKBDllvjLtlAaNsJqjmV08muljefr9mO0kAoK5vbWZ07+QwhKBVVZ+S\n4hXHcFRRiB81NVgi7U2GutTfLXQoWVLHp9Fb+0S0bhcJARikkn6pPMCAo+S/\nd9up\r\n=lCau\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC02zUpq9ReFm83MJ72+J3Q+YAWoPMLl5Q43suV7D07cAIhAMFXdluKGhDIJ2GXXmmAHC2OhIKuoW1QkwkvdYfyVvKk"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2798-beta_1555525951993_0.3498023762325355"},"_hasShrinkwrap":false},"7.0.2799-beta":{"name":"meetup-web-components","version":"7.0.2799-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.3","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c39885a66812bc310dc6409c7c3f4d318e444065","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2799-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ec7o2zmN7fZ9gmOJDS1Y07m8xaaaFkzVhowZqoio6yRh3a8IgX+dLHvxW+TYZQaKsOXSH1P6J12wEzxV+L3PeQ==","shasum":"f26e6143cbca9d10e86c19bbafc2520de927541b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2799-beta.tgz","fileCount":600,"unpackedSize":3415199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyx0fCRA9TVsSAnZWagAAT48P/j3XT5oU6nQRam9eZ20W\nQ/CwwCwqMajiNkRvrMyDzkWMd/CVlf9BP5N3IpQhfqfquqqKkMaldlEk7uWp\nXuKqACakfXSrPMA576F7TbEmIdwng9s3bYbH/ymF31fRZqibbmJh1ZRII5mV\nDFc14HMY3KPEmqvSyCoZOlgnQhzV0RUdLUH2ujRlectHAKWR3wJVcf1Xd6zr\n2/q4uav92ZWf/MxECif+prZay5/gSBjixJHvOMUGZXHvFx5ynQWCvgB+HNGE\n/P7AdDceZTzZS19lcGT6N/xaTbmiNxHlFXGYDlVBccpXmzxZ2WsTJsHsfBut\n01QHMbd+0VmxXuWg8PCyBGiDsHlpX6WKh1U9HVQBf19oIL6VTQlipojNV4Tv\nr9WoOUZzj9DwPIc6zKBushvChx3H2s5Yg0xW6T6gQeTokB34EZjRoHaRrdSz\nK5cqKomeyGvgo4JGUldUR9ag5RjPjH528XD9j1f1J4+cHx2LaqbDUD4bsbn7\nK2iwLd5qD1ZQlRBMG+AOpvUCUDFtKoS91oUAnsKvPEnj6Ac74JWNJ6XV6QJr\nlSxryeqSWFzdMaaymF7O52XYYug9bRoXGUNjZgUUz1JUEhyvsauZusa/bqIo\nh//l7cJd9qNg0Pat2rCeZJ33EV5mnkxWevgV6GRD4S4LzpIrGCETvRxesqDU\nHxry\r\n=k+/O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICYtdrYQeRRB66RRKW7jsBxzuYUTOHaVTqiQAKBTIWfOAiAoOQNIEfYMMRx+nI9xoX507VodgC0zK5yKb15bvwLRIQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2799-beta_1556815134822_0.17261255602054826"},"_hasShrinkwrap":false},"7.0.2800-beta":{"name":"meetup-web-components","version":"7.0.2800-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.3","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b17a25733fc6181a555f0968138b254235065f63","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2800-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-64RSXnCCSvneGuNCuYTA3Vs/VL+rAYt2GAFH5ING2ud6bM+4h6w9AdyM4Jf+5Jn9fmyBVky6Kp4R+BYOZ76tKA==","shasum":"5afd36932a5aa3f746c59744261964a2515de901","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2800-beta.tgz","fileCount":603,"unpackedSize":3418005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJczG5qCRA9TVsSAnZWagAAaI0P/0unQEQ9KwLXhg5UXFRs\nLhLZoLHAQtHybEDAdc5zQ2+1U+/YENQazYx3mphywJDkzGY1TJsPA1BrvcvS\nseTztWVoFB6MrKljXnOmCVWPM88BVXrtTiMgWnC3SRqrJOBKXBGVjUm1K3Bo\n0VMjAHoM2kmEZBQiYX0coEEOVkNw2UnFVT8Yh0vG+sFInFT+PQcAhJMsjkec\nSwZeO+2+zzhpV8x/ujlGMuJJcngmT8ucKP4Jm2AXeXH7gIoVMD+equkX5yTV\n7PTYB20u+VwGulIJqL2rpRDoKpbBrCM3pdz6giK5vTfmspmEV/0ulkXTNLzF\nS4leFoKaVGOid1nackDQyOQ9Q7ysjS3QeLTQ9zL61V9qsZH7l8nHrZxLqNdF\nto9hGFj1dHFFFHs4UfQzQRZLiW5UkKduw0mDxQ4f0zslHQ9o/kUMKis8Xtt/\ni2Pl51jVSAYfFrJFvKqd/476Ke+QEBDTK2EMZITLWHbQ7x2xNJuaYa6oj8GB\ninwMl7As/QcLXzcnZZ+7rtLUcx+Rr9HSgLXHLtVugPmONZwheaaL0y0+Sp+p\nBl4Yfvnq3yZl4DIchFHmtJnG3HaExawgCwY8Ua22MiWfTAb+lqMpNwGGHBBY\n38F+r6wEvSZA2xxtviDdQ+rn1B9gn2eD5mHALUiGXglowLy2FFJ5i1v/oolw\nxi22\r\n=Kd6O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRAXdkV09iGdntnNxCQNqfg6+aLTMSIgbYtBrxwiwmAAiEA2SeAsadl5OLZIN1PcxB6Fe7oDoYjPEFCmznTXrpfutk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2800-beta_1556901481754_0.7555200069707901"},"_hasShrinkwrap":false},"7.0.2801-beta":{"name":"meetup-web-components","version":"7.0.2801-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.3","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8f331fd1aa6cb98069df409fc9f0b427f989b0f0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2801-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7Ib3HeiRNQRlOAt+dLo8tzomv4xwzrQ/+N8WtCKmpCImhytDvxt7XOwp2nshPWU8x/DJhySSsJ5Sy05MUHq9MA==","shasum":"ae1f75c701cd732b42051c8854e97b5a4f8617d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2801-beta.tgz","fileCount":603,"unpackedSize":3418220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0ICFCRA9TVsSAnZWagAAtcoP/0d+JOPuW/Gj7Im0WB9J\n+elmp/p/NMQKtHPM/gMxlMOoJFHY9aluP/gcuwiNkq3FY1MlvWZIde9fbyYJ\nGkTM2/MBXsj7edOpVdoMMiPWAhZ0jwMVIAgQGTtWYA8pbHT0e0u3qtvBRTIN\nqJwy9NGpuKU5vQiJDmy8xxxOLqkltqNZxo/JxAYaNnTDSgL5dYk82o0kuYlS\nDnfktTeapb+/TOA6UMuY6wWcuUCaDv+dHOq2qXjTRk0iYNnKqAf1ujcOPJTh\nUrN9kMPXoNQCpWthX/5WIuLNslmhsuAiAKzyHksMq6spF1ztFwNSeEbjTJmA\nKmYc0UljOmwOabLi+OabmJB7iJFcJU0uJGG8N5iuk/7terZpY/WD6Q466kxg\ndv+x9GoQHsfVD4sDJjMDwwJJWhoV25HZ8iH3slzIwbGS4EL73opTFxsBD+Fc\nF6ovByzoiRY5iR0wC6LCT2neNymMkjGQKg0Fp3Qmk5FqUDtPCRZCS4YCNb/H\nfz24JfB0OMKcijmd5ccC/ET7XaYb3+85SJCt2RZm3YuBhPRPvhLHNEZKed1j\n92p7uagp8VAGEVOrYo7+hjHz4BXidcbLQ16Tm+HaVM85KgMSTg5d/bou7Q8I\nIerMv2/WpknTdGxiSkOxXZbYwBoQu71JFEVPkNvUNy8qi6WcJLfOTrWqhq/h\nh+y7\r\n=e4kW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDA2NHMA0mSvspYA5wQzuJYv4WwOwSkLykbYVfRlw5ZJQIgTc07h3VnOs5ZgFfVcFzvlHVT95WU9ToA67TU+hmMN1U="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2801-beta_1557168260548_0.4262040829055127"},"_hasShrinkwrap":false},"7.0.2802-beta":{"name":"meetup-web-components","version":"7.0.2802-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.3","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8fe9da41503d1e953ea2b4d5510e0c5c964d8c79","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2802-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ygwTglIqzqIdKWuTS48WfM4evfH3WnhZWQSBqe+jg6RGXCF2PJ7SrmFn6R43N99nGooaifdH2LBr1LgFUkk55w==","shasum":"7fb76fe164235f51ef4241cd54c8874ceaeab95a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2802-beta.tgz","fileCount":603,"unpackedSize":3419510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0IUvCRA9TVsSAnZWagAAxnEP/jU9rH8YrhaHvHwm+9BF\ntYEWpPuAP3H5fPoIyhMxHUM6bXpaKzlyAwNlUT0YZ+4hQN11DKgWPI0zvSwe\nBHTdMz9UJeZFiZDWd3jj2hYpKEADz64YSo5tlsUpcluqQ0d2omQSDiMszMbk\nUxsz8IP+R0XxQvsy4RKgBOTaqwYpmpqjDyk7EFtuQwgAbcN5VbK0uFwu8XFY\nI0jybgv3YtG98i9N9EdClsmpMeY5fekoufbGIHIOdhCks4Wpi2+aU2f6Ocp8\nT/2xt34mWVd+i8An8Lgtqj4uIohrKZjTE9d6kd3HtolqwGV9xbQM0Cb8oWBE\nJ9jLt8bBSx0zBS2aX9cnmVBVWu4tg1tT+ssLvybmGv0C3UaQ5PmfMVo1Xw+G\n0bjAaTFxg7+6qk1SDzdyKhukLjfofvXa3z1vpvh1lBvlJHrPY1v2AqS7X5ar\nIo49SAXtQxGdRvaB1w/iYMVp21ANFLqVOzbtvraetsFAanrrzrFzuNwLHdSb\nD+tCMmSd48NPHdy+K0qiatQRYV+Cviri5axx5sqtjuWzs+wd/dQ6gm5mcHNC\nXjY00RzH8rZxOzhYmQBQ6BEf58LT9/sB0QcWuG0mktFG8+NEI2SWVz5MrQdW\nRbs900mAdlpVP+xfNyZQOIrIxV5CPP5s/KH03iZ3DAneBUVv9VRN9GWLukS/\n+4XR\r\n=s/J+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2KUsKntanODO8kDXn3wmdygrZ2L5slIw94r2g7PoRxgIgKGwnuEW9h+FpBJVMGx++NlEgbX15elK9EsjXGbLaxm4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2802-beta_1557169454228_0.22355302854163894"},"_hasShrinkwrap":false},"7.0.2803-beta":{"name":"meetup-web-components","version":"7.0.2803-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.3","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0136c070ecc5bd95455ab0fe6792a5e6c7316ba3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2803-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-05InylL4efgvxbOorEOf4PY6XvPtblnajzPuLe/5K8RWyolZnaX183sCIwHmYehcbCVAoB5b83qmYlrz+nQcpQ==","shasum":"37081f1211157503cb83da8414da78931740d1be","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2803-beta.tgz","fileCount":603,"unpackedSize":3421141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0IeWCRA9TVsSAnZWagAAg+cP/02yXzfi7egkM1LyUreK\nDpaFoIxh0jSwha46AykrgvU1fbqJGlSqi1ZbpNfec5XDiOl6o5Nn/OX297OK\n6yo2EvRVKJMndwxtakaqU1g4ywyFhMyPeoifBNPB9wMZ/2cGx5DPQOi9n8Wg\nzMIXrGb3Hr2+gh2wAyFfTHbiv9enxIn5HqYCE2MZ7FgQ0Rnw3Jef39zGrhyF\n+UYhQ4UHihRG7YvZas9+BGPy7xL5ZKjj+hL4azh0ZVgz2VKAK1F81tnbv1w6\nIYDoY4AO/RH3S//1VJ1U4C4+dFeJMWoUDjTE/GODTo2wKE+RGy0Wg0edMWPn\nL7QqVJi6MIRWWCFBcwajTVwr4yXlWFZ2bQmuENWpKWamUhfQeh0umi4MVJ9h\nHPQDJuaTJBqukqzM9mx/UeLCcyjJ5vn6071bvYWVgK7rwVSL9mAHsRE9mgt1\nb2if7iy+8+cJIew5r038uDE07UzAiUvDZAFprPCsE88QDtZH2sRt4JxghTro\nCs34MefX/Q5EpIZajC05C9nrwR9FaTaNXlwuzqiv1w9tHsM1u8B0ymNo3G8O\nyA+vKMnylcGHE2xeVp2kQ3SGk65UP1EJNQGXSkHCvvtBseluutqVd1IPApV1\nAxnuqMKDYW57z3dkc1MgFQ0H6hnWUfH0NS8dRBoodb74wDKJl2QwK5o1qtRn\nyv6k\r\n=Zu9p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0j5LBvRx64PZn3wDk7vi9uXanuM3K9BUP+OhJnc4ddAiBotXthdNpZrZ/Qwq9v6chnq9vIYrn/8XrvBRDIZoyLuw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2803-beta_1557170069643_0.0889270345129769"},"_hasShrinkwrap":false},"7.0.2804-beta":{"name":"meetup-web-components","version":"7.0.2804-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.3","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a594b6ddd4bd65bcf6d1d198e0b6506eed315fd6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2804-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7cwzxro3IgMJNI66YX7aswINC/vosROTdDwqIRNLpFCfiJBer42neKdKD2X1XoGV7pz0RvvIA5M8i80Onk4wqg==","shasum":"93dde4ee6ab85bcdfe656206c3ad5120da061527","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2804-beta.tgz","fileCount":603,"unpackedSize":3421141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0IvfCRA9TVsSAnZWagAAjY8P/iezaPHHfmGTKP6rRTK3\nJNW8JTQfyqTk/ZBnNwO/033VD1vOnbttwqk50zKGh6n1KgyrqfivP84zGCWq\nHcf4c6piG7xptSIbfj7lbv09Xzx9MCEcOzLiedRFRDLUTb8OLr6Az/iXiOSW\nrZY9IOZzJ5lN5yjlq4ejm8Rla4fmF81A0KG5cqdIjT40iXbYohrWkq9DGiBT\n07hHhx5PwHg9onPYcl+yNkJONQCLqUhtBab06EaWwoZeMoZRy0jM6nJixQ2T\n9145jdv7SZp7JZFDGtJosWRIGFlGqxbh2jEcTME0R4s7Isy5Gy8lvVJ7ZM3z\nGkEYdN7w3QL0E4RCHvefraiKpiSQkpzL0YowyPUxkD7fgNKFisdTg3xdxDmx\nb5kWnn4tOcVhdnyVRiMS9P9tcVvHF+tUbG3sCUXUHUxaBV7T3VHWD7qK8Lxd\nnho439KCMWrrBwFDP+GbDXSEI9QY8KoFBm/BzWLsyHI+40q+k2jhYu3KYNrD\ngp1243j7jiCvGc5pDIAPvs0kMG9bFPDpINJZIrOHrCqYvbFU2uJWjIkP6x7p\njqqccMEDthZqSbglyCu0YJ/AE9+0736A/Oz5uf3C3exrg5NdQlvsuLun157H\nxKWAzzCaoZHbMS3LpRbBV5cg3ANjKqvTO0Cz+nGNZmyFNqoo/VtNcPuGRjkz\n6SRM\r\n=FCBp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2Hu5lqSd5TwGgUegdc0x91E16avCxwv9Z+CjlvBcFiAiBOgAXnLWueneD2ZHbUK062+x51UAcNrJ2k4nqBwZNrUQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2804-beta_1557171166088_0.5887792468648272"},"_hasShrinkwrap":false},"7.0.2805-beta":{"name":"meetup-web-components","version":"7.0.2805-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.1","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"db7a8eaa28f822a3c844159bc9f38130f1cb035c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2805-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-0H9ejn8qavC8LUsqfrixWhzqIME6eVRxjULdOOYzyxlDzrBdmZ1pyi4YqvnGZvJB6n2bg+lwdPzuB2IF3ivP4w==","shasum":"efb9a06c30ef1e5c3d75f52ceb797bae397eb405","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2805-beta.tgz","fileCount":603,"unpackedSize":3421141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0I0LCRA9TVsSAnZWagAAVvMP/j9zO2TdjEul4FN0aT/5\nQjJZWaobu07WkthQwd/8u0wZcJZaVP8Xw1DLxvZ+UDTYPGAWPCkZN7BklfEF\nluE6zNA0CRuZiE2OFFmfOKG3JMIH/8iHcQVikNIRqlKSupKlsx5QzDTSBbSB\ngqYabBMXjNP4M2bktmJ6SPnXbDUREjhQos3x62X5FYetiuCTU0pGQCHfCnrq\nyr0nmqObtVXooIxSapicbslqWtcJbs8EzRsxRTsarlCwpxzGBwzCnZpAETVV\nWRUuyjwuaJV4TMDODbcjM2/PJmX9fU4Z1X/a3hreVzdPlIaKBarKtNyeoCqh\nLqSkM/7cXWTWM/ux7C0TXBNCiel4ruF9+mpczMlM3Woi+bLrO2pcz1QOzU15\nzdpy22CH/pmrODxc2iM3UNIj2MfXUx5HMvyjWuXd9pfpIYfHi6MkY85NWdKu\nowrzKtMg8/YwGvXu5t9LYxwCrdsWjF8wylB+xqAeFHBV4/4ypUSP+jxM1JLh\nyhGEyM91ZZikjuvQd7OJHxQKryp1/vr/SP1Z1UGEy44uI+mABnOrd/ZzbtLf\nnKSoXB4cXjip+b9NxcToSClXy01wlGChS/9xLMROVBmgUGrbADxcDw/uLVOY\nWxEPtYBtqqoVRgrjO6cSLQvx1RGsYzXSrLUEm58BXk/dBWQLsK4PRT5ywoFr\n9hRW\r\n=/w15\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAmf3O5lyEoHLQLxtzTm6Wee3TzlIGp8Vg/2NinD16swAiEAtKAzj8cygz95Ii+Q41HMrLEYGEwe1XbL9Gry17adHPA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2805-beta_1557171466751_0.16653145736767438"},"_hasShrinkwrap":false},"7.0.2806-beta":{"name":"meetup-web-components","version":"7.0.2806-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.1","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"122831210ab7c4b145d584f291e70fc5607c54af","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2806-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-3UCTg1QNTrZdbgcHdVacduEfldnZAwXG8FQXcxVpR4Xy+h/Pdud4ntN6V0aKvLaZHFJQR1TAmISU0flu1S6AFA==","shasum":"4e021785bb6aeedda4a3862adedd63e30804c53a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2806-beta.tgz","fileCount":603,"unpackedSize":3421185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0KMxCRA9TVsSAnZWagAALxwP/ic+lopO3sPB9efhAttD\nQlRWT6lxts8bQyzz+OMepFey75LGMictcPgszhtXaiEQhzf+s/5rrE5C8jti\n2Wu64E+ZyQHrNAzH8PJEGprU6EwI89z3ZdONy99ZXrETBJxUgZbXA4rzru6Q\nbgXih/n/vxFBy8i6vqGtXTyH98Ip+9OAilVfMWHM50Al4aYIKo4s6FCV5Luk\n0Hn6B/jAWM1lQ3uwGy1tVSaBXuZdxToNVj1If6yZMjFczFaFxkaL4kvzpNPz\nPzIv4F6o6PldDmZ3hODDBhjCTQBcLNi+9TVq6aYH+rZ1K1fT2vBTvgEu6nYo\nYh4XAuyMfTQlNXbo+nI+E876Tp/jiPJDDZqcdoFF5uBIqydHXn1HmdSm6AIu\nwX5s3kx4ryCx1Y9de7WeFgVbixHJHHnPtxg+wwPgkUcj0ipyl67z1kzaQmc/\ntTFKkiCSSZUW9Hl07BgCXLrvIho7Q/WNCgkE7j94oy2XBwSdVii18lChEuYp\nGMPrTdYqcaLxEk/E/Ci44T6QM+NtqIM6TF5E2nfcu0XineCnWbtNRoi18OH7\n0aFlK/bs9WSriCQI2mXvEypRvyF2BLyfwGRfZrtOonm6kr9FD0pwJkvMEcsS\nwj/jm2DTVJIX/E+yR+LNKu4/7+z027422sx9nZnuFySKOqGvn1oCarZ5TRF4\n4e+7\r\n=UyXi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSv7pC8aBGKUrwql6aSuR+8qnoqw2ubq4TIRHo9/4v9AIgMupcqVNn0OUEKTkYAQkiRFHEc3tcxmI1X0N+pzEssj8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2806-beta_1557177137111_0.7658456926759438"},"_hasShrinkwrap":false},"7.0.2807-beta":{"name":"meetup-web-components","version":"7.0.2807-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.1","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8723e1832656ed3178d8cf305aa2fadbe1f90b53","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2807-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-10avmhAyLJd7KAD5GIAUQQgZQS5m0QUfYSxSImy9dM5A6BlyAFYp6sseLQ13xDiFMfLKLXSuJZrTP6fGWVbdjg==","shasum":"43b4835058764bbe90ba9beb3e5d403c94d40eaa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2807-beta.tgz","fileCount":603,"unpackedSize":3421079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0alzCRA9TVsSAnZWagAAWn4QAIBShgsX51TbtqrUyYVm\nOsO5lksD0hq9aKucnHbimOblUXugH3SpILRfp/bJh2KHlLT8X3KUEFk1y6P4\nWOGo9LWqFs23F4wYHFDm00ayu4SjWBT6pT3TTBc3cZduXl1U97BsIeVoKg8C\nxjT3yy+ViGDEOflzeEX7msnHyXgRO3eEzkLgqHmcZX170/dEQfDlun/T5i6B\nH98mJcpRNe2jjFbKGXL/948stXKF/w1DdrhoOGHEz2fIaYvi8uPDp/EqK5HQ\ntKgttUhpEWbI9M/DUJq21+p4A32L+cGspZYE3WmyY/I8WrJCVTJMQrpYZwIM\neqbvGmWMqAu3qnA84lyZg0A6nLhDjrPxUQx/0QaDNJAjxJ469DfRO/23Be4L\nUu94RLV+NeAjnIhWsVbFnVvHQ+Ahdwr7MPXSMeh40daRQD+E4/NsYZ1eQAjR\n40DaB2BGbXy7vO2spsXHi8yXCCdg5kdI/4y72h6e2gn+4akpy8oszQ93sFjq\n3327kYelEA1ujP+wi2wCkT4bh7fs6MVLARZdvS17Ju1W35rxDh8fRui4SFoX\naxOTVWfp7INmYQJOwb2QYU7brN4cCWAkM3P6UeEUviW75F//l3MOf2WSrYR3\nTAAIntMzn9pFGfdXsLcLsVnpDdYENOBw9y73NCN838vf9ebJWzH9dhbgMILK\na9Ah\r\n=tOD4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvKanjhEGgRvQGqBaugMskxzTT66xC+5CYDE0sNTVAxAiEA2fc6JL2QrZCh6Qc+ZsWDNC+g4qWBPur7sdUa4CnjZrA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2807-beta_1557244274664_0.05729591845374582"},"_hasShrinkwrap":false},"7.0.2808-beta":{"name":"meetup-web-components","version":"7.0.2808-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.1","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"33229a349ab8c22633a26edaa97beed5dff1a462","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2808-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-RDEsCut2aJGEQ5xo+uiJQWrS4Q7H/W436BWiN5b4fbb+xQ27yBWQIZ45m+mVNetruhWhp0T9PuI/mruyEl45ag==","shasum":"ba721b4de81ccfef347bfad107f9a8cc6b910def","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2808-beta.tgz","fileCount":603,"unpackedSize":3421020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0atbCRA9TVsSAnZWagAALYsQAJrTErx9InZQDS7cmiAb\nwnt2H7YgR1ZT6hyW8XziwxRfFJ2bCp/gztJNrRw3CBRZvcfd9IW17vavjSg1\n/2xyDy+rzTnJ4gkhgSFzk8v5Beu2tbfuwyZ3vnFETlyZ1/QKoMZKzfUqYgaQ\nCwz6/kM9KHEesgy3D4iHbBpFBDzTELOlsoGWcR9gqleGGg1BrOkp2qA7Mo9C\nP0BmIPLhZR6DvzZl3Dx/4NoN4Lyg5Ky0dU7Pev1my5gjX3wWV1PDYunPJgyw\n5ZgTmVyLgUI+iypnBi2ZehFIGopR6AtISnNEJc1YqWfx+vAfogz30T68Mplr\nV7tnOS8Ken/oJtgk8lV1bqv3XPlmrlu7iuoDAYt3UbwQ9hz2EkYfMfK78tNh\nEdOD7gISlJTjfqbCsJMw7MGM5UfkvN7Zk9QXDm4K4fwNFNhIcQXu1xzlq7NL\nDRMHHjdOdOozpKdsBoOrgq+xpG4b1dusIcaumRbccncvlyFX/2fPxOpU6f+G\n0mz1lqE4t3NhHGj9uqG+C8vM9Zpm3/9tK+hGDjBQ5Ntt2mBvKYpeyC6Xjq5A\nxM/KymJmpshskcT6YFiok6JLynWtZ8pHcofQqPMDCz+VmvDJ2xwa/UVzjcga\naO/I0ouA1k2gKash+wEwwVMm9us57qh0SXWAR/PVkba/Y2QgPsr/uttMhHmK\nLZti\r\n=fmrb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHv1KBUpRpAGl4606e/0c9vgRRHaVLabiFv4L0wfIcBfAiAbJNEFFr67Pha/TVhVqAw7u8HkJOokvfGk+Wq1oum5vg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2808-beta_1557244762280_0.3689547247624021"},"_hasShrinkwrap":false},"7.0.2809-beta":{"name":"meetup-web-components","version":"7.0.2809-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.11.1","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.3.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"598e93c7681f6a94c563e5b9c21fea93a83b7c10","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2809-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-qWH4lEK2rb9hd/GiEt86qAwMtVy1DJYxPBIOzTDhtke9EorKn4Htb86xDXhkkBXT5aGGAG+63nw6aOdWVGLWhA==","shasum":"fb2662b7c0bcfb84ca66c36c87ebda02a9f50338","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2809-beta.tgz","fileCount":603,"unpackedSize":3417585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0bEwCRA9TVsSAnZWagAAqroP/0FJ6+qLrTCZhkbEG08B\nPLOhI1m9GQlDAutWwkVOJdyocKwR4wYfs/+ZM1nWDziJ0Lhs0d2MM5VFuKdi\nIonH6la20XlJY2yaoS+sZmM2Bki1+XgFA0gBRbnj4E8vT9PBC2x+mz5YG/yz\no3TEtW40geOXy0d4xzYkzGXM0K+hBZ1aTds+5jwLekU3Dl58tP+zzikrcx8/\nHrkEE9rsOm3+v3HoKycGJVmVhr5UJq6hN85vsj0W1O2iyAVQOkpsTYSkRuWp\nEM5UunXs/cfLZyUJSbkWL5z57/i+OBpYkiogJufjlu/lL713w2nUnQkI6A2F\n9mbyGmWsbGebcrqZGLizZ+oFGZNTB+GJSrh2BzoZhhTX2QM+UvQ2UCc+KeBW\nPmPlZvJWh3HesrsJiI2G3vTaOw6xFyveG/TRLsheYn4NmMVJYoLihie88TOa\ngVci71gDkddbEUFHPMhSwznJ/nuh5OmlERXLqOqL3YPn1zeGd1uwsx9zdaFa\n5ca6VFQidlRkLed+JNZxVr7C0Tb4jVXML71JXZFqQJUTTaEC9xZt01ud9Zvi\naLXn5QEFQ1Tgz1FZ4koPIMXxgMVbBjeM9qg3+YIxcU8Us5nzxCgY2QxsOuR3\nlz8RlJgXBOa1Uo9ffuj+7yEqBs1F4hWNr88YmfjKRxaguXgsc8eBRxpXQzx6\newyf\r\n=tQHs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZnjmHtbAnOLBD475gaN7EqKo0hTs8cR1q2T2Y36VSMAiEAqEmplVehZ0AjDbuJyeaJLiMwcSN7O9ub0l5TSzqh71M="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2809-beta_1557246255653_0.4277681768752124"},"_hasShrinkwrap":false},"7.0.2810-beta":{"name":"meetup-web-components","version":"7.0.2810-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"802c2d88046882f0fb0d3b22f3c86901e481a722","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2810-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OjNmeuSXap/x7F8smOG7Pmar11f6113aUE1vblMTALpaArqVF1uih65afqTx4UWLNIXIdyZPoBKMdUzfFDci7g==","shasum":"3687e15f923b316169862d475f674c565265e81a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2810-beta.tgz","fileCount":603,"unpackedSize":3421331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0fe8CRA9TVsSAnZWagAAqG4P/1u6toBOmD7fh2Vlx5Ub\nHcugzZOh2pmzVbKdMsxtwpPlGRFdQ3sbNxxoYjirvnR+zs5IgfYarO2ymt8Y\nZBCLsSJNfjo4I5ofBNPQFT9cgBRds/+YToWvz2hAFCsvX5RUX8SWnfS5Jihg\nBwZRUlxDlS4qyVb1GcsvTZdWXSB4sWhpqHDAKw1T9VMP08s7hZzE5X76LwUf\nDR72VFvJ+cyFrYwoNICuWXAls8OuWFHGAdF4MHRhJfVnKyZGyViRwX4BDKKM\nOIWdKSMjTOY8KCijSXDuUpVfItL0DIoWLPoWorJtUvISKfP4tywok4dmi2gs\nU/EaMHt6y/IhpxGnau5NnS/MQ6y2BO8DQL/Hw+1fzsHvnsKXgfYOtqUBwBbu\nqKRWGd5FWtjNEVEpGbO0ZuFoB6iCu3+aaIUuuicJuHwyT+whu/lXW4YtlbQD\nsHKfLGbBXZzHBT27IQ3ShNiYVw2Kr9RUOD/7RlK2mStjCqVgri+0HH5n14hK\nMK0lfE8nThUxyKqos/zZF+QuGKybDOkZmYSckBB/lwFqcoSZzBecy8iRd0me\nxejqqVIWD6mPTPPeyqD4v+PSbfwxLP3hbm3edemIPWwFm1kx9nzjtkF52TAm\nSnJsLY3nqCU3zFDyDKQRGJNyiRClzi5kT2rx3SRKfJole/WOJGOyngHn0N4W\niY5A\r\n=Iz+w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGebyfczlsLPAB8YFrPbPA2NwU8MEtIa8b/ikQfDB81GAiAklTn43sfDbvbdsbwAMD4ec+MuZQZpI4qS1STJgNv/cQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2810-beta_1557264315429_0.0963355655802336"},"_hasShrinkwrap":false},"7.0.2811-beta":{"name":"meetup-web-components","version":"7.0.2811-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0a15a786ace4daec054f6e76d533c5e1adc2a051","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2811-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-HE9Dr1d2YB58U3i4LTCMRKdyV5DwSOaKNZp6W8Zwzu3dt3XGWT48Bbc27OfYo63NWdYLjvvQoDYv9JZBKD9c5A==","shasum":"a513dbab9c30fc60d0d0eeb1b29a091c1982d484","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2811-beta.tgz","fileCount":603,"unpackedSize":3422528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0vPKCRA9TVsSAnZWagAAYwgP/2wE7Hu0X6MiJABunYRz\nQJOplB4JubbdK7cYAd474tEE0UK11Onq+exWmTHLrO0U6FX6mKPJTsQVM7Wm\ne9GKnV2bfKmgGBMoauJ9KISQq8odSjgoH5YkzLEQti5sGNYKUNo5r1iXdbTM\nNqRGxTa2w4Yr+0EVFy3yVvO1dJJn116LYcowndkHYvy3RY2J72lIFt5sk/Hq\nRpBqGGykRlivQEkUP1ynQsk7L/aE60ds0at75F8sKv4V88V6vSS2KeXjpyZt\n2f2JqFKc+eHGIzlpRHHbCmP+6pGEQcfKPTrg/iV2ao2KedG9D7I06cgZCfLF\nqdCvWZ3mPxrnNs3LhEB+ORUhM1e0/7SY9/FiD/U206/wGhtQ37jH/BZ3Qvns\nQ0NvvxkQch0FEUObutlu4DKcReHo/WWRNjmhk4vaaDkasHKCaWZlekZforvN\n4MUPSIwj8r8FF0AsTCcP11EP1sp6TI5rXSGJY3ZWJKRJeBV5jE716xHWAnzI\n879CtorYJgM0wtdj4VdW+KF5akHcPPdwAiOvu4NStt0UMUtUHgbehZc61Qer\nigqfsbUaHLS4oVLOVYYrWBW5CWMBWX9jXGFHzeojs+Wf4OOECS00oD7c80xk\nmOZSYm7qMJnXVHfC3xZvi5tF+ew0ESO0nY4ZFSRSTfUhPZJ/czMPXJMOQo9D\nVkCH\r\n=+bfQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXCEbnD93yfsDc0ZsdWjaExLw8KP8wlO21Fb/8NHcytAiEAtxoOraCOWQnpFpY2uSvt6H0XsEUUGkSa5/issQJ7ddw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2811-beta_1557328840864_0.8756574617823696"},"_hasShrinkwrap":false},"7.0.2812-beta":{"name":"meetup-web-components","version":"7.0.2812-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9a4abfcff1e87855141b3f3f4838d096227feaa5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2812-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aB6kLf0JpaxQzA8EBCRpyw1mR/BmO7S61b7lTejrP/3oVxAxgxDoDm49bQLQpKpBJiofwe/BUnu5upon/nxRUw==","shasum":"f7d281932d91c016b7d0ea697c0e61cdb5d1259a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2812-beta.tgz","fileCount":603,"unpackedSize":3422592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0wG/CRA9TVsSAnZWagAABKoQAI57+tRsPcaeSPwOLziv\nkDf1Du1U9zgM8xVy6G2xr1s9Oinf7l4qdK627b5wvctHDjvRA05MRK2ndcH5\nsnfbxUdPlycrpevdd4oLKfEO92Bmv99S5Ud6EppWv2suKwMHrGaGFOtIYEzJ\nF4mxHYyBqIPF8ojjlR29JTEdZ/03xFQc1MG/+neR0c719TCBt+77RTnmu2DW\nW9qX7nqj3J8ojYRp1WKg5DqrjxuQRF7/5u8TRlru83F9puFob/eOh+H0FY33\n40oh7m9GKyK0xj8j2LemSXqpxc5aULBqH8e2GBjuA1i2g48/JZ5c5ZbOm/JK\nX3mkJ4BKEziyfAW4iTCGpLfOT6dmVvX+1/rgps4Yn9dZwOF/29sUeJtlvv+V\nGt5id757+cQOO8aaXEa+1eZ+5Ub3UvqBU62UYCSJGIX75y0cqdQZ2F0UEh+w\nUE2ohEeO8Qr6mP8bSHnfDgumjrWrjJLBAeoB3Uejmgsjyl+Jec84zCc2Gcrv\nM2JT6cPj6r7qx4mudYFx8vaFgBxIwwZev+X6HN9cgmvZ/apyCdtrKOKwPcbB\n1WJ1ta/Rp48d2EDfEsmsr1tym1EFSbRgfuccHyQbc/5WhX9e7FPcNLbZkaeW\nS2RU+Em6YI6H9/3ig5HDwnUD0OC5v21TjuNReJk4XmbINzcxeuOgNZxn7mRU\n7WTS\r\n=j87v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYeyoHpCgXxmjCLOPSX/zrRaKr/anC4iWw6xQC4dOioAIhAICBtbMcCN+5cD5gDuGxjF1fqkTNO3O5ZQTHUqN2YaZi"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2812-beta_1557332414464_0.1625503404681683"},"_hasShrinkwrap":false},"7.0.2813-beta":{"name":"meetup-web-components","version":"7.0.2813-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9ecd82b6ee0201b2dfde8ae8d6c2f524f3b39410","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2813-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-74LiEnbONG26A/ae92tHAnNBX5XZkoyy86gaBk+PHGFFB6kjQmpWPiOVbjsl+Bcr9bUV1vkhNr3MqhBSASvhlw==","shasum":"938e78f9529b3f0c98cc7d0024c89d97c3d58595","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2813-beta.tgz","fileCount":603,"unpackedSize":3423739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0wgZCRA9TVsSAnZWagAAM/wP+waiAJ/nhDDTlwbGN9XY\n3xVA+UwATAgEpH5H3LGo3i3xfjuPuAyw7mjguR/Uhe9uTLR0iZoBd0T8qTwR\nQBnRYsjdNQ9o9BMjrnvWcwfN7oxvuoTiWwMehg7SlSZtYhwJ1+vWFRklbxjS\nZ4wTx+kmLfO5cAv3IGKA+9fmBOx2w+9Jr/cXk9ENVgGTKKcKPlsvaAZATiED\nN9At9Jmi4VOpO38HQCS7Tv2c315y14s05uT3WjG/ssfXWcW/mWDIJw69EJ2O\n2k1ZxFGqYW3rabobWcf/4ufn7kK60Tj2E1G1OYTgSzySEbYDRexhNSnDkNt0\nCoVAd2uVezyVwlfGG2tha5QK5nw4bf58X6XzodHXxts/l6AV/AfI1Ssi7VpF\nMEEX6lRrUtTfKGSNg7MftJTXwaEKrUUyHF8+tJbS7K3P4s38r3ia2jtsfA3h\nLjb5QBWMhIqfl0FP39MRiYchtIoNMy2mUD7xbjDUREOJsjNSOWz4GhcJIj3p\nMXdrMswqi6HQ38+0g1LUzSF8W31kDhjKct5UCFHrp3vrVSYTG4eU6EH2/dFd\n6UmJFx5hs4h+SvNbcWKyHFCkafTyuwGS33iII0woriXsQbLBSpmeM19UHB07\n7KI1ZoszVcSGuUY4nx2P8xbcSNCAEh+25ItCRLL4m6UuKHHy4lJsN/nR31aP\nRkni\r\n=qZ4w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDn1ZWUWa7aAB60Tq8fCIN+aCzZfEbAxuA+lN4Anio0AwIgJX8+dIUJkzoGncCqkPrN8v1cXT5YWTD6vJ1eBXoFHQI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2813-beta_1557334040130_0.5818050714014291"},"_hasShrinkwrap":false},"7.0.2814-beta":{"name":"meetup-web-components","version":"7.0.2814-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f8c2ee461feef2a1429ad2e7c9f9444078d7659d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2814-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-oJfNwbndEB+tGsbi1fIAygoWyKtRfhnYSx171sNkZgxkbnum642HKwlDzKcwyA6ya1jWOxcEZw9sC4kaZyNKpw==","shasum":"96f4a9f4f4ce63b9230ef7cb77fb3471313fd29f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2814-beta.tgz","fileCount":603,"unpackedSize":3423423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0wuoCRA9TVsSAnZWagAALVQP/iZt+ckZIi22afC57n4K\nXMs7ooOjtwRXZVyXigRE5eZoDfgO7KUAIRbbWh8BndtoE3LUVV7XOCgsM38+\n8KVTOMeYH+vHE6a3p8o2JIzqTsUaSKXl8yNXYGYYoqbRqCjfJVRARiUZ1lGX\nhLvuNoT90I9eVPO1fIm06qldIviX0bKK2TaMq36KLI4pQpna/5M0HWBkwAqI\nHKrt6E1P+8GTs+6SREARqK0JtfCKszrsWH9HV1wSlrBP1Fn6oAxL7KhGGR0e\nWuSutORZfCpyO8euE8PIkvpNGKYFlltibeoUCZPv+dwH/8s06M63gH49cqCs\nk/nwx0KmQT/PZIHTG8bA+uitwH3ApmsvmFofk1wEM5kODTbBsqgOnrrkDStn\nzqs434Sf64WTK7Oz3eRp7Cb45vFw/stS8SjLfOm9OOM2xFCyAuuZsR1al77X\ncJtvBD+f9y6uEJ19KaZsdgw+vdcM6umGCDEPKTi0Gdi5ISnocfGPloUcXC9i\nRgFHUOg8/82Wsq1ofNLTGzCiOd+jEcYY2qEl7kP4FlLanVh8LzUFJvUZvGv7\nKF/zImJ4c2KGUbnMF4EO2AF9ObFvLOuYwjXzFVdhxdmR11G+7JacSaaJ88Ej\nRpV97V0jUgJIMidTh3B41p011MtNw3cPHiV+YgBS3qL13F4yFmljX37QPwKD\n1lrN\r\n=vflp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCt/lN7b1DiDIVZMjodj/gkku3CCMv/bd5mvsevpWIv/gIhAJ8QJ1HRgXovR5VIPaBp8LORtLNuIf74opRBQfkxvRHh"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2814-beta_1557334951959_0.8838294384849614"},"_hasShrinkwrap":false},"7.0.2815-beta":{"name":"meetup-web-components","version":"7.0.2815-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"852d8d931759f0db4e63dbd02e2cff556200b536","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2815-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5s7xRq+Un8Im4+KhS47OpVRdMBfHleyZwRFm/aoBEd+1/KEVFoLhwGcGMksq4vlMa1TtRs2sGvcX0hPc+JQefQ==","shasum":"85aa2767e3a70a239d51453d555e7745a237c6d6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2815-beta.tgz","fileCount":603,"unpackedSize":3425517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0yGwCRA9TVsSAnZWagAASvoQAJSGxhThJS1R2D0aqwh8\na51hr2aE0+EA3RdUmwq6iViJA/fjPqWGEkJ9wFkPo+LEIrYJ7Qr7q9az89YI\nNcF/tkS4KwoHsk/18M/Q/VImvEE556igTVVA8qX/O1Ch4cguaSz82FROWKwh\n2DP8YbKmuRnwqvVl2MGBqWnR3PiLn8oMaDcmlfGgMMrNnERxKh1UMyE3gDkR\nKeebeJW47lWG56hKGYlk3AW6le/m7O9CILvzYLr8Af6ShlMVtRGok0XbIsoh\nthAiqpLAay60COd4UcfV/RkaqSOjSmgfAGkfV2qMtMVddaOxTx5tbKrT8gXC\nq1OeR848tOkJ6xkUw+TXNjEU+PInQuG9YeSeSHBFqoDpX5MAe7LFpGlJILxm\nXojax8ld+48zDMn4ERsf/W6Ig++zUWxhYlCmlOrIPPdnJy8C3HB8BZ91BkVJ\nqpLtDtsFJ1RvqVcQgInwx2zI0gA1Elj0NI6dWq5Reob8rov4Hw4f3ClZuF/B\nXhuMtowGfNvC88d92RaOVplX2rvJ4lgHcNjP2FIWhJzYVyI09i1VQD3RMLJ3\nOUR3VstXngUCJyhMgmonU6uKu2q05wJCk/OXIjHrmsAzTxTJOrl7gCpzcqol\n23wx09tLb1RFWNziD7L+hC2htqqM92hgFZfjzMb8U2LPin/yXmhkRW3Nzd97\nnSAu\r\n=yZb4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7XBgCB+JGkMqrYbr9dHoql57oP9Z2au9G8h0KWXJg2AIgVbEwLKuYY9qUtksPiJHPkfGY7EMIpfNP3RwHRxo0cUE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2815-beta_1557340591596_0.4100868137625471"},"_hasShrinkwrap":false},"7.0.2816-beta":{"name":"meetup-web-components","version":"7.0.2816-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cba00081dca3d871f922c77e79735121d9f35b73","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2816-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-OKW7N1Zx4ChZxzmGHDwf6OmLsh97LX6rzFEoRYTXwA0xxC0Y9FVFPGpa4hQsWitVIDqeEpqASTVzT5cA0hIVfw==","shasum":"6e8ec12cf0047bed777c02a474c9dcbf3881e80c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2816-beta.tgz","fileCount":603,"unpackedSize":3426314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0ySgCRA9TVsSAnZWagAAnnUP/3GhRb9WCzv/soKBhuCC\nrikkq2yiF1sCBRKHGhWQ7Jg5hH3DTPNSKsQTX0QtWKAZe6UyMLBQycDxn7bX\nkL2eew5oQUJeMhRaxAT49MRWxSQ9tdRUgd3wkO5Iu/HC+aZ3zq62/mxuydSJ\nFQ2h1dOwAhA0NSmxbLCmpvKlwqSMquPExWaQV5Ec7Xy1WKZ/DmrPgYeQqYws\nKO0Srt7k9Wk4PLmSPSzbgqZUnL/KZk7KUjdjICtX/agdM8QxHYhovw+4dFWz\n+47pXxoNCReSv4ZBB+pU2rf8SRPT3HOjbvg9iD9ZoU7AF7TYKSY8TgR/uHjE\nKD2bcpiT3ygUd1TBOGH7KxiBz/Yrz9FBDhC591Oq6dBNbMqRKm40qinZFWgU\niDR0+NsnAZD6x59EbXuivKnM7X5O74uVE/UaB/3g2WNqsd7MoxeTs+1BiZGK\nD66t0WYAANLRDyz5go685C3OYAswWv3/fz5OdStZeM4ZaKciudRVP94FEont\nOXZ+zmFCYC/T06i/vMqni0q3mf5q5CiJ8HHSxP5X2vuWwpV5+D7vn6Q2FTmD\nfos9GLyifsMeTydKedWPXVdC3NeG8lTJnorpU0cQH8eE50ocy3JYaIGKQR7B\nx8ihpyNfb0y04UOrnzFFqNflk486LjqMUijoCzKgoa1pQcypQDyI3lSqn69c\ns4SO\r\n=N38h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIESohBht/hp5gS9nh/Nb3QafWLn/UviSixVvP6nxgYUuAiA+MZBOwe95fI33aPa7mTXsVsLJZdp9ogVD4wocofT9Dg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2816-beta_1557341343904_0.1355413219000452"},"_hasShrinkwrap":false},"7.0.2817-beta":{"name":"meetup-web-components","version":"7.0.2817-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.12.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.4.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"67fed4dbe2e31ed50dff8e6fad89bf424080cf27","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2817-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-00OmvAh4Vuqtsuk3t3KOy21yOeUCquLXIMnVW3LMTQg4GEHbqE+2osQY2+gW6DJ4yrPE+rL3rJsThwmfXb5nhQ==","shasum":"8c22c0a014c374ddfaf8a752d243507a615b26b0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2817-beta.tgz","fileCount":603,"unpackedSize":3426314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc01WRCRA9TVsSAnZWagAAJzsP/1qqT1J3kGDECSixMZQb\njsQipGsMUqgL61VOmX5zk5G6+d7/bWNHf9GfanUA3/mWm9HygOt03aBGI7Bn\n1A2txGUei/+CLLNsFvx412JaP7TujvU3Q9fb1ZMh/BrXyjsDyIkkYKPKjA+N\n8bSnLvebSYVsJ4/QWzZ1JCKSN7+IaACEMrQ9cJBxgY22BVYdWRT9F7zripXh\n8PsVK2x1XjZG/dqM0sX5AF9+7r1tzH+Nk1d1T5OspOY/oenxV71AfpT4kvrb\niVOAx9TTX8B8+UkAgWRigex50cvwympgmoVEdj5fVK7PJip0sqS7E2JJkHEo\nTUm3C9ODyf+2vWcPGHWuGeNR0HjukVTqLODsJal7hpkGjDfnjN8OK0Sc6wxp\nw3Qz6nUXEjTSs6VS3CtjKGgfbHESn1FhlZllwRr1yvfxVWzp1zvc3cP8/bhU\naLwQ1/NbIkDw9I7ubXZfRrSR+BXT5N6n9p6KuuTbWp4drNVdY3gPxaNi0wXv\nouo13IKoeOpgvP6iZZ+cyNrtG2eb3C9VpYFRW5WgVJr4BLEX7OIyfTC6aEL8\nZMT9d7MDczELuvpKMMznIJsFImobEdDRz/yO6Ms1Ea/Ovnlb1zxbJMPoNQ78\ngDhah/QmxsUZOsELd0SFb4Aq6sKuh/N1c7O5V7KD59eTJOdTxZy6FLxvD8PQ\nlXuH\r\n=HYMa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDbOZ54Ki2UK3PjInRIzpynSEnkPoelwllts6C3RlbHyAiA7V/dvfjVAZpE7tE3kK/WXmxpiwMEx/FcmBRI/vmGrwA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2817-beta_1557353872203_0.8214113052388896"},"_hasShrinkwrap":false},"7.0.2818-beta":{"name":"meetup-web-components","version":"7.0.2818-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"75e39196f4d6e07be752e9800351649f0be9a95c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2818-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aov3UTxdOJOQIaBw4/HPQMK+wKGbmYZPIvbRQXvuZnVO71cp9KkldPlNhb4fhnbOW582xVp3MBZUA1PoPaakzg==","shasum":"dc489df03e4f025e876583ccf55cc2186b1feab8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2818-beta.tgz","fileCount":603,"unpackedSize":3426511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2afoCRA9TVsSAnZWagAAX+8P/368JXLG5x/qxUvDkiHo\nm+3gAruxUoU0DSg9vTW3GOEsb9KmIDCOeO6pxpQZi26EJ0/CINo+9n3y+NMD\nXI1fHRVe0d1I/mD3MnlrThL2KMVoQW0dDpfJ6Qtn4okKootDdiP6qkV/8Zv3\nGUoNFYuhsaMfDnCIwVjiG+HhWHhV6fCtrmt/lcaQUKzU7zOqoPCksszzK4jH\n3g4ZF8o9RqtmFxUwBV0NrHGkfC7SpIgZKlOuG7YiVSh9a3WggzB5hgWreo07\nM7hR2ObvjI3wEdmjQLrWRZ9Uz4J9LjCPGhTjrs5lVm6BBmI2X4qInvSBALh4\nWRvT79rdJMcApaYCztVYhDxzF5N0xf3mROy7+LX3ihBQyIZDIEJP4+FW6ixD\n+TMdE+nGP5/JnlumnQ3YbGlhjW/98RHpRIA+OThbhoY41KSE6/yN+P319Qfx\nkMOIyxOE9khhX9GUa9XqNxTrvLLyhvtt1QB30wWXAWCa3Sz8E0vvQIlLUyOy\n+7AOuN5rExJigA9cTz3aAJyokcngLG8q3ZUggF8xCQVHmx9uiuxi+3ywAIxr\n3AlTsZg3cjVHwc3MngXqAiRMC4hwN+nyUWFtRBg6MyYUObK+eGc56VBuT+Pn\nL1MCzcHBYzYzfF+BknFLaFyShLLSQ0nghE4LlJpekIwULlkddMnmfMyNB9DP\n429L\r\n=5Gcp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGE4yjJi7rREhhvwOVSdA4bvxDrXe4utXy5kYJ03UxWQAiBJ1kdpao0NNNQOzMv+Xsq/FRGGvSB/LUR4YAnSo2fCiw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2818-beta_1557768167810_0.9879346924835912"},"_hasShrinkwrap":false},"7.0.2819-beta":{"name":"meetup-web-components","version":"7.0.2819-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cada8df981029cf12e35108b3a057bbc792f24d8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2819-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1Yf60da/JEuDUGCmYZr/LiykGJXXcSlnukUmUaQv4u3IrWvXTQGuBTwUJl+G1ie19QqmLW83NuaAMkHosJqAmQ==","shasum":"b292554f39d48d7f3220545069169a322e750862","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2819-beta.tgz","fileCount":603,"unpackedSize":3426511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2ak0CRA9TVsSAnZWagAA2/YP/jcY47QJ2TTdEFqDUcNJ\nORdMRGDLEZvw0IJ5h+QB7zH/MLiTpB8ixYYigZ/GQE2tDewJT4dUFZcZw9nT\n8bjdPDWKndZpqP9wtYsyZPGNot5ViRXGoH31lPqY8+7s9SFsL8AiRl3GbNps\nMOv5D2rUfTc2Y8GWWS6rVqkbObxqMkXzqXMPdXebZ0VSBAwbp65aT62ZiFNY\nxSUhPwwDf5ejAXU4GYEjXM/3pMAQSzC2/TEVtLOl4jrxKW6PIk1rMtVHIBQz\nxrTCKnszcpjE+I48GEqM3jolp/clXjQp6V91gzYd2rGOTS2A2riZ+YBXwS2i\nonuflMCDT7adkvw4uK+fa+F6BLd+nbwnX2xrZzNwqqQJGtH7YPo60fGMuvtP\nIe7ebCD9SNUWEdy0AhSAFiN+3tQhe+gwKRVt8YLX0KGx49WcYtdlo1DHzAqS\nxRXrG8IbVQ1CYzY9UKUT6aEo/AG56P2j7KnUehjzuPsAvEH5cJSlSKieWhYt\nKkNH19q6wBRLqCaA7BX52VXWjvCw1+Bdm91qZ8Xns7j/tvHPP9lNH832GnMT\nRTuSo+pU6ttjkzURXI339UOj7HIzROhqW3ncZniIMvjMzuBcXZSTeFOmsDcx\nz0hD2l5ydhNIfLaPtitQOgk+0xiVuqil1p2TVw0tXT/qTwMli0GraixmYl7c\nNXU6\r\n=B9Kz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW75FjY2+kLdwbfJY8fuMdU00Fwwzqvy5ubD3VtEcQZQIhAJzJZ9WfXOlUIKfxKviQ5ytymhaGenEskjY2xb4sXj7D"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2819-beta_1557768499317_0.05863163175146968"},"_hasShrinkwrap":false},"7.0.2820-beta":{"name":"meetup-web-components","version":"7.0.2820-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a778744ec7f9ee78b7a0b3c78860ae06a737a08f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2820-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-+tSlKsLJKAboqcBYKG8l5jrXLpkSAS+bX/LMkRBlCboTqBlAIRQk9HgrrwNIdXRi25rRAuEjrKdBzKlbgS965A==","shasum":"4cde9ce5aca116fb4fe4712122dc82cc291d9467","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2820-beta.tgz","fileCount":603,"unpackedSize":3425898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2bkGCRA9TVsSAnZWagAANJ8QAIkvmI+ktpHA2E7T6CSo\nzCTpzUuzH0j0dmbQ4Cmf90vXif+D8hkTSWdzSMP78jG1Mcmee958ZUfy3Vhz\n8km5co51YVLtVarT6DicHBs5es0NHxItuHfV38hCaDew9r/v3DZ2e/kGBrV5\n7Zc+xzYn8hrbPgIYkZJya+bz4z9mTp3vBuS4Ma+u2PVG2qG/qzfDFgMH8EsH\nrWiqj6/f7QpGxjM4mCNKwzUUNRK07i1rWWrpdG/hSNZyMFo2B82u2bbTd/Oo\nuQXRxsl4IeFOJAw5+Ga9pDyUMs6lBcIGu+Uvah5P67oYmdbn/bli1oXIwjoE\nr2ynkHVmSQaqdH2R2BMjbAn2D4ZGE1WSKAdeAa64cQKtz0KvDY2eh5KPVDw7\n1Ut8iIKqhdvLgYCkIwuGBB3nxX7FisiAhOK0eHIcGmS1+FG1WWGkjQ0gOx5j\nRz15tNoXqAl2PMRzhM+N0B+AHenOFzwbW83DeO8Vwxn6uzk3b72ZRPJss2I3\nfqBWa3eYYsrWxUCHDu4/tNu9dwYvWZN6FrBeysTH58U9ct0aAx30FFOlJc9/\nelB1OcaEdn+zpFSEF6brGcgitsoD8SJ8eFmIKE28FTDlX4N8cd+g1TPt3MTT\ny/BPcpo8dy8Fj+xBoqgrhpduD602LygeMkeXr4D0SeMa2Oae7RYPLxhEvnzG\nPny3\r\n=UvBU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDW8YFx6v7qMohFpOPajYUX2imGodtrxDRoft85YTJyMwIgY8ipR/V59gP2kYCXXKYAGEzeD44Lw7aLm0HQgWk63Bs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2820-beta_1557772549439_0.6137537835814355"},"_hasShrinkwrap":false},"7.0.2821-beta":{"name":"meetup-web-components","version":"7.0.2821-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fd5176e5bda9b6f1dfef6bcfaf698f94dc9a7232","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2821-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-g6+3gfngweRBgq83X/wBIayURE5ocxa+98lf9MMnXED3z1XGL3WjtYt6at7nDEwsIxlSmzQ3lqtgm827xo8Qtw==","shasum":"e4816d48e43a635290acab7c88a895c40bc65296","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2821-beta.tgz","fileCount":580,"unpackedSize":3281785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2chaCRA9TVsSAnZWagAAPHIP/39JVzJXX19G7o2MPZ+Q\nDvBnUtRE2VKJjonRAeOEL+CqoGCpPPj0U4Qnd/ftOv+7LZ7VWBT2AJmhEhSG\nRXWdQ5epMeaI7utsZ2XZTMLCIrsLd1nTTvXwUfhZt+2rm+xr9iog6sOnZRTm\nye0dnrDNNSxe2Y317QA23ZhctZP78wvxGy0heK3OBEDnX1+aZolRfVMJMZLQ\ns5e8+0ZEUqUeXj7HRsGMvibBhIwrJnoZdKLHqdgFHauQwmSB47FjP6Cwv7yV\nCFRq7ulDC0BhhM+5Cdn7WjrkNqmnINywAmCB3T2WtxYv/51/jmaN+FE1UKKi\nPDpA1Z5S4HT/I4wH38Gr6roRDjK2Q4H5LLVbt69Ix7Yvl6GYRhTSkMIjWZLu\n4VQS4MjFGt4BTmclxwlVJJHygCWyM9D1wqpQcLZVSlqElaqPTgCCl1Ml8SgG\nowKuxdn+0N+0jUyrD9U4qIi/04ykVJNQsyliWMNuNIZPmE0h9WUjHzXWnorl\n8QloFFDWSThfZfJJeQv0k/tXEYTVnEzEWLD4f5EedVNsDucyiKOe8RH38gPF\nvzhnM1yrm+asjS+jlOsVeAG7c7lheN4wGU92DlbRRYyQuKKMA1jydf1OHw3T\nShj7zp4Jbg6WdkVdndrOMZ/lgyQu87+TQSa/W7X1WUDviXHZgs0GF6qUW+Sa\ndzID\r\n=RdTh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+9JO5Bup4lPLndeGgeeFNZuRZSJ5ddIOMO73dJBxqSwIhALy/vUGId1dlb0L7YiB3ra8DG+xYa+jXYX15iKuBXgTW"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2821-beta_1557776473150_0.4151750169468613"},"_hasShrinkwrap":false},"7.0.2822-beta":{"name":"meetup-web-components","version":"7.0.2822-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"dcc407d8419226364671e36d6329e6075fd50233","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2822-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-YyfoymYIOwxtdda//3y617MOQpNAaO/3qB6cc4eSgj0tpabKPNOan8GCz80+VR5sBnJWi8bhpjCQXSBQtXAIDQ==","shasum":"da491977538305bf4f0b64d7e778e779e318dade","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2822-beta.tgz","fileCount":603,"unpackedSize":3425935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2dCHCRA9TVsSAnZWagAAwN0P/364Bs/LGoV68gMSLsDc\neZltjlVpwlPcSsDEtmE3tPSWsfJYZtugwOrqGRBR9V5dqPBax7BjoYXjxhwM\nybUAjSfrQX/LE1i3x3D7DwhH96rnACZuTvEQrBYub9DBthPKuKO5IW3pOh5b\njzjelAIl20pTa7ZLYV6jTsBJ/2LG6SnrJ7a8rEtZNsDJ186wGWWClUr8g0s9\n6/NYsqs603eWIYvPFDM4SPyK+q7AVz9+OxWot5U/X1+/CI6JR3nGINBFPpMH\nU4qV29fWpjIWdv0OLDIOw8MwbvCQ7tTCk+wEBPBOfuBV/eTZAp3EnrEEpYY8\ne2c0vOsygyhuGS8n9kwv1v2kqHV2/3yYk4kqgFkhZXHrf1gNP+noxkbCfnRi\nyHgs+Yioe/QIGDKlfCu0PUpqDQRgeIgNbvHvkoNMKe3A1S2oLPi2SUX5sm3I\nUxbmG7VvvKodrHzaPmbY9uEr0PkjQ5El1uzKa/mTTP3sA7JzA4nCDR6HPC2W\nZZMAUIt72ynEfh4quF8lAZ6peyWQB5DiWTGX+UIqKOrQ6aZNCahAG36RmMrQ\naJfhyqGwzDpCJF+JUng85/XqL/V+c3+BFGD8JRLFGh5/Nhy2fEsz/NA70apm\nRTVXWMa89ytMBzCF1MWaJGaiUvMvpI2TlDSk9ltv+g6UTHEVKg7bxEbmOdTQ\nJZDa\r\n=5wLc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW9pAbByAuzAuW3c6RS9JvrT85DL4n068nA0vzfpaAcAIhAKon+miUL+t1ubPpcxveMlS1sgQpLnZs1gnO4ak7mVgE"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2822-beta_1557778566476_0.6943588334645947"},"_hasShrinkwrap":false},"7.0.2823-beta":{"name":"meetup-web-components","version":"7.0.2823-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"785bf1d185a91a79850c53daf58f6a5aa09645f9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2823-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5m+N7aAKsEipih7w5S6EeNSHt3KuZ4sAlaATGotgTsak2y16F2S2FUmNo3aS1IO4hxUkVWY1SbAHT8PgrGgcxg==","shasum":"d34cad230735af0862da2fef128786cb736611b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2823-beta.tgz","fileCount":603,"unpackedSize":3425935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2sLoCRA9TVsSAnZWagAAxjwP/iY6eCZ8ZZFZlRhHaYQp\naqtcFHuB7C9CmilwhWvm/h7NQHHqD8PIh5zhf94A1aktEcZAizHN2BpilOlb\nZe4mOe0RXgGEa9UnN8iIOi+cqDbA7rrqk65BTVpT2gVnWF6shSuF4Vug7lWL\n/EyaUUbOalcVmFEIXcWcYHxmyHLSuIzZH3HJVuEi8PmentQi58trc1jFnzxU\nJjJ2eqhNvjQj12W2yovB8yYB8AO3zmkjFHYuM96y6VoJIMbFSe3ctal3nqwc\npJjpR0p3dafJOnceRum0UUuFlODHfqPRXccGazfO5aJb7ju2EPtyeMg1ONML\ndaOctDKNV/WhesU0fhn06V4dBpyY0ivZ+FgIjQELmWHB+il3fU8A6zSgkTW3\nwKqEaznXk2GBGN3aG1aqgXocmNccWJRe+ZQ1RBv8uFaB2Lv6B/7qGdHrVvby\n5ZPFHdrSqQjfmzAQtZIOv1rQaOPKlSH8/9ibFwBdiQwHNNLiLlh3iIXF5e1P\nn/SVX5B5WiAJ7b9n3eINH1L+0v23Kb2xMc30iejxw8/bEGCITAYAZppnZlDq\ndRvVTyqbnzqIiRNyC69euM2XIT7txGAX5bexyLmg9DOgwXcnFJJlDjwKb8dI\nRLPhXw0lRQm86DOsNkH7gcfiuSRkSfFawjp1UWIFM9gxF0DpJ2Lr0sBxiraz\nbGFk\r\n=V2XA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtyHf7hvNVDxeBwYHhN91kmou7CYs39E4O1nRn9guufAiEAv8G0QJ3LMNveRj1gSDiTnSPQOR7McveKJ6YVuETZgKs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2823-beta_1557840615393_0.7690028997709366"},"_hasShrinkwrap":false},"7.0.2824-beta":{"name":"meetup-web-components","version":"7.0.2824-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.6","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"79bc83d7c16c1bbb30f0bdbaa0469b614372ced4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2824-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-y56AX3I4uCTENi5bvZaTyFxZ89Gjx/9x+074feJjPFR+N6tgh9etT6SQR1gkjO90DsgWFSh5qC5lnUZJ1Hp2Ig==","shasum":"ef75346c9488ac1bc759d3b43b1c31770b4abaf1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2824-beta.tgz","fileCount":603,"unpackedSize":3425342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2wwYCRA9TVsSAnZWagAAO5MQAIdF642/o8u0fJGVtc8r\nqcEGs5tGwbTSs2hTJ5dmWYFTNEu6+lvKZc/aHrR6Aw7FfHXWGkvutNE8OzsU\nNzplrATqAKdgWUiMxzEqXxHHWFL5BeKPxlq2rn3ahsasT8+crcGVPVOeXH0k\n4nn2NEVLHJC9LOeBrt3Ry9DJisG308RAFr5u+CCHJx/lDpiFA0B1LYtZ3uQE\nhZkQMNF2C/1zdvckUuovp/qhqxYEqZ9vGdJ/LJej7ynRVLnx5ENZGp8TDTZO\nAeQ2YXaVQj+jRBrlo1mx0LRpGP8lsvzk4saq+qWZWjvXurB5fy4rbjgng4Ed\n9xeW7FnTkxjsnJEmWwV/fT9Wslb7LxZujXp0lotqaA0dVo09+5QBIlIsSlAE\n588O4Wg8vH2jCbngPGlgb08PhNcNGCJvQfZ/qh91WhdxQLaGExrbNeuC3bV6\n01p90YjGrkBaqv9i821496jLnnqdb0m1osrnZQXG5HTgGA2NOPyKlVd8wh9T\nkkr4h3bdzqU2hpDZBD/aDj5Hn8qJRzDGCBKHD9BpIJB5CYTvI7RAuNNa2itS\nMfUMUeb5yP/BYRY5UTYcFTNIpUK9D/wtqp+6xE3joOu7wGSFaAKTaV97i7pk\nOYTMh269TM4xTt258omRgqNPaX3fSDhNDlojESrOcMHTrteUAUPsjR6JxXnU\nFc0+\r\n=q2dg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJ6gzUK4mpUR0VG1Cn5uoEPmd/B9+RFSml0LJx5XKicAiEAl4gL39/n7PLZSInqivqowNIsf2w2ym/8V7b0tkJFh/g="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2824-beta_1557859351281_0.9509088182847418"},"_hasShrinkwrap":false},"7.0.2825-beta":{"name":"meetup-web-components","version":"7.0.2825-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.6","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.6","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bd138205b10df2c5bbfe9db8ca3926f20e0fad02","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2825-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AxzmMkTBJDEcPBEuKSu+4v6HB/lCre9/aDpiuqcphzpbde2fLTkqeF0pk/kX+GBUjlkoVgA9YHGZvBxB47KWOw==","shasum":"783b7b22bf61b7d296b59c28050c900544b53a76","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2825-beta.tgz","fileCount":603,"unpackedSize":3426597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2yR/CRA9TVsSAnZWagAAWU0QAJlWII4peTCwoR5p9c4O\nkY1JCgbSGweFPypwRfr8XnqxlKz2HVBxnPccn2Ew3cB/YqsCVaNLhecDMBfS\nPNJm3MaQ1QG0Iw1oK1kxuiWDjWqOo/ktuY8kOHzU2qogxA64WGyDiUfkU1iv\n+GAIZ1cb895IWxnU/zJYPol2x18Ovosy4E/DelbSmCJS9e2wJbbf0wSEThqe\nQ/mmJ0+MyfezAp4UCYSoxby1sDz4hh/KGpT2Gkym6GyGp0EutNqyR+MjkBzN\n5D50+/QDKzyeEqpf4ZxW75XzjAqirkRXQ+40oRH+1zKwiTPutLAjvHdfvDQr\nfci6e42ItdkK4Z3KwIysThoOnelZEM7YC8+tLqPD9wso8WcYcSxrk59cguxn\nViH1hCuXjrkCeFB4z8LEgdgl2ZVti6lJW//XXSicIlogmvP4zHz9KidxHiQW\nL1YM+2ppISQjtb2RiS7yz2s3ERpY+mX+ShAi3ARpx2Vyr9bOaPRjR2jNV0/3\nMoC2X6NSSn3X5KK79hEIkAn+DC7ng7iiY1e2STxUTucRjzicifiP+qq9JbKg\nvrYT44rTV12LjBDP6Ern4JVDD57uoUjVypHhWwVCs6gPrVPqGclv3mmuwoRR\nzo8Eh8KjcEjB87ETQfxOM2ielISEO4+DH+FDZqSuAeMnq5ojBycx6Uotnv6G\nX9VX\r\n=2m9C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBS8pnJNj8ccJH3tjJTSewD6U3sgcyC9CakTaebmGBOWAiEA7DdbCjdYrFwEB+ihInPvFHctN7ndk6gUIXTN2SPCRkQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2825-beta_1557865598844_0.2817148668128444"},"_hasShrinkwrap":false},"7.0.2826-beta":{"name":"meetup-web-components","version":"7.0.2826-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.11","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.10","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3e284c1eda91abf6e8a0d0734eb5e523e2dda187","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2826-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-dBBut8/yk3or5/q3RhA7uOfxd55vX9CtRL2Wi0Nu82NxXCfat1fy6qvOaKSTVKeCNh3B/+RIpu7nBA64J8vLcg==","shasum":"663e207ba10597f90d5131a4e615988ee1b23e8a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2826-beta.tgz","fileCount":603,"unpackedSize":3426863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3JKKCRA9TVsSAnZWagAAbi4P/3W+hpNp3anAOvySXRLq\n/ju5n4P4SlbdoJxGC5mol/5HlhSIwv60zacR+JzX7+dvNNvifnrVyBBOV5w4\ngrZFuzrN5tre9aIUSNvC4iAc3BmVYrjMB2yiMGWqSVcau7uNz4LbUtL91Sgy\nsL9WcM700GHtf06t2umgvs7UP6FaL0JY/dMNYeyNM3S4p1O+z+8SdwuiD+XG\n6x0IyebwTwwexoBpERvaMjzx7U1frkWvu0aeJLYju75tWf3Y2Sqgu+qXHCY2\nBzEOrBirFNfDyzya/uXfO4BxJspOHzwclYaL7IS4ilLO5o4v7HuPtceDJWUO\nbylgYRGOa4evCsYi/S1Ns4GFJQFy7Z5+jjRcdSvGREP2jSTeV/wioxSgUYWo\nKmHpOjDlJ4WKFdlWZ4CrXqK/QBrudK2clYeCOzGpRt9omHslWIY6fM50y9+U\n0CjCKEjK3urVU3/M8IL5Zfa4mPR7EzE4+IdvlWS85eophnGtiBHiWhlABGse\nZ6LokX/uplh8pN2wWAugzcuEl/ainaaMUSge0A7JjnzdE3w2toCPaAcmcQ7B\nM83Yhm52DdNT8Eqbykl/ebPAzlg7JiWauNR1lpH+r4U/g8mzEoFmbYWw61pT\nCtGoFA5Wl/4WaCm17ug9KgZIzgtvtm1dVK2WqObGNfwpcBfe5TkcnNEVks7Q\ngLkX\r\n=2LMx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2jLqtwjz8KbscXuqQSW7tBvDO8Is6laI4HWZM4H9jswIgav/uxPwazXrMyMU+aQCoknPdcfRxs6393pleqHREQKo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2826-beta_1557959305979_0.214968233859544"},"_hasShrinkwrap":false},"7.0.2827-beta":{"name":"meetup-web-components","version":"7.0.2827-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.11","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.10","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3045d0ec03ed7b1cb6974ba0f95f76b820aa58a4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2827-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pLPF5LAAbd3gb0CcoYRCRmQ7z5/3noFbm+5FUdkUpaTWERinmolWIj37dqZCD5fi9EdV9C2JXg6jSqcKObJxAg==","shasum":"3df390fa68f3b99454c6fac71d3963d0020b6609","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2827-beta.tgz","fileCount":603,"unpackedSize":3426990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3Wy+CRA9TVsSAnZWagAAO90P/36uCYnYGh96UxOhnRZR\nboyJtcdIftX6Dz5NFrBilt+QtJpv2OOgDr8CXcOYbG1orlQBuoHsahH/3i9F\nfCtFbGis2DQbQZUi7T8b3+l8VUibySw33iWZobmsh6YGzpXk1g+rfELX/Jlr\ncA3gOiAs8OAOGlFDyOmf3CCvjj7e4+/mf8DSzwuUpIrVu0P8qtfFDgnnm2fM\ncIDITMyt4KpHLG4exgtwE8gV/EZjajH1fHaFDE7QqSnXoq7oMP+AO6hFgQ85\nwFv7mbqqZB/4YNZZAopnzpULFghC6WFsmNsxD1ty4vEYc3ATodHb1cIyPb8F\nV59DE9988lWjGDovoi8tePVfjSVZp5CNgctokO/T2Q8bTE+wYs0Mi/kGgRDL\n8iUT6T5l+QpbfvuYqMSiovSNF5q8IlL7PUKnXKgHbwUZTjul+O0OCDnEd2ym\nQ1KIWvyr0b6yRV7Wv0ulBpxjcAFyB7HJHkfa8GoX0Edk+a36JA+rbMU2+3mV\n2CLeZpo1aN9t1AyG6iS3ZN3P/9/kffsH33rYbUwfsNRSg7kTDUysBciMfZKV\n01r7HY7d8dIACMg+NuWGGO+oYC+U+ZGNd3uQrB4HC52IuveaYZHd6YCStb6+\nX2/QGA7vZu1ASy0Vhl1keRrg7G4jlM/J8+SDiZsG8hUmFx1pMA5nUtwgFOjU\nE57a\r\n=6rqj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRZcKBrRiUwi2VbqovVuDqAbnA7yO0XQYjAUGOyhQInAIhAO0FJK5WyQHSPA0HU1UHwOCzoTVs1jIkFL0iR7U3i/Ju"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2827-beta_1558015165587_0.23665853707781292"},"_hasShrinkwrap":false},"7.0.2828-beta":{"name":"meetup-web-components","version":"7.0.2828-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.11","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.10","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d6f3419299daa8e9daee28bc2e12a0491fb996ad","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2828-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-A94TwH+gCyKfkPc6HY0WKQjhCcWYE1DJuUn1h5NzRJyH80cYTgTnUV1G1mdNP0vSHqv2uNqgrEY6O6JtzyovFQ==","shasum":"31119b6c17ed229fb59e4560a00d7b07c33f8c22","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2828-beta.tgz","fileCount":603,"unpackedSize":3426935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3XCwCRA9TVsSAnZWagAAPR0QAIx1aRjAbbwQ/CVHtDc+\nevnSLaP1PeLiC1w4JvkMpmRLHHt4CyQ4PsUfxyNwKrAUrtqXEbGx5q21AwXs\npOK8M1b3usY2ZU6ZQHePZvi0fwlPLtmJmbrokArCv9SsUY0IO0NyuUkA0GMp\nODWnb2WOKNiKKW8POZYF/F7kPQZWrGU6CU+jVLj41D8dFRItWYrf3eQnx74f\nVTbFDQ3+U7oVz8kipBJEZmD5J6DHHFMU7/2ozHPNMdebp+qm85kgqmCa2AW9\nrG2KUqaJC24p+9VhDUpEH04hXWq0+FUtEvhIsFfsJ9wdcQsU4onjWfRt36rb\nO1zyvm1I4VL5BWfyNDFGNh4G06XPkpccs3xJnEIkEAX/SF0fFB6JK20NGKpZ\n7s/e76zRB6IWmQj8ZtFcwwOYdp4QH1q6qwxMEcU1KhxBrmu3gGU0HPgJ0brq\nofN7uWiGagWWiM2tCZSUSgGYRZ/iKPIlWoPFptEezWg2OQC3QMq9sn6ETjHN\nJ4fZZZrIpFEatVDS6doE/aYEMi2qiGr5oWGcd3wXbVfCpvGopL890AthPwKl\ntEcm/faY0QnHB63fwhBOMYtOM43Edv3Ym1R/MUfyKybaty4dSTHmVbz5qlCD\nOX4c8jNZtKveZuEkzlUgxQmuAQgCxWIZnFKCX0r4gWtszp2HgQ3x4Vnv/UQk\nR4Q+\r\n=ARf8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFgfv6ZpZlxoh+5FPZrV64XiBkeEfLX4XxjOFgXDgGCJAiEAqQpqPJJhMjdT3SX3tBwMc+wynVRnNniwmJc8n6en4Vc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2828-beta_1558016175794_0.9878831859416259"},"_hasShrinkwrap":false},"7.0.2829-beta":{"name":"meetup-web-components","version":"7.0.2829-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.11","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.10","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f8e9e1b56e391b3df117bed3124ea7427c228da6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2829-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IFS/Drrs74xKAAgDvHNwQ0LYu/XHM7N7gaNzgz7MdL9EPzuNzncuunRF9oEwjczRaHMsFLMK55XIEyeRx7+oWg==","shasum":"c32c4a52d8d06bf5e1dbade24ae56af7c74d5848","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2829-beta.tgz","fileCount":603,"unpackedSize":3425528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3YxXCRA9TVsSAnZWagAA2hYQAIbX6g/K5xRm22pMaz1H\nkfipqp/KQn6Hux3F+bWr2bBZu0uhYHWS1vR806liXuiWtElcPYYAsLxXzW/S\nQpe2WJcaFpnqAr0mC5isdgt9XpkGdl0y43KmkrHI2QzYHBGibTsIuV6V05y2\nunAjYzn8jJRw8euKKOzx9nn6Nfw5HaJpK3k++slsklKL5GzQPA5hFjx4ZyKA\nX/ES4I0nzG1MaV6MvXXI4pi2WpkDHRarEoUBHHDFAShX9KNOEQcefJcn6nKz\nIZWm/CsofQCm3ueDXnBELTE6reeMxAh1B0ivH1yWVZbLzYtBfpUn/31n0vhl\nWPUPvORoaB5TgeyL19JZmQ5EWBpFiW3z9pXBdffdpOVvSi868OKoO03jM/ij\nACwMHz+PqdvbnXn0QYs6IJ/DUXPeZGi8LRKqB8ObcongjJF6b/rrkCkFTtkn\nSQvOnR2zdmAJY5QmQBN7zuJ5MpzsZGwZlANM/r2T7hmhlZN/fR5g0msR3t4x\nvJFa5F569msn6jVZBZxVeb0JsqwNE6sP5lWp+mD6q+vFH3l6mBdsXti3aIqG\njQBK3Fl+9bYO5oNW8OUuhVhwVk25b78gEOnTvvRJIdYnJh+K+QohYgnCdWet\nyueMNdZmJB/TDSSGSR8Tv+lLycpYiVPoJFqTuIdgJZcv/iaUBkaJkRJ1SH/7\nzUlA\r\n=Xh04\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjcJkCaRxpteFD7vNdlorCUD2LAzus14MVRytvVFVWDAiEArPHPO10cEOyz0SmLW49ISgb5ep3KrVkDS5MbJvhYcCU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2829-beta_1558023254204_0.5574882257318063"},"_hasShrinkwrap":false},"7.0.2830-beta":{"name":"meetup-web-components","version":"7.0.2830-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.11","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.10","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e28ca6ede3a6e3f36b79b05a5b46aa701f931f99","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2830-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-X8DMD7ILPMj+p0TzuLknBS5EZz38MvaV0To/DPIhKkr6LC7o3r8XV1JumNVn5WKsugS9CKQcRBjTld8WuLpGFQ==","shasum":"8fd28f1f58b827f9b91b2b9e0d45ec8a62a56f65","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2830-beta.tgz","fileCount":603,"unpackedSize":3425674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3ZcpCRA9TVsSAnZWagAACBgP/RAXpakTSJKdRCULsJ7U\n8dU0LmUPS9YgIWg78bhRY+5saCmJqA0B9HGC4U06ZJnOL4LYtlIKsS55cu5Q\ntGnWzj1GtG7ns2LibFaBDyZailcPrR+4NFwpOmO5FtXoeHXWF6Sd1THlQa26\nX4krkljowlzauSgvBPxkxf1iThKwOSOPTPgICq8Ntp/fpgjS/PLIZD/Z2ED1\nMnYnbS9h1mK5EZJkrpXf2fLxaL4UcdwRYz5ecfWv5o/8PZaQwyFzpRTLC2FJ\nbYgdZR+c9KiFgBF1uq+AOBUIzTj3+7QpPB4NFsZhhC5qqcer2sB/lL5yTW+m\nvEB/mc6MS6joDHLFxkk80MhW70jp7QEoxItYzose184wjcEUYw+KdM2w+cTC\niChPh/VOKu+v4QvE3tVZ9kz0evHh9MbVNz4j1b0zzl+wY1eSHKqedyCrJikl\n5z6DII+qtn13LQUywNBDAJdqPhSmUUS1egLcw5khflAMHWiTDUhvzrEF4Mt5\nR/l2D2D//4NTrL3Fin9dVpcxWM8yRLdUwrb9DOsPUiU9ExJfSjn5WnzF6SkL\nZvPBlp2AbH3uZgBVtBgGNFbTqzu7s8P4xdZSDmbkXeD2x9sPH4mOFocfTvAQ\nN2WAbsuf1uiPokILKAaoVFlE40elArCZdgNJBciSKLkNSBDBT50GeZ/tM7vY\n4os3\r\n=BATK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9qQRLYEO55YP+lF8kwAV9aGX6hgrrjxrs+UrE2cIulAIgFLRDzVocobADHj3vUeToU6rr3PrbHQKtkw0fWfkQMxI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2830-beta_1558026025073_0.4596941322694086"},"_hasShrinkwrap":false},"7.0.2831-beta":{"name":"meetup-web-components","version":"7.0.2831-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.11","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.10","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4bc319d0c06a275029fd775ad2a4d99078b3cc3b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2831-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-O5g7jJER5JodboWKsTg8nIN3XrWnacu+Ua/Ikjv+hbQNLMV/a7vAB2KFNF/aQ9cLE8908dPurhi/+UmLGESpOA==","shasum":"370a31aba5cfc9651e3fdf79376961b2830ddea5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2831-beta.tgz","fileCount":603,"unpackedSize":3425674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3tIgCRA9TVsSAnZWagAALIMP/jeEPAmNEKDAMbvARZZ6\n+ydcRUU6qXiA2XsJQ0hFoyFHyJk5cgiC0Kw0U3JpDI9Tx+EYxa7W+3K3cZxn\nnnxkduRZzUkGfH1A65oNNk6q8BarpyYNBPE5/gXZsepe/4tYAv5q7ktIcsHe\naJPX+dqC5WZCjzu7I2p3wNHj5PlCuYFRYxc7gwXTpFslsZrM5QvxYtMYSCjM\ngM0IBEyPbCTCiN0caPOhYPtYBcVzwx+Bf0kfHAEMCcoe7/3BSxLqO+PVxSmv\nddDuemfmohESxqI1CYgqAQrTK7XgmnzRy/MQ/Cvapm/VlkmrbQCOg5rgmoW8\n6LKaCNGC6KYbXIPniOqIRwHC5gCCUxHaWsOh3hh3yF4Xg8PYuvoEctdxbi2u\nQu4R+k5jtcGabjwWLdY4WksaVTPyBxo84PkVO9U7OqzXvwghIqAEerb+ch3D\nb3yOavQ4m7Gamn1dh4VRhh3Iw7Ovgr7TdeQvWs8AxVs9dKiERwVNp7akpLZO\nxdc811sgiOzFhf34XeLRoQXH61/Kl4aB2ymohmYDCASqREnzfOiMw3ySNCWg\nSE0N4xym3lhMuJQNb7EdgsXOa9OkBaeBQkuOIynVzOewVn3yCHDvSc2ITbRn\nvddtyRAEP+hthRc0pTIMANpDDqo5020IxXY8CaVWe3OdXU9lWpWpbTNZTPpl\nJZR4\r\n=PtO/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGMX093+TQX5zTL8XAHLxTbjLaz7ww7hu+1He1HH0uQwIgeQBV8YD0ZHBR8WUQZ33P+kP0hjZiZgpXEl8o2xQy4Zk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2831-beta_1558106655981_0.665811856442234"},"_hasShrinkwrap":false},"7.0.2832-beta":{"name":"meetup-web-components","version":"7.0.2832-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6608fe442e1c80e2cbc8d0178a8f2c4945e9476a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2832-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rkLdCCfJhd+YuCIzzb1aJaBgoPmKqe2znQlCM0Vlo842GTJYt81+IA+JfiJyn+lzyHhWT61k9AjXzA8qUe5tIg==","shasum":"d0162ee525fba04dc0cd39c9392e15a05ccb28a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2832-beta.tgz","fileCount":603,"unpackedSize":3425674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3tQRCRA9TVsSAnZWagAAFO8QAJtGR5aJkwQJj1pUCZqV\nT1Yviq92BdJ+v4m1qz+4dOq1pJSIwI+1yLlRZ0kRCfQvhcONBuYvK93CdMED\nWIzRR/cZW6ltfyFJxGln/j5bNrXoogIjM8v6BKn2yT3a7fDq4A3/5VP+CkP1\nwB3a7OpFcIWqwBPsrtoOAkbKQZfji2EBOEOGEOX+hqmqEYEAzVds3URJWjd3\n6BvTPCQY+KBkfU0C5l1knIwxKcyInFtq6iik6mC7nrT7dHNcYggQy9CfhOeY\nEhPmQ65y9OSsk/wEQcXxvRZW9JGKY4HpfISu4DWBm7cQMHNvYKvEe5ZglkHR\nh2Gf9c66LaAHPJZstbD34+jga2QQP2mXB5PL2VUxroIzO6OobgE3RlPxGmpx\nIZPhuFalcq9ADrvnrXjHZh6sb92YyGbhUuj5W+sTSsBa1vIUJ6z1RSRGdfrE\nZXUVEA2ixqcvN9Qx1CN1h+M9cohu8eEFwFE8L9bnoyKb0hfBcsqGrsPdbie+\nhjju2jB61ajiUDcJiOXu8Ol9dll5Fcy9Nqt4tNoCXzeg47E7v82tszuHmm1Z\nOjrGOu54KWchPBAESO/PsLD/25lp8LYNF1F8zQxQ6C1T9H8+IWfyrxdEHXZ8\ntWoa2a/YeXPLrubb4pd+wU9jmhdqNrPkxBmTGlqrb87DjNgMTlOsHNLUQvTK\nFUGG\r\n=iTVO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsd6hg7ePzuo6YSeNqAkpQUN80p+BHSiSVR/FG9L0X2wIhALsHt1XNEqcHnnlImgHo/h3ncIheVQjfgeoPqr1qhy7b"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2832-beta_1558107153229_0.36666842906710273"},"_hasShrinkwrap":false},"7.0.2833-beta":{"name":"meetup-web-components","version":"7.0.2833-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b60886c0a4087b30c5bf38f5b04ab3ba642ef181","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2833-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-coxVCjVRdYWgLBrWOpbsFE6Lr3iaADxUsyDCduM8xSHC33oz9DMW6C26E/epFLLsORNZ6Uhgp3xbgKqjx2hS2A==","shasum":"8bd242fbd7105c48e0b3c26d798201cfaee18794","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2833-beta.tgz","fileCount":603,"unpackedSize":3425645,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3xJbCRA9TVsSAnZWagAAlrMP/igOFPYVwGHH8JgdWfO6\nmPlYPKF+5QYWN+eCZnzAOT4oPNVKPjvR8+vhXr5XlToT8zaneh4+8yuCdsnf\nXFb8izKmWL6ivT7+sjnFnVXFAa0adyBBH5O/JR3cfSbrX+i/MT6n7TXsbPfu\naf2iNr3Xg77NyzrPYZ+BQMGBjeMV2TxDowyxDPiOUETHIiu+gnSARDAceofa\neJBDT/XUyeVs0Zi0toUXiBxrwmoIqYWsHDBYZLiy1Y6hOGrvi+wUIIfR8Xsz\nwc0bbX1nDiKTm4amz8DpAHxORJEFqHMq1spw3V6a2VD3a5kRRU591B+22qL2\ncZyNjuPWWBzgdPH5usRzGJHBUiBa3PpQkFOCgEsL5dvottYQwY74ox52Nwrs\nuGNvlFeWeJ9mRPLBMcsSvbvMq6DSdAzqHSNtX+8k5E2uPkALJSipIisC/2yf\neTx0J8wv2gyjFBK5PNtf4c6oyOeMlTEyO7cPXEYX+xi7vpFQbfz0/SbhE5aY\nrckDMl2lLcu9x+k2fwUAhhJQUAulLfQ9yQqC/CjbLR0/u81eVR7t0LbXcDXO\nmaA/vywFE/dG7pxcoSNmS3NkRyF7+LlxXWCOoX9bPcW2NjupqzVtYzuK4w2U\na7WFnr9vw7+hR/15hBA4JWewgv8MC9X6ii94d3YX9U71kjq+70CtmU1KZmBM\nPwPz\r\n=lp8F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2WLOHoAjIGdlDYbR9Ebg+91HV43jEQ76bHweb5PApKAiEA8ZtvXE6z/PMtgLymmVLNw6QDgxIBkLEoCbxSM8R1kVQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2833-beta_1558123098458_0.5715160623866407"},"_hasShrinkwrap":false},"7.0.2834":{"name":"meetup-web-components","version":"7.0.2834","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"07069ebdb26a83570609935ff4aba9567d2c2943","_id":"meetup-web-components@7.0.2834","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-p+taaUJ5Ll7hX1fwIXg7Fd/8CRMdRHQUCiwE7fypJjEiDnsLtRqz7/D8HJhlpnuClwrhmHNBZo8dQfePmSEdxA==","shasum":"1226ab1108b106a9d3608cc3fb283292d1f1f5d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2834.tgz","fileCount":603,"unpackedSize":3425640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4sw2CRA9TVsSAnZWagAAlO4P/1dIv6tBhzDh08PPOkcp\nZi7Z44nQs8fQaVV/Lt8zsytP9x//O5h/uPOchI4bmxwiMBPN/fzrL+1Zs65b\nITNO+NSDq4mmv+yMCQxMa265MBSooCz5mn8RSLo4u2x3NpTowlfDC9N7fWy9\ngKFQLEmrDX5V1j+CvOeycQClM8Gmpa/UAAViM+ySxFecPgVDripn135OocRv\nf0DVOx2wOjMxWIAwfkqcTy+I5JBTg8Pfu+X35YSncTPVjVd0bQlNDI122IQt\njemDrBa/mcaOU7ZM5FxnUlWTnfmqhgndJleLYUo16I4o1LeMhDR5X2rVd4WE\nUwCxdEeDXfkcpgOoMbYmFbiAlwAbx8CKjW4GfcUlvf3mLXp/Vdj6cPxGv/Bo\nXgWXfoeCQGYiez+0jVwuY5IcSJsVcZb6gN0g29Sju20jU2jhnJtzu2393l7d\nGJXm9rPMQ2L9+/vDzsWXhHaszUBKdvBgyQlKST6Zst54HGSg/2oeZJ37qzCh\ny8RaicTNbdk4dWdBMyb13BBQcaT5YVAiyg8UVs+l6Y47lkBRzKYVBrrbBQEd\n4usAgepDfoOVmrQtzBrUsUviIzFPPGptFtPbSRnWde59NC/9GvaLFplfJL/t\nTeZBasd5oaNwH+e+Un9hj+BRxDDynCV3AdewoHjnw25epDZPHRRxjvl34pRY\nfurE\r\n=g9Ye\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkQzBrpQHapW2VwdZwDKxZ+gZ/JZ5L5X4Cdh5r7xdR1AIgIp589ydbMLa8sli+HvtB189X7nshY1xx7P9P7afQp7Q="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2834_1558367285160_0.10701456246870134"},"_hasShrinkwrap":false},"7.0.2835-beta":{"name":"meetup-web-components","version":"7.0.2835-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8830eef1c9bc3ce9a7b6d6dde52394775eea3fb9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@7.0.2835-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fhNEteuy77lACzzhCdoefDHKvnIYZ24JCvl84clIJMygFsiZfhBel9ApH6O1EP9AglIYOxvEbIhNjtUVlUefLg==","shasum":"414ac8370d475714b6c33542ce1943274c396a45","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2835-beta.tgz","fileCount":580,"unpackedSize":3281748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4tkRCRA9TVsSAnZWagAAnSkP/1ZoUaOFhBfiHlyMOB6/\nRYladlnkxDiPGdFJgATVfm1+53tKnNQvbERf42Bx8fLGdU0l2UvCDT40T8QH\nWgBwCApbqHbdDAWlNV4jT2EqP72cx/modSi0rEinain928MpfuUUBPJcpmn2\n0qQuEIunNA8cCdJOX0ALVFRfAfuZxQlxFD13DyLpg7GYPqyEO12LRzQmL02t\nLus/NYrWDWtqO9Rn52qZVuwi882Mo941CKj6LFYtGSsrPaugKRr+WGKFJiEc\nDkGfAqZX8qEL3VIPYiAm49D0ozIbfgVlXnnAduZ0A+indPbgquERIK37EDvc\naeKZ6WyTqDczfRXCDMPSXOEG6LM2OAmFZ2Oz+TErc85qOanN55oKM5TjYQxC\nH+uatfpV4xtrcNO/JhigtxkxBD/Ygiz3V1cP7D44aKrQg1JPLs2o8ZG+5o0v\nYJz9MYYMz5OlMZGvfGFCsEBrp1viixV4KbBYjZLpxF/qLvI1ZVcGLrc+dR/D\nZR04QYVHRoZHZuKwPcSb3RR7QJtgpKZjqzxuoSf8ODg6Q0qmiHgr4B5koDv+\nEdMYgERxFfhNCMUclYqTTpkOWJcIi+6+L36Yo/vC1kT4StIbQJDqzlY07CsE\nP02LAZN8JSdfbTBuKIVEDGdFT3m9rGxmEUGKnuIA8hJYIQA6oA3Ish62Eeh8\nOeyj\r\n=ESp2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB3JkYvGkIy4LNUCClra7UW4AiakhkbI5wpcOWcjTxoIAiEAiN0CuC1ooYWzzqN8Lq2f1E5LmTzOdwxi3ogOKJOkqLU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2835-beta_1558370576267_0.3581100643998374"},"_hasShrinkwrap":false},"7.0.2836":{"name":"meetup-web-components","version":"7.0.2836","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4b818e1ba80bba56f5a4593c0673e07c005a5d43","_id":"meetup-web-components@7.0.2836","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Ab9nUk13w9QsJBQiisBYPkqWfmbbgp8eWZN5MTvkoAYr3SH/lOAo4wXTk4P0Oqz+oQ59UfbfA503LHQBlR13Kw==","shasum":"5d9e4c11df73b6131849e82bbeca7b5506f116d2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-7.0.2836.tgz","fileCount":580,"unpackedSize":3281743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4tmVCRA9TVsSAnZWagAAGUAP/icE2N7hKOyxlhaiP/+V\na/ZgocReAeYVdAfWpAUTGnXetbfOxq7DSrJ1BICS5/caYnidYXmKO5stV7lv\nRpyYKoic9A3ehGJS9moghg7ksAdWfYEbwCAdaVJEqmLXqZn6/nkQO4Rk+eU8\nTtx+FkuyNqKaASnXXg96YFdKMDS03zfiBxxQ8tPjKpjnzMzynaB2fbPNiFC0\nNTdQch7G4gaT01ZJB636YXAlcXQb5DGTjr58TxLwop+wBUW0dk+Q8hy3gkwb\n3NtVyv3XWgFjO8T0UGOj2wxfrQB9kh+SEwynDLLu5VXs0+Mk+cvjSObpIX9L\n5JP81pEyooqJeCoyOEqKKLk8DsfC3HnhhBPoE/ot74hxbFWaNvObm3uClNKE\nzA6VEXZTJwT9kXKS2Qyw3+03Wx5NMhXKeZOBSsILpUcYnhn2ojV+6/Uz5wtV\nXufKwV2HKq6yRI89cyzf8vW8elWB8RsS2Krf18ayCCbGsVFB3HJtrO8fmXK5\n+ptaCddEqmwhXOS07Hpy40CxP+IqUm3W6DhZitLHqEbs8W5ShptcPrrz/4E3\nGevuydPKg0Vw6GIpxT15tDxvR6+j6QdFBy1wXyBrlMNpbc+mhYZZcBFRsIi6\nvrmbGjFx8Sd0iWPIFb77b0zAwZk4TU4cX2OHF7SC+wlZbdMPMLhAJsRpfD0d\n73T5\r\n=d+sn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYvG6xpZFQ8t/11FiJJg//vvJRlbb8BOCSlzJS5ICd2AIgIAEVni4XgDYFYEEPVeJlZoBo/qT+btwgPNK8tq/MEZw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_7.0.2836_1558370707812_0.9512591873252145"},"_hasShrinkwrap":false},"8.0.2838-beta":{"name":"meetup-web-components","version":"8.0.2838-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4f49b481d3818d71b752dd097b31808cfd71f2c3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2838-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-T/ZQBJotoPZeGRTv9IKsxJjZQ8lLvX35LLjPsTNUPXVdQe6hRI5aBsy5aFNq1dCDfvNGcA22bxa3YE1n6EvCCw==","shasum":"db378de1eb418e3863f95cd706c98e54dac9a2e4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2838-beta.tgz","fileCount":603,"unpackedSize":3425804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4uIMCRA9TVsSAnZWagAALCUP+gMgsQD1/+ccuJEsGXaS\nqLD6AiuTXvbFlRA2Q17fg/UU6A65fnE582PS/BclbqkavOAnsCafaaVXlZv7\nspVkt277oqtMpzObX9Ekv3YvncVm/R70kbq4GFqfJT7Hfi9jusAsCIOloSRE\nIWGaVL2Gpvmx+CxYlfU0W9P0y8vGV85EwXq6SrF9f2Nqc1RVbtZoPHFP7FwD\nnyo9le8yG4i0lsC8peWSZfx06Xf9vhXcd/TwUpHOmX2COgERBzJGJeWFv6zA\ndN2MwFq5QkVIk+ePgYrEdcpzzkWjf0IYOuW647tXkIgBjWeVdFejHNpiy0tm\n+G8SLVoWTVE+OX7yEaAPCqcJPUxR1wmqOxkEr088XQ424IHcMs+Mvl98vauj\nTBxbO6ASf90geh1EGc4f5krXVeO3+qp9MrQfVHe1GM+WCa52lETU0FsZo5VL\nRAeXyV9Tt1A7WfW6UVVBqtxGJiaZKLL2Rhesff+96Ht8BjTxY7jMbYbz+4Y5\nLwrolw1zKSLaWZB1IlzSSHrWy01zzAwIOEBNTO3q7UOz0yRZvTp53OAuLG68\naNnHMTKzEo/kCMGAoObiUy7aFivp1m9Dwp7xx4vMMrzKoA+2zPWQNRJ8k9/r\npv+TTddgRIS0i9cHpQJJ8Yml22dTxlINh+UEnNcbprpoRjbLWXljm6uj1pKl\ntv2X\r\n=Qg6P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp/m8XPKB5HqzBaCvGhtwj2PvPXh7kAIj8Lewat34e4QIgVUz4LQz0VgbPFXVYOMVwuHlL71c6rxwSRHBy8dEulRw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2838-beta_1558372875773_0.6862569256800677"},"_hasShrinkwrap":false},"8.0.2839":{"name":"meetup-web-components","version":"8.0.2839","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b93d8f3d207195bc680a986442980588fb9cd4f1","_id":"meetup-web-components@8.0.2839","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-DBacJ43BR5BaWFWL2naoBYl5HjwHJfHJ3yGyvEjB8wlZa4Zq+aUA88VRNukPSh2q2sRTLsNJdKNqClWYjhqYkA==","shasum":"a51ecc76cc62c7f35569c3d8f3017554a497e09e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2839.tgz","fileCount":603,"unpackedSize":3425799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4uRFCRA9TVsSAnZWagAADvUP/id8Rs9yQgz+rMQ84/6e\nRfndam1KTzn8Qujrwd6T3FP41uo3KALxce6cNruA0FZX0PHZHitfB6O1LQrk\nQjtnMrpqvFB8ufYGKcwX3pXUv4aS+bZx+MszCuwufP4osGbB72TCUb+0KbRQ\nXu1EyGLnwkmMi4yZNWvSvAZDqbe98XlbXL7eQwhJiOr/NbSjpjnsDOycm4z6\nCFy2L0lgz5l16uzzDKznxO87MnxraUWo16h38QX1EoWhN3fvw5v2adAATU11\nTpAuuBO9kox7ZfrnReMBdXG+B11l1x8KIk6I+A6RG5lYAhMwAMu3GwKHxxA1\nNzWzdEPxAdHIouWt1S1o2L7Vcqj2phT39rpJw+SWwvlMYoD9RPsIW6PmfCTb\nLjMDnZCTf6ggtbWnE4BoXaP3mQX85l+TBcE/WWDC3dYLGerDTvAtetyLn2Oo\nrr2RHDNH4v5nRfAAq43Ks/iSubsM2bLt/P/xsEeUtqsg6X00bFcQ3Y8ESnlF\nrig/Fr6dkLqDp9TabdNGR7Kix7wB8VRNGcEoVI9ZI2/wDekHkTdnTaaGoBYn\nWN992I8ww7VUsehavR4YWyWDzdpLFPBRQA5APxpZFFVMuibqT2tRSauSU0CS\ndD6kwSuEqt+PfOYGzwhM+hD7JissfvjVvUZ2a7Rsi9GjjOlrU2eDd9P+9Dz1\ny9QD\r\n=Hx8N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAa0sIjujoJb4vxShwHRzK8MFgCuHIwGV7H2xWhDveoRAiB/x5zd7s8qLs9V18lKeTErhk92Qtz70bJWbsKC818m+Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2839_1558373444385_0.2209978463690796"},"_hasShrinkwrap":false},"8.0.2843-beta":{"name":"meetup-web-components","version":"8.0.2843-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9b27a0d0f6586ae04c4aea89cb4cdfa6572363aa","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2843-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-7Z/U6pLP37MEiGK9CmKCh0uyctkrh5DX++MvUq9J2sBdFx/PAtYPprvVHjS98sNyuiIhdSAM8EzGd9VfddcgZw==","shasum":"f427b70621fab103c4306e5789969817d8f67743","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2843-beta.tgz","fileCount":603,"unpackedSize":3428812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9Yb+CRA9TVsSAnZWagAADm0QAIoMq5jgpmsOLXz4uxxq\ny3ZLk8AVYNDgoJJ/qVTID5JuTsfFxiPP3KGsARroQFZcn1srSVg0fspjPOs9\n9r37Wg8KQETJ4XfFPZpyLQwUwhMQ+VvHqhkbDCFhmJv+/HoJCKwhAlZiKpI/\nuujug87W2IXN+xTjfdTvQBTopj5aO0JqGtkDv0tFt0JABtJqyGpiGc2f3Jw9\nsxZmerL5H4zaQ2XSDjsrnMvk+KEqms8v8fJL/VW8b8FxoRJUQ80O6QYf2hE/\n8aUrAtA62xTh83qMZyel4+QLyT1Dj9J9SdxPsv7IraK9O+Ut48+Tz0IoOSTM\nwPH1HdTCg5FJF9zoJK4XFGentOCjIHruFb6tia7YatkozmMvse6Gjeu8V8vw\nyr1t0drIgsysvYoAv1GmO3vas2E7/HQy9Vrvs9uL0QvhqAhhLeSkOhHk9vCK\n38qGJK11LbiK2MxxSohSzDWvXt+fiD3Q+Qq/A2YQI7k7ASOeVTWR+iDI8HXf\nQAI2y2RczEOiMuvLRFgxVdS2kUsxqc84MFqObqr7L037dJR9W4EJyqKbpTCf\n9ZBQrN+vwVhuvm92p9QkqPNcmVXjMelBtiGlfo6djH2tBwORS1hu9CWSVY4L\nDq4WIpxFEZU25pnmHacYb+3DfXXCqifT70+tffG4JUI7fxsS3z9FUxCGWxYD\nGrP/\r\n=PyJs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9iJz7rT1VuVm7v0bov1U9KsYmtIBa2+O1TqB5JODZWQIhALvdqVaDWykjzpM1sBUSL/Y3+2+57+HXI3WdikQt92sx"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2843-beta_1559594749240_0.07015198447955329"},"_hasShrinkwrap":false},"8.0.2844-beta":{"name":"meetup-web-components","version":"8.0.2844-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"afb3e92f16e90754404adff185679dc1e05a7140","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2844-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Eb0UWp6Cw/WW6IBIXidzEWVtrWrmI/rtwOP8kpXYQA2QGrODj9l6CzQnEj2O5V3xxtwfcy+2Yl0bSAJciEM2uw==","shasum":"ee2615acfe778a1d48acd4818a17e38d14b83413","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2844-beta.tgz","fileCount":603,"unpackedSize":3426852,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9YjQCRA9TVsSAnZWagAA1ZUP/jJLm1AQiqiRaVwlhlQG\nPePyRHzmGHfsBgE2laQjwXAonS0nzwDjxGt3vaGV9ysU2MXh2O1CfQYbG8rj\nVjU7OrDsazXs3fJI/ha9W+z5Xen3M6LNdCuAwGatUaOInGjaRYzse1eokbPg\nA0wMrHu+wcpOyWdxbmIrFqzh9h99rdQrxIi5VFp79CW4TMPOi8l+M6pWfKCA\nhjCtexx9hdjk+ovUK3vCheobuv4mzpaicaxpFzSrikRB12tklTxX0RARcADa\nItv1hMCtC8fPWYejq24DW5cc42ppkDu+PTCXYlYaU3xzuPZGtZLxB9hcmdPR\nMtnrDjlT/Cx1fOAFCSN6KV4ElM0SvWTx1xUXdx3loiROuhYVbDJ4WnNlEsX0\ncBo2m1W2QZSoIpkrG4ZBVLy0fMRCcJ31V20xMdFGSuR+zZzWfxCOf23KO7wh\nGXIO+rtMWSflewM8d9GkJMczoumX0kFXAgamIKz5/unCGZH6XPFlU949RTqn\nrhb/t3pVV9u+uuq/y2Ax2bdfl+zVourGNlC1zuz5oJVStFpDdcHFSy53RpoX\ncA/BcHMUAGUsfQ1eZBLj9IHdjxzDJMtbYiL983gLCiJ6vNFYb2YGdPD+bulo\nln1T6r+tp7BxVwLhPA0m/9xagAdkDbSM366okXmKFOcUYkJBMjsFm/ryyLHf\n0qWe\r\n=llrS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSQeVdseG+J30RE9xCIxkZ8+N6FqaxfhVRD7Vbt1Qc6AiEA+hXI5uZ2wCmDeKLRmJqu4OEhIbKNgmnRCH323Q+g3HQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2844-beta_1559595215813_0.3969049152054771"},"_hasShrinkwrap":false},"8.0.2846-beta":{"name":"meetup-web-components","version":"8.0.2846-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7fe10e4d567384d9da9a1003782c6723754ceeb0","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2846-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-UQJFwNa7QtVoAMGqlodEsljpZiMfpN9y+XEWYO7281D5MvoVYjUcRXfmP4PLwAURox4tD8yoVw4AaoHf/YKzwA==","shasum":"3f4e408d498dbb57516428711d9cbdc7fd225dde","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2846-beta.tgz","fileCount":603,"unpackedSize":3426872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9YoRCRA9TVsSAnZWagAA6DwP/3AnXldMHu2Ndyr29Jw7\nVN16883dc96L10bpA5uT8/6HPWIEiZvlo9Kd7zqszmcwqbGiSBvBkKjlKBm5\nMLYDVG4l5rXvatoll0IH6xw7H7hHddkHa21pLfeTFmvbhtPNZ2S6SfMu9D09\ny1p37TsXergfzTXcmvxTXCeJqV7/P5pFtUS7U9i4Of9MJkbEFM1WLjoz+t0l\n+A22b/LlLGNyDYuSa1uJWhvEvSmagyojWs8U66bExvTF8NUY6LbEcONQ28Q1\n97s9K0fmpX/MmhBJb4I+M7ZJQ8sH4biSkEMlPSPvW3BVtUKT8VMF5HirNMeC\ndQiVkwevcrXapTNm0cD6ERgc7CYUmzujSfSr042CHmHWedryRbKR7LvI5w5+\nPSqLuWPyvFcAuBrGYSHjeIijRruJFeQwyPSmUHuSjvYUhDEiLlt6kwxKwyfX\nkRiXpg/LHPe3qTd8L+mRneCJareSV5EI4gu2PjxaIqbtq7RR0o6gN690ONUE\nrsjQf6GwlQ7u+NLXY+iWQYJWbuuccdMKay9Hz3RiLc6y/omfCesTV4sZdwRT\nchZmFe3hJLmO9XrK0yBJqTYCGuq+VfWnrW1NCUx1VZctdGJ1Tc1v00odM3an\nxAo4DLfypTKKWXutSHFKjmAPmEvVcXEkLUr0C535a9S5ulU4GqCa2dCYru4r\nOOWK\r\n=3zAY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG7QZ3ZejWuYmcPPRIViHqNnVyWGUN0AJDkKC6y3cA70AiA46olUC3zwfPOEOrc+CSqVOIuzhtmAKlknSeOE1ON/MA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2846-beta_1559595536148_0.8999216802876158"},"_hasShrinkwrap":false},"8.0.2847-beta":{"name":"meetup-web-components","version":"8.0.2847-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b4dcb62a7daf83bcdca2f821438656d65e7b90a7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2847-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-FPLZpAMTVWW0P3bW2NyLK4/G+/a0g4CeOUlQRPHXrlJXiEShu9zfNUVh8uADoX/Q7+gxmgTT2W4oGrBAe4oHIw==","shasum":"c7510858e5d0f481d42fd1dcb5771c4cb5e4bf3b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2847-beta.tgz","fileCount":603,"unpackedSize":3427280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9oTrCRA9TVsSAnZWagAAKW8QAIcvIRPE2hc20Uur5C3D\ng0F6Z3Mnvvrw4tk9fW/roC9F4UyTWB9dfPf7IjqKIAlbe70igq4TwlvN+hPE\nO16DVzGDcI3/xN9cwaR1TGQ2XM2nKtrP+N3BfPwEf4JlDoVJjtMFZH5JRpl6\nUIZUBbqNRkpzid179xSbI3ByyA9LoFmZaqgYxVjLPTKNuvOCbFcjpBNkxHYZ\ngv+fNdVLCjKDEd0i0kJEZr7Kl2oKPNp32ApboNW+9aJXAYUDWljbLoBDyWfs\nLk4BN544cbjzFYxMcLs5CBg6LKhuwzlQqjQILk2WnzAlXkxAVnx+l8dbQTPu\n76ddlz16l0USpFaabbMnjH3a3Yk4nNC3Z4BFGjylw6maCi9yBWUbrErozO0v\nCWsfLJm1ii140vZpMdou3MiH5tMhW/M/hT53in9MLyqzud2H0+7T56KomQrg\ndpRQaPEJ6b4WGsgg45jVvIocyQyWfbbLhWhnf7CzU8TtksV1PSBDMyUGRzPX\n+Gd+O7MIcwzWVWmNycm5APGLszA2asvJVrCbjloaPLJs/iFCodBaBmSFTLpP\nFe8JFH96XJgIfgonfGO6b5lpOPfopWzb+eYdGtllTtI/36/2PB7G+CRoKsTh\nXguMOvBBVNWjIV57eu2V45ubNmmKJdlRfXPJTufHrU7n5N/wRzvdOmGYZ2YK\nrJNX\r\n=521z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMlZoq2hBLnmQR8CHmfnXRpt6KkxXn9qHvh+N9FAJr+QIhAJMEfThxOt9ggk/c40CQx/hrNgkSJ7fFDA8qjkrLdY9d"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2847-beta_1559659754966_0.301250713515"},"_hasShrinkwrap":false},"8.0.2848-beta":{"name":"meetup-web-components","version":"8.0.2848-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"06f8247463c7ccf0c90adab34ed664ae33c707d9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2848-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2Bkh80ep7e/UY9XftykD94glVI8kYFr+H5t7YwkLmytLDvIu9HJBLDY4UYAZj5ahxQQa9im8DSjsRFbqVGUOZg==","shasum":"0cfc857728dc49d967dbc4d653e2eade2e6f4c3d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2848-beta.tgz","fileCount":603,"unpackedSize":3426661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9ovLCRA9TVsSAnZWagAA8PEP/RO+A1QzDV90Ns9ubCOH\ndhbZ+YMo2/Ob63r5zI6CTFCGnCaf7J212OYfJWVhSqYTZxXglT8nCS6g8AkO\nOGFj5VLeOaKfOZsCt7Bst+pzNapyxG9XsknUjU3aOSgLtMLlAMufCzl65slz\n1qwp1k4AGtCB9w/2vQ8A10fVJt6bo5dKK1YOPEtGW5+Bj3jP6/lF8xf89ip/\npHMzTz8h2iGjkFcwiMpZ3/fKvnPinKfdioeJFabfAvDWe7n+lb8SpcpOj6l0\n9GDZVffS4x4PdQHASTDMEtgSErYfr4QnilJ5Bu2ewBUGPsI+zx7yB3+vXYnT\nIpdoos1aImNxTbsRbRTdKLCjRVBkwrxsdoeXiSbzjOg8dTi7eyrCS9oSmAqG\n3C50NqLUDqEnGO3hjqoJVMydb4h3aH1geO3TLV6+u+8UW8i5t+wF9RXUl+XS\n03zPcYdy/8TCDMG3OGH9FWgKMC3JRIrtNAVifKmB9UyfrM11r7X2b0hljCQS\n7MPw3um3SNHEnQWbx4jusgqrG0Yk58D92G4wDmKd6v4HXEUYHQbM+CYs9D5Y\nZDagWQSob+CTHDcewYw+JQhthAwFcSLJtmeSGOen+GqbWd7xuZwb+0Nr9MQT\nZshet8yAbHopjY5BzpUcNr3pWrjPUd4ERSoxnNra1C3wyjvIY5VO8cpgQfvq\nGFMV\r\n=NQc1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbcqBcz9YXFASK/jrL98GTdKDVF9DYGl2xglkQvYEbZAiAJug6E4K3Z00SMVItgMU8h5vMPvP3YkYTcJBJ+aM7LYQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2848-beta_1559661514327_0.15833616840554554"},"_hasShrinkwrap":false},"8.0.2849":{"name":"meetup-web-components","version":"8.0.2849","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2a717f9ef6b86872a71c48e7e9f1f7dcd5ac7099","_id":"meetup-web-components@8.0.2849","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Sm78uLV2aTJdbpyniUq9uJvFOFs66rFkiZe7JgHPsS+yba7izg3Ytn1HRb9N/mHHf2zeWHoC2M4pU87a/KQHBg==","shasum":"9542b42c08748d2bb11542535731ce8643cc0278","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2849.tgz","fileCount":603,"unpackedSize":3426656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9pEPCRA9TVsSAnZWagAA4bMQAJSxJbgcBVETcCvE08lh\nifk5XQPXfKqJQnLSL9YK6jHle42m3Hh77tq0mWp9FC8qA9p5g9wJzBsh1kw8\n9GBG/oduJyhUH8sU8Yt4kxxfFkGG0ArdGIdTsMDeSxtegXAa2NiIOF0JWPfG\nNo9ELO9LJCqc8tcPSrL0qCqgygFlV899T5YczgRNMtUGSiOgR+qVbHdEIQcC\nAICMAM7YZzaeB6NXs+tPoDVCixQ+HZk5T445ZjIsDbA5R1/Fr+BLrVxy68gt\nRMgRSSkLGplix7sh6ghxWjNCUCf7WawKzAGe6mHFiRalT6eBHcSmE+OA07Rm\nAsohje8bDyVuLqFu2XHG16PGVJj+C01nlItaHDrAeVPRsgGx8PIjzF8KJEbN\n9ICD3wDben9haO+/mAf2bGTALFe+cwFg5rHMsgIsu96lufV3Qow2c1s3L0VY\nCd2RjO/suVS/WCkqmQTcP0Ll8uUdD3nipZf845nrI69RUiU3A75vFiwXI8Iz\nWDdiKMr36RY2kNGjDAqdKq/FvQwb2QGX1Q/OM/G3JT1QflPfUUDoJIG5tYR3\nsw5WrbJMUEt8pe9y9KJchAE+YJVFo7LQo0/KOBgRbQg2S0i0UTut7rBe3Giy\nNcGizBHTYiOOd5xgS6ExUCKNIzwvCkFl5AjCmFDn3suGlBqwIEByVM0FmtdE\nds2D\r\n=8Qnm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHWogip5yJtbuw1atfyeWHn420Fz6uErvwQpn+eU0pl9AiBxdSzQ2JdaIud7S09S9MAmnuhxBJc5dxVVmYNLRKLgBQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2849_1559662861633_0.23143259956564344"},"_hasShrinkwrap":false},"8.0.2851-beta":{"name":"meetup-web-components","version":"8.0.2851-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0428913efb21c7be4f4f077c0338e48d8b1fbd67","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2851-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zW+LGUfQ2AHlaV11NcusgtA83NS+B5BSM30fvuQ3DuCyuNIBr75stdyXZVWag+yYpPEl9NCy9RrNN1aIBoWzoA==","shasum":"5f34a3784d8f5cddd65c5fc91b3790f60244da77","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2851-beta.tgz","fileCount":603,"unpackedSize":3428368,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9/e3CRA9TVsSAnZWagAA7noP/jxOHdn0l6OEduKaDsaN\n0S3QqS0wQ1DGCTLoCltLn0URKSPXgKxCAt+1j5NcpZkYUMkObMkul6inGiuX\nk1bukIF7x8YLmkYvZkynuDaglAB7MhfnXVep5HkWKBhv+f1S1DmJpzZflSyL\nWq2ctsdI+C1Ehhu7eW/CBs7XZkWd6QyrG6t3BwDPi3JgIMVo5EIIGifEy1tZ\nNnIadPIdUXS6siCacVQfiB5s1Hhof5xJCrZ6qu9ZdIAifglguX0JF3pOKL4S\n5tVgkrVZ49CyQooquhM6chL6yp2YIrfXfAETGGgFgOY3wFAqORRKkTcR9Kha\n8AqZVZpTIga/kRLXufy+lon0i6xtM6VrFAFfBg8J+H6//Y16hJ0QStnEFQXM\nfPtTD681EBYeLd1yFGa4FfK9Ja7QGLbBMxSZ7Mjk7sLb2yVzoo1HNM2J4eyV\nkvkninn4NqUa/aJFENC2w31GR8ZsoaoM2cmK/MUzbcpdDeb1mu7TY+s3ZURw\n6E1sfoR+E9TxKXt4qujazrjaGWd9eDGPEeGUCMQqwtzhbhe5eUlyAO/2rmo3\nyNNZlhQOx9gcB1kmrmN7l7cnubXx0kh3uSfOHrDQm2DhNL6VMsPlN33PTigT\nqLrELH7IRjjt0v/l4brfpP6KGwZoKLH9Rf1WqPm1GuTePge/gvWrw90+Vv3q\n2lfK\r\n=yXO1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyR4jbPKJmbKz3y0HffcLezPs39DxlpYmSLXkDI62iHAiEAy6oo4/oVtC006sLQuP6FanXInIV2pNpbkaDgnwWZXfA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2851-beta_1559754678937_0.5878209831519898"},"_hasShrinkwrap":false},"8.0.2852-beta":{"name":"meetup-web-components","version":"8.0.2852-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5dc23cb05bdb5ae77639bb4e132186b9edb63d71","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2852-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-uEjpuYwznCXsDBGHyzSa6EX/OiHIvIhKyt+ZEx4cD2QooSESX7xjD8q27X8K3xXaKcPZ3doDxY9KV+gEpuV0bg==","shasum":"bdcea13b5c0a9074af9fc5b1307e0edfc293c8c8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2852-beta.tgz","fileCount":603,"unpackedSize":3428371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9/hfCRA9TVsSAnZWagAA81wP/RnrZMZF5agfwD/qBTDH\nlcJQ9MCHaaY5jLQ1EbIzxSDm3GNfShVHq74vpS+kLFtVekO5gTrwdXGnUjV2\n7ahsrhqhbVpMpyl1elCugX5RNwQ6rRXy0O7gEfD1sbWTXxKsTNsBoMa1eBJl\n/CdjrHv6bdvWlSWcK/xQ0+EjYoGkhhcR5oOcfMyaK0sNZoc92ec5M2c68jlL\n53JuFRZRgMS14uPGlzNnYL81bs/nnGQBhsHMJShiJ0M+EUUgvDeMLbraIXyP\no9ez2f+BdjUQeNsRnaqHzY9jqMQ+KpYkldXLS4qokW1AX+doeVSp3fnn8pjM\nuHoYt+nEQk3djsL2QwDt15eaye3wnctl+YSkTb364r7kin1M/G3UnJU4LbCg\npwMjbzb8L7o3Aya87vLO6SqwgWLE4u24bvHeeMLlS4V8in2X06g1eWIalJfU\nIb2TSUfQZT1ugUxOFYX0YWIHsIJMoalGpXoamp5BPuzJcODtlRcpOy3wl4wH\np3lm3zo0ae2sD1+VVVPQhweR/9jy4oHkkj7H89kA6ZZXd6MPojCWoMfTMClr\ndb66x60vdYJVuEc/1UmJCcsxI0VXKiufp0yPvBp1gs3u7vB/+UzdA9wYsyqB\n27eGO1laNXBIpwrArACrnB+qeWD7pztn6eoWgaBK2MVNkAxFK9k8JdnQJX04\nwJTf\r\n=KNYH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKn/M4IM6mb6RZSxZDE9pF84xTZfMDMQG31W91edpw1AiEA4Z7d8TD9D823UJPuxlK7an/hJT19iuGsFkvoJ03xAgQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2852-beta_1559754846614_0.8009921299444431"},"_hasShrinkwrap":false},"8.0.2853-beta":{"name":"meetup-web-components","version":"8.0.2853-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"19cba2de98edb7d459ea5ab8ad6f25744e64205f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2853-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-32KewgU1fI88U4ARlGNioJjiI70aCEF1KIXuQsPCmi2/BGcKttwZnYHGwu53U4JfZxFBFD0/4Fa1InBpvYajfQ==","shasum":"d43bc2d8a8b297dfb30d014eca499d53051cdfec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2853-beta.tgz","fileCount":603,"unpackedSize":3428549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+BEnCRA9TVsSAnZWagAAsTwP/As9dPRIDFmfsdPBOKge\n0hP/XUDDvIc9tmd+0CR1RCDTNV7R5i6YDqzyjimkmh4Ghe+bS2IpwKCL3E7y\nvOCEn315DMmwl/Da/IDHR5hd4iYATeo1JEmTq4Zm/lbXRmzMz9FRYhWKZYaI\nOFCIANx/9HCPguqUfSuGd7kVU43mCeQAiN9ehyPjPQKQMuCHhyJZ9SPNy6QK\nRgO42DPtjNgJo5UW/5qpLPKxeEHHsFBeYdKXjq87oMbVGAgPE3XSiyNrDRq/\nSNMaimxbNYTFZuoHxsIDvKyQ8jxAFgad9IkkcniZH1TldowjQ4fiT8+vJAR2\nZ3XXwXtdrQ0zErvtmYAZOg+NRtMYi/BQGpNTkBjnNEjciEt9GiCTFP7ayOh5\ns1CXn8Zfit/eZrAQ9xwkEmH9mMF6qhIlJQSAPzn1nxGGgISkRpkbzyskHt0b\nZBrWuvFjCQ80YQ968rpV9oF53T1UaqlIGf0jIjGJ4eB1A6p44nuocWfWqypd\nPNiCZqFPdlZPLe9pTcR1NLNvNv4WscVvPzlKOCx5c3+OfxKAQmY3fVol62kK\nh+PVuJlsTWhCR3BV++xqTIEOpC24XjG1CQteNv+VGsePrF9x0nHEgWnSflI3\nqvRbsGI1NpAMsgGseQMLWLsi8HNpXIic+l+FS7J3k6JF0xAFuekoHHOMcR8g\n8LuM\r\n=ON2q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnH8bv14/+p2JukE619Pdsa3IYc0Z5DA8EjciLN5HTiQIhAIHFKvyCmNMKq5iehC3lm9AfVNQ+6KhlzmlWtdh9h1FT"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2853-beta_1559761190058_0.2886772755690621"},"_hasShrinkwrap":false},"8.0.2854-beta":{"name":"meetup-web-components","version":"8.0.2854-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fc090e1cb22853e5b56cd6f4c8a11052361c34c7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2854-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-m0/sSl8oLS3zaJAU/lNSfsrEFvo+iKghO5CY+ZCOQA5H5fEjI3lNF+Bhtve9pWjj9+W88qYvfvaCSRF0E26NOQ==","shasum":"bce4b6c4c0d0605b2d3e91cbc8930cad64cf25d1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2854-beta.tgz","fileCount":603,"unpackedSize":3428559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+ByzCRA9TVsSAnZWagAApz4P/0UFyFl9Dw7VhedtBEtr\nr+/0wC1TEFCJo6jami4+aytQhbAzeuw7vzK1DMWZBeQs4KYvLTbjMx4hxfaT\nqQpFiW3IOuZr8HUuZjXRUgY8MRlxJkVUKkgXi60jUHpT1eKZnhAWvwlZ6Emz\nYXRSJSfjAc9ADwiid0lqMHDFzTSa0YYzfYeMe+BwbeWWkLrM6iHuLqtJQISQ\nqfyozhUIciVLaVrSMy+SEbqh8EqJpVomx7m/kwwOirnjfhk+TvwFOLxUkcdb\nPnTU7Hcl1Xjy70LdAiByaJ/hcUB+LpAdJM6EBwCRCBbs2bD8B8hJ71bdCW/4\n2v0hJyY9ZeMJbUv3R5beSGaf+++sU9P+860OfQ1htL7JltDlC7JOgusHU8u2\neK0FAdS2E+0NqFrIPV2l1mI0GL+VySio59mJbDAB0w7oPpABIDNHVAJqO0tR\n1iQ2hYPWMvQjsm/72r1e0QVWtq3Jj8BCkRxXy/EckMX71sKLr+UmDs7nGAJx\nQe8G+suJyduF7JNlXLADWGuWn54CP+v4tswkBm/9/epQMTu7eH7l7jGy32YV\nTd0CCnoXIOdCXTqy/SrQp7kRF0A3PvcyA5tQXR8M0gh7ERF1XhXM4IoHRH3W\nzahA4IP7GOH4dfVidviP0d8VQBGKgb8yKeAxI+/6qErG3Oa4gVreqoeunxZF\n0nMD\r\n=rP4p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6OcpcvNG6oPPVaj7E270kBzNPKJkWy9KyyIBIJKoDyQIgFC2ytspxi2bsIOAnSRtaU5vVEAiPDEwY9B9Dn9KjR8A="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2854-beta_1559764146084_0.4230403677496173"},"_hasShrinkwrap":false},"8.0.2855":{"name":"meetup-web-components","version":"8.0.2855","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d9513055174043f7685dcf2c645085d4d1d5a3ed","_id":"meetup-web-components@8.0.2855","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-aZ8rWv9mvBdk7+C7nFZfyerxFeDv0GS/pcAZe0KkCi3pnuYu6FsflNy2yQqIfKeNqzS+T2fVqIJU7tTRUNgAUQ==","shasum":"8446be1f9e49bb1423cf93d5173b52ed1d13c624","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2855.tgz","fileCount":603,"unpackedSize":3428554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+B+WCRA9TVsSAnZWagAAG5UQAIuwHJPXDPPc17Ozk/qX\nbcRedlKXNtcTkCV1ASBvhe+kAVP55apL7pU+cPedC8NHQN95xBlA5ApydqXu\nXvVUbV2y+grqVpYSxf37VQIvikaEsScFm/98+wkMcis3clb3J/12+UE7PvKz\n5Dg5Vraot9CgRPETELXQPNEizWIQ76bEdimAVxrtfAjGuUwlKxRtc4v9+2bC\nDcmpIOMEFZXbvtuhBjGyNlfz/rX3uValAWw/977jla1UpN1us5oWG/yuyYUd\nZQvAt1MWJTn2hpBswZ6Q21bnBGJtZcRK84i9p549jjeinOWXi6PxVQ0gfMpr\nJTNCMhEFq0sQ/kVm5BP3Omm8vLxfX0v5o5kvVx5A9mxmh9JiVaVcoCXQSJBf\ne2/EihkTfjJ5SLdEfs5E/7ZbBHuz/sij2FT0hR+tgvIaGi4q4o8LcfZsXTxK\nOVjkhFZn+pNbYVWgVq3pK8Xx/sKVwHlk2D8noGpsuZmhP6yafCzZb2MB/RIv\n1O57o4js1K63Inz/Eh+hz5zIdC3XPWaaaMVIyeMiZtE1J5F+yxebUgsOrbA9\nFbF6RFEWAoCX45pe6BOySlgIzXC56/ldtMjF44qlvQbZtJgpM1+J1KKJ/xXo\neWQbaXMU5siF/1YSO4fslPNc9w5h402yeBp50t8VlK5d/+OrVZCk+9P09xgS\nQmUd\r\n=F+26\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyy9Nx5poAs00c5v3Cf5pt9C/9TMG43hDC5bb4KSLHUAIhAItLUaoatr8FJCfMtEWrXfJmZtZBj1XpVg+1SSF92d5k"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2855_1559764885240_0.04434118586685187"},"_hasShrinkwrap":false},"8.0.2857-beta":{"name":"meetup-web-components","version":"8.0.2857-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"34962f4031ad2c9201801a9adf616eb7f4200300","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2857-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jwPkfHY0ymdrZDgUcOGvgeHMIvrkyY39t/2Q/NpyjwM2OTYQ1ZxfaMGI+LSQqVTpw5YiswhPWPIGY1Ju2U0YDQ==","shasum":"0123760b93e142749ab62cfc80c1be8317bb6e11","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2857-beta.tgz","fileCount":603,"unpackedSize":3428687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+SQ6CRA9TVsSAnZWagAAqjAP/0RvEOCNHAe0xikRRUci\neWYnVRa/7DZWFTNYBchsg0I1lLgSJwoC0N92z3KFMlwjjaiVp4+cnRnKFYUn\n/5+I6ox2N8/g/hgTUYawejA6aEQZt+kLojnJJc3Bd61dStvGdzl4EqJOmlrT\nThUKHR0SDJq2TKn/sHvXtsVTHXBiRuyu95voNOBqiBOS7NX+C2loaVip7UoG\njU/TZjoZsYK2RROaR/NtEzvx2qMSMIe8PPMEOYl+GT0BsJ55djYRMMeplmQb\nn5iJCx18c3nnRzOLMyM3iJoNdXBDm42qAcbT3CIMDmsz1jFoLw968qdkNoEy\nidJk7hh1YzEUBZTNlzOTxEVUrIE2CvZ5Ce9a/l23uQhyFohbfQ9JGKYu11oF\n3FgxPc7ZBmn6E58EdoyGfdatC4Hzg1Rvs5vfbIpwqRNB/hkXGOdEU/s5yHle\nt/7A62heSCNiE93OpY+E1LGQy8GtIhETes/FQWVTaMWy8ryK1PZ0+Q5UaR4Z\nubeEDnANmohwkzLvqykz8Pu2rWOCiz8otxbLH029OgzgQb1ad33cBx96DYqs\nn/9tGXpw0nT8WR3t9ydtr5m0FINGvZsfwkb5KY6hE2RuvLXtZupAuozPqYuc\nm+FZ+Gi2AY7AXWiQhqU4z+qCCgr0H8nnifSI27J9G7Ge05JRoMCwE8ITZHlE\nglix\r\n=mq8K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3HgvucDipMjcKhPAwuIG2WvjkTcejgSEovKOD3uGN/AIhAKX7+ngA8qHfpm69jRjt057xyZFPWQBUnRt4nliolPeh"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2857-beta_1559831608975_0.6749826045371186"},"_hasShrinkwrap":false},"8.0.2858-beta":{"name":"meetup-web-components","version":"8.0.2858-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"44390df6865ecedde53df32d0c85fe0912fa9cc6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2858-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-4VN1KCJuNsL+o9e59qy8oL2k29R2Ig6jq9JaknDlxdl5kuVeD3nUjCnWpWWiMS+Si7CPe6X6VTbJNuckdAQwJQ==","shasum":"3bf65fc13823c3fa6cb3e38a923ad77cbd475d9b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2858-beta.tgz","fileCount":603,"unpackedSize":3425805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+UbTCRA9TVsSAnZWagAAJhAP/1NmAd4NftdmIDqTJGXo\ne/5iwOIZN2oCHe/NqWcj9ZJt+lmFPixl9JAGZ4C6vzbZNLnc/PLoLUDKGClT\n+lAm7yEyd7hGD+ZJJVPWya05wAUI2s6vHgIspslLRs4ti/r93twJoUfuIiUO\nVQFXX3kH11ebS0WSplIe/ZSsi2gQ2jAd+GDRbtP6x1ADKCF49bjEaizodJ5u\nrEFgYU0qC9/BMkwO7EDuA2cZt4FZkwVukxGxJWYUCSDTkPimdmOBdZWqbkiv\n/2mvTevqmUGyWoEsCwNOlgVth61uj9K18dFwu5VhEAW2kp0Uztc7l3WdAkzt\nSYW/7rRjC0ABsZ1lxdgsI3rs9Hqt7zQdFCDaa74t3z6wcebR6bgahDiMkXXF\nSsXQi74SQhHbhfbMUdJW6rhPnNOffGq8IEcF30oA7GNVz4NTJ//prTPoAMda\n/6X9QHVDdnBe32zk0EvCW8qU7CZI97cjr+TrMTyURZsxCKhTOEjh0DIyuu7c\nj4HXzpGS4CeaesooVn8EwfcrmRsGi4X09k4hY0gk136eCD2CVSidBGLI61Qh\n93D9K/Auv9h2O/6flqJDMYAYozUgnbTYznRtllU5G0BxndOlB+7Uh94o2LYy\n+EG8QaLrMiSDVpg0xYUZqOVj+X3DfwW0rLsJWfhldL+W5cjZxhNcEbozyR3B\nh3cU\r\n=DsEq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWpVuy7QFCdVJs2oPaU3qCh5JFzBzcDZxhJi0yJRBp7gIgOrjdcFOlpi4ee3kOphBZPt6ygdu57oEU1nw5ofGahz8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2858-beta_1559840466705_0.9410629360772704"},"_hasShrinkwrap":false},"8.0.2859-beta":{"name":"meetup-web-components","version":"8.0.2859-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9964ea0d7795441cc68c4348884fd8cf6b323370","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2859-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-zDtvml1Pm/lXYytoFDWgKhPXvawZjI9tmsXrYLRBMFrA4fCUVtzyQ02DZGFXUCq86S8Kzqa0Qc1iCchujw5Ong==","shasum":"616dabb5a3e89375c036a64f2ed4f1d1b14a4009","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2859-beta.tgz","fileCount":603,"unpackedSize":3429679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+oxsCRA9TVsSAnZWagAAcdsP/RspfCrkwgMgVB0UHDrP\nwZzn5bcUNYBM8TThq85667qOEI4vE96z1oxUzERaeJzro4vbISEDcE6Ko0OT\nKULqjq4MEezbGLMW6XvSnXqvc57SZb8j22grRP0P0gOtgo2s80shne8W4Vu5\nbhbZt7HzFKEnIelB4rNsKKVyJ7KmXYILQ2WtjWe/o4rUM7kw1m7O9+E5UcMf\nNr0BLjT606W2kk6UelK/dtsWffkP1NeyQtqtp9z1QoDe723ChuOiSoMWT1Xp\nrUQQ5iJkPAex9jccafhNlV7vg2Uf8rZWhC1ae8tunal9JWQy2J4EC8c/e6F1\ngfDBA96eBYHSxOL5oT8yoMdDlyy/8roSIIfgDp1tvDZd0bV1TSpoKc26TS5m\nLdaHvcpJOlc7jCdpyAxHZr8XT8KsPH2QIpgQ3ntHkA7vfa26qgPA0OxzAttc\nJw0S3OZY8Fx+IxhT+iPY95Ji+aunXQLC3ujxQAFBa6yLrWy7EURd2NTU+njl\ngLLxrmjArzTLONaYS7s/cRqEwFc7a9t8exXWQ6lVXpvX8tedekgb9Xxuo+QM\n3XgQzJmJqfKR2nM6HqOjI9MKRBzD6TYbJ3D6qLROWRyr+ZWiOxTTYDklU0tj\nR6+MeGeeaJvVgP3gxQqw38PFFnNEFSB/lNGPX/wfdMZFDRoOnVeriqp4XzuH\nLovr\r\n=uR2J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCasqN9d1wHYXB0hFBrWxbnZBLbdbMy1cZjipEvUV6zJAIhAJkYmAerdQMxhToagcG1qbsx/JD2acJlTZh7knlsuyyw"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2859-beta_1559923819633_0.14927923435185164"},"_hasShrinkwrap":false},"8.0.2860":{"name":"meetup-web-components","version":"8.0.2860","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6f2c5c88ecbeea3280f49d7b409d33efed430172","_id":"meetup-web-components@8.0.2860","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-L3Q4U1sBnbDE/xaXwN2KtEv1a+TgB7FPByKvgB+6d4gNQAU4MxKl+lVoTYol6YNUnlrk169rZh3X+2i9gdo3Zg==","shasum":"7bd6b12fa3b9605c0d91e3155f319fcdaeb32326","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2860.tgz","fileCount":603,"unpackedSize":3425800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+r4fCRA9TVsSAnZWagAAI4MQAI/ssAaryA0sulSgFk2h\nT20sqkXEoW+2RAeSNxJYBRw0H+hmGdE4IaeZpEvT+SOJeaDNlbqKMHDiFOb2\nVzKKQ+CMaZf6/Vzo4/dlvm+ZgEf/OfHuLZte/5eLld9ymSG3WWFnvDTW+WDU\nxkyRv/MDA8jQEDGhCzOXlp0Lm41RM3DF83mOjx7A485G+2OoTAEhNcqLtdzj\nIKa8ipSDueTsrfSQhodZ/JJi+7E/gG4bIkujjmX2xVW8PVlcz9HthMNtxgE/\nQyNt9hebAk8h1Bl+DHTqAJkgJISvHXa+FxFPNRuZEczEwx+CQ4p+FJpEAIZL\nqsKiNuOpkWxEMs8Y9A/Wxxv9xxKU1iPnC1A7OKuPb/Brqc5kteCi7zOyuBoK\n2Yi6kQuMCCWXZn9YVMPPYagLqqu/s6/P87BMPwNXqrnHPsbIFnq+LM6yX/Lk\nZChzQViW7pDWrG2kmV8JTfe1Fp+pUU+FnBwen0y8AXVLKAqZphYiBaAoAmPO\ndC2Cp5ChnDPV4N0JfDzp2ubY/V+ZvVA4mNBAG7FMZJU3nJ+/wa/sVwyS0y2u\nHs9jdixAf3GX9lg/IBu7pkLlX412+jJHombryLGvcqtZ20uqtc0uh5JAhB7w\nTwwM+et0e3MK76TceJhHVMaMfzhVm5AgUWDzigihFOWfnrcdaGTTO3Y++Yva\nN1Er\r\n=uEA3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsT1Wy324vRwCiOSU+OszBIM1KtbwYggJdLi6VKsjv2gIgSFDd0lqXnloKf3T/H7IGXuP8/hBXaOMPt9FeZ1SuOpg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2860_1559936543250_0.7681696030689962"},"_hasShrinkwrap":false},"8.0.2861":{"name":"meetup-web-components","version":"8.0.2861","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6f711dda2a08d7339933d254cbb3885ff1d7bb3b","_id":"meetup-web-components@8.0.2861","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-W7UE0eqM4OYR4P5/87MUTKSYM95XZx5CAqfkInSSx+bQ1jtBXfA6hiTJJTm0KIzL/DeE1m8enMbiW3styANMXQ==","shasum":"3333477b88004255d295bead5ab77d21cdd63025","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2861.tgz","fileCount":603,"unpackedSize":3425928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/jpYCRA9TVsSAnZWagAA0FsP/0NbGl083YRp6GfQiAuS\nmf7n9uQ1K2YJHNGC/3jHrUaIRv7no/8CcC7WTi1uwbSCimA6nuyRNln7w8np\nUgYbrET/iAFxlRBdGuMUcT72fRw5FJHi7fpxmHWBkiPSrOB/VpVVhlKGPZZs\nIdjTrgMS0YCAHEhR2Xw46/7FqMv36hbcK41j5fggNgXFyPFx/Nt8LVzvnAc7\n5aaxDRfqi7ZGbx/lXt607Nvv2XmawWOgdPw/F59h6Nj6AVHo5vUMT41XR2rR\nA13ROp/IFqu28awjQknknAcapvTCtN8qSw8lUvKPImMWT+/EcoZBbcIs1Eem\nNfaB2k6yV8zR6mcroDfl9k7SJd9uKz3dHEgjJ5kNNXDRJAmXNczL2XpV29kD\nG7Pi5+qp4Nps4i5BdCzVLLMFJmX+8iTxF0gbNwt4c5vs+dlT4imoZq2Xhtnm\nnebdpAJWav6J+F73V4sAiinAA/qJcd6PpeaSMr58U6POZPEW5GZv7fAZ7beC\n69XsJQl4HzDh17mPZ732RnrnsQynPcamXmPQUcAB6o3SPLVikCSHV+Lb5dNx\n9l5Z15Ll4h8ckrIlw3Y5zECfFJQ1G0UgFl6He5R9zHErrgqWnrRllAkyThl6\n3e3A+GlWFZApc097FA+16gy2cEN/vC5e5IiGx14y+58ZTCJSwoR5DTyr9pN9\nVIdg\r\n=l3qz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQVJHdeoqqHBzTop4N+iLc6qhA20WR/c6g+BwSBHpsKQIgIBZxpx3Nd52EZ72jO1nDF8tSo3o1XVflWwKtwMu8bao="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2861_1560164951145_0.004571065181424361"},"_hasShrinkwrap":false},"8.0.2862":{"name":"meetup-web-components","version":"8.0.2862","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0c1d2aa6f7e0ecc020d9780bd9f2c3ba624e4844","_id":"meetup-web-components@8.0.2862","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-z9pzSGQXU/q8D1XOYahTjoSMxQmVxI81FwdOiCHKeBtBYT8PhhQpK5wgZyQrjQwWcl1M1RhfdHjLkiNpTcDpwQ==","shasum":"4bb4e9afa7f5583519c3936686263f867d26af7b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2862.tgz","fileCount":603,"unpackedSize":3427048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/m2ECRA9TVsSAnZWagAAwr0QAIj/IbECwmwpqV0wnvGo\nSgnWSjG7r/svN0o45GvBg3n1bND+zkAuak1tH5/R4M/YXW0NSp5lSOqsXE5u\nzR6l9SjelL2vxjWUhFBkXmm1NMZR2t5MIwaxrDogn7yZxbRg/4WRlGVjTLZv\nwnMhS8eXLKrJz+/Rd0E5WygWpj2u/O+N0+kLe+JFwJZ1HqGrW7aEtOTHuJ8L\nFECTjLT/JgQsN+V/kZAtOxbFDX4ipMcu1QcVEz7RuX7CxrkkSG0teIutAboh\nYPGHP6gPlr65yc+2ZhG8KCvHMfuWyrd+phl7JVfB2rppN9Yp4VezRJXNKFXR\nG5/CB1/p5jQ3S4ATeUapqu0HOxGMRXJio91SeZFvT5SkccbAFN+r3eXQx1/l\nCGHUIMNgvCo4l3XsT27IbIpP+2tURcSew1Qvrc95Bxcy8mGZWV7+gDrKcflW\nXPuab+Hk+T2vOzUXMhHAVNR7ZgDKo/TsGzo+6fPMg4WrLN1Tppb+0ZA85h45\n4e2bfq4rfQJG/wRAxVo5PmcfxX/h7cQ1PcCwDegk5+hqBKpQWDwwtiX8RAnJ\ntP8BuXHVUBit4JnihP9peSvkFg1eJBEgcwML6uGSP5ESCfbzqNAmkmgpv+lJ\naxdIPEMtqRKfePbH/ARdPRxUEEmN5Kf2Ec95NqClBPFiAA/WXBP7jv6CW7kW\nL+ng\r\n=phtU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLWsOdu7pkjKQIIA5TcC/jlQ85KlEOhm6MQU9+1Z5BVAIhANEL9s3aeHgPXQ1YjEK/s1RNmPQ0dVXu7H94/T+I3zSk"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2862_1560178051384_0.9762754639889628"},"_hasShrinkwrap":false},"8.0.2863-beta":{"name":"meetup-web-components","version":"8.0.2863-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fb69326e3d9fa55e6830724db90f271ad08ec1a6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2863-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rxUIr4Ypeg/P5ykWjMfMWDVW4TcFE76fp8GUVY/lSjs8e3xRFHHP4agqdmr7agjLkSIP6W4bN6qYb/QU7f3oow==","shasum":"e79249ace7ee7d7f33184b889b41d492da12316b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2863-beta.tgz","fileCount":603,"unpackedSize":3427140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/uaaCRA9TVsSAnZWagAA1lMP/Rt2R2pxcAWYu19R71Py\nOnNBn8KGb7XzQFPZAdYidoBXFweGiLZzE1bs5oU7POrYPx/ud2HHPeL5vEAv\nALGjnun/wwRWtiL772Vp0IXbNCOotqMZ0pyqX5pttRiXYCAqfaSJ+CbA0DOJ\nT3R6C9qdTeWuDrLwIPU+1tsxjdyLOwxy38C98h9ilwgAZvPHfE9vpaTnu0fm\n92YvAfckSP/QJKBA9UX333a/29SVhhi9boYHjxBdjbXJkF4CR/7l24tuFRcR\nha/g+24Gxn/KSttRL2Bm8YyjHunQ4ZuLTHAi501iud8Ui6CQPWhHQApfMd6g\nz38Iy7RaElHrlNjtMARpeCa5gLVOyyOweHXlzXHqo8uHhULtnoQIwMpjR5u4\nLLqJhSPY7B35D4O1Ms3XZs5/KdDjOPsMR9R+NCyiJxfSkSF354R30RCRvJ7g\nWhEqPR+QZnerY7KuWrIi3RkKV6TAk6hpDyxauzqH2b6DxDe++ye6zcmVWkUJ\nr8QnNMF7EerQCe27RgTSbA/PsCEUa88UnB+vUFsDMmb4ECGnLOysZxVGLWKG\n7zt8sYUVJ6YJ79pAFZFaB3uVTF/eBfnM6rtUjh9wuikWh4G2xvELl3VmCkHK\nuNB61yTAQ+MwS3F3VmRypjj4QpfGzgXAQaffG8teaTWEhl8AoXCEeB4CopQS\nQasp\r\n=PDgV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEW6P7k7E9KhC6cHdcWAGyy2/XWL/NRNvEHtYfaSp9r2AiEAvuqu/m7W4eUL082FtrvsoxCa562MN/mOIobFFTX0KYE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2863-beta_1560209048280_0.3417858738780355"},"_hasShrinkwrap":false},"8.0.2864-beta":{"name":"meetup-web-components","version":"8.0.2864-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"99cbc27855a60f57d96e3f6f582a5c49cdf4f7f7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2864-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IQVOcPtcewHguyJvjhtXIEjJT8sxSylbSo+4GatOq/13ahXBLos4DmupWr4iMmSJKnI90tzUMrj1aDBxiZZnzA==","shasum":"23b8772cc11c46d0db2cf4579ef22a5ab3c5c7f4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2864-beta.tgz","fileCount":603,"unpackedSize":3426637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/5GaCRA9TVsSAnZWagAAGncQAI75iUvb6fjwipBUBEb4\n8GgQpjgLXmdp9hskBUMCUl3M41FTfvDHMzjTLqbepMdgAJgw3gWvaR3hsFvj\nA09diMrL1aanOvULQWmylD3UCmC9vgeDbEbChPw5WQmEK7Lz5Bz2uYDIANS2\n01vK5aQO4x5mWNkJmbIxm1DsHnXYOqoHnsrmxKIVU2Dbe0PTXa9xHW8Lhnyb\nz8YmtOx6GqCYf9xRFy79uYPXdbTth94RjSEnugqxE5Y/UtpZRfKBA9fC+QEl\ntkJMmuuH2nShWS0Cc91Lw4kvb1TlsxWbGXnCncvEwPuG4lZJjI0Sz9nZFrSr\nKAEu/gKlvfXSY3ESmoy0FYf/z4ceJGc17ThU0VzZ+CdTN5NQL3MfEeZTjoZb\nnkh66dUxA+phLOqpyxpLfleXHemHdFTRQMT8wZJI3Yyp+QFfSoNTzlfTkDpA\n/+Lrw53E3PZkbnbav2n9jlfOtGJcet4NL+pgVEESX065vkLNWiYKrZW3rj+8\nTe5mQZ3GH3rJ9pkfRI7qrji9Oxj0Qw3aN5hjAthJHdZF06X7DyAfePE8kxlw\nOtqoYnksQPTsXLw7woBaf9yFXOO9PoXBTuK8uP6NEQZXUlBw4ALvISpZy316\nIHkCAAfJ2XMemaicozj1yGZ314Q04lOtWc7GC70L9ExRZwT00Kovyu2e8otJ\nB/LG\r\n=a0tS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0IP7HrNXnYzZeL5wR6u+yc9QIcK+kUeuHMu9imCUaYAIhAPSJySxEaOt7NG95LWzxl7Y5tTDpvaC/JAb73Jv3i/fk"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2864-beta_1560252825975_0.639544778580017"},"_hasShrinkwrap":false},"8.0.2865":{"name":"meetup-web-components","version":"8.0.2865","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ce54de1c9838e434432e9d6030ad93ae76276e89","_id":"meetup-web-components@8.0.2865","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-GiU+n7TUnhwgL8T1N8cH2nnkhamxXZrGf17x2Xm9a9fZxpGYGkBS+Su+7DpPzbgwMQOMqsLRZnNBrU0tJlZeWQ==","shasum":"0fdb48147aa9cde82311f1a04a47873fec4d0b21","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2865.tgz","fileCount":603,"unpackedSize":3427135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/7QECRA9TVsSAnZWagAA1hQP/3Jn9lgoEIoavj0W03gG\nw2O/iiiAcYId6S1L41GfFqMk0hBMrRuVDfXqQcEA9a5B4a9S6hQdsljkLANY\n9ufqxgVY4nQatl5Ntd3XWgtsACChf83O7WiwuJtz9f18MZH0w0uMKypd90OE\nB8uAcVYo8dbd1a5rJ9M9sVrb4H+rcovXnzQuUgUHLkqRwAGSZrTM37ctuLzA\njwFmKxeSIRy7JsjokwhMdV9VfqURoV83KCsb5BcgQ+VjcGs6u6tWCRp8Lm/v\nYTCIisHqynxaNhu0AvF80UGlajQCUZONmk7GjCwAL/XYZ5HCg/Cea9987cF5\n8LrEo9DNm/lDtjLO9OqxwrxTn4/c6MRucjBrFNiRBCCMg2oHiqVD0b9djSK2\nCO0rq/AlZMj/Q/Og0oPUKP6vzmlR0EqmQsX0Bawmf1GL1rfkpXRVnUTH5K2q\niTMLfva7Q/nB2TD+2iJa3oS0UBlvos15iokJ0lYAD/tr7BJZSUDRgu7yW8D/\nurhanTTq/34eUkri3LRuUe0GnGJuVyAv4hXZnsy+VLU16ipJZX1gryjSSy9E\nc6QFTbno6WeGtRSDO3q9aMCGuKFabPuwg+vF3k2yE51ZmvOLUQGJ9e+2dvwC\nPTddHqyg+VIJ8HQ5AhPdvXtSrq7XSB7Csr8H1l4eFBqL7AhL0JmUbNkR5sHj\nTNP+\r\n=LmOi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBdVVLmfTcPs/RkJxA4jOKK9HnQEnYd+nqwgOcPVZngVAiB+BYBudAnyDR5zB94aLyLMV6FLYfe8wrrU1QcQ8KJ1kw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2865_1560261635510_0.2274429739941599"},"_hasShrinkwrap":false},"8.0.2866-beta":{"name":"meetup-web-components","version":"8.0.2866-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"dc13e119f496980419868055eb74504c322efcfd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2866-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-u1auOQkCpuAryQN7GuWifVPQ7uf2g1oFwrLFOn7NULbHboDJuSG9DH5Yez3jBNU2vLyqhMmc6JZh3KnQKVCxwg==","shasum":"d8f0d91398dbfb93635d1bc3e826d150d9134345","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2866-beta.tgz","fileCount":603,"unpackedSize":3426815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAMisCRA9TVsSAnZWagAAHgIP/j8xTwA17hkdhkmo90ok\nZ2veYt6WxtRTngotK5rQI3AgijsAjvvHWTAQSbIgBXCoe89gm6vTa3NwdZiF\nL8V/L79VFafEY5MshybEp7JlDxciyTMaSuW4rCIPi0dZnUQ8/FBBwfCTvnwe\neh7JCodaGZMZRqeu5/ikulsNBSzUhbA1KlHlBGL1A2HLD+Ww9PQoRg5ELY8m\n3O9rVhgC3RLlxtZcywPybAeavOOPXDUVnm1ESZjXXgbpcCMvG2smaZuxWavj\nBgLYsCssT7WidP1J+pnMWwYO7I4gbdlv9wXVuwrlmrZg7ALyBPLy74gacfOi\nzzlh0IcRQNElDt/eprhZDhx87EKxKiZApIHX8H7ZldhHwsnPmA2RsNrFXYS2\na/RVEoO5FM844UIUBDc4JVOWop18EkPGaKAl4LcP3EWa1tDSFZH5RC276gLy\nsn7zmQChCI/nOjA23tx1Jp2oQ1ruseS2btUFxsaEkWjMc+6NrpNoRGfkardx\ngx7QSxFxQYLaO6svlXnLaV+f2bQ57BeqkBmAukj3YfToYOC0KUWdTxWspmtO\nnLlmxMxYmsQphC6ab+PzOmNWChkBstMhGIHwm46Pe3KvryWf3nicjN+e89SX\nYzpzz9NX92EYtP5l+7wFL2yhaK/+G5KsxL68g9lgQpKuDMmpCZTRX31CrNuZ\nOofa\r\n=1OsQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlnLMSWzjvk6Zrz9BukOOEzyUmhdKl+XZJa1zaT5ngLwIgcHEVe5gxaq/0VB4hK3HLMkXVBTt8+EQf//y6N0XPCdI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2866-beta_1560332459811_0.6257939298051121"},"_hasShrinkwrap":false},"8.0.2867-beta":{"name":"meetup-web-components","version":"8.0.2867-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"707694ef3aa9be34ebac7df4d24c3ac9bcedeba4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2867-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-fM6QmQ6tUi1rl/JXZ/DPBjlM7XGTDRNm+96bj+sTAmChwFnHD9nw56fui2erGTbsEoJVCSosIi+cMMWaJ010MA==","shasum":"0049733a5dce6bbf124a28005234a9e05cf0deb9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2867-beta.tgz","fileCount":603,"unpackedSize":3427549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAPPECRA9TVsSAnZWagAAlK4QAJ5z+ZOPutM/EHS9Z3P5\nfvjUNtw2UmhnBM7ivvWZX/GaVvK50BurQUvt6F3L5iDjBsD3hYZfBr6aKS5R\nWCFuH9+pieyenruXYGgHD8hWIXXLYDjrF2GNhQ5sn/QgW7AnTNe1i27y0Ybx\nFicrL3Nf6mF+L++0gfdC8HALFZ32bCYqk0XW/4sJg6nkiSRM2kjpaA8Jmn+B\n7OiKA3OicuOF3QjXwbFH5C2WjaDPtpd0OQUwayEGR0WOS21hSPPxV+jgxfjA\nnQMqJERQoOYKcuysEHplNes1IJ3wT0DvgiB88A6Lg9l+ypL8gXbbMDZ/Xs+Z\ntsZcCsogISrwFRfj4sEX9HBQGXecMbRweioyTS3OdeHcp8fglgK96GObR/+k\nctFF991TcSBqQXjNMDA5XbxGch3q8mC33CfHhpMGGgShmAptsYVq/SsXBtKL\ncmWKynbn1Yikd3wASuXjI38k6Ull7Vtw5Xi0G5kXTsYEtvRvXi4AvgOZHcIB\n/o2zQ1JMjP8BgTx3oIpIg0QhCS59rFfk8l4ELvpjkscUFimdeZqv7bHREMSg\naD1ZLJuCu23kAGBw5KwwuuwQe23jdau7jYJ0ZWMjQnCXaqInrunAgPQFhYXX\nNSslVntDoZSXWksUojdezCfJio13OHz0icZPrivEqontMoKezILvvIuweqi1\nz3TF\r\n=XN5e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyhfOy8Q1YPeO8Zokk9P6yuUPwxOA99D346YZ+IZcfcQIhAMm5paR6RTxViwCbQJSW2QrZn8FSBY7a61jHvDEHJMnl"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2867-beta_1560343490861_0.3677109983329945"},"_hasShrinkwrap":false},"8.0.2868-beta":{"name":"meetup-web-components","version":"8.0.2868-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"54e00230ba9b2c7d3df35eebf6ddc4efe53f6416","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2868-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-d+tvXtoD/T2fGtLGPZTyZvw5tQkf9vyp4h38057RSx9fVgTkomZ7hIZmcE9bF0ViPqWiVSWGr0v8rW2XqYgKGQ==","shasum":"b3c1743dc8fe00a1cd4f782f63a2f979bacd514a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2868-beta.tgz","fileCount":603,"unpackedSize":3427621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAPiLCRA9TVsSAnZWagAA5GUP/2D8PKacbSbtdd3xU+wA\nn/yjEuhxsJxDno5bzCk/SNxuNW05jpvO0pg5LLaJLzQBXTSo8CzXeQT3fOIz\nZ2G/NAX5VuECDCIIZNwdMAq+XMSt2KpIQCOAPBjkgJtH+XfW/py339A2wtNI\nMRmpAyOwkKaKuhztAAWQqeIpOqvoDrNmNYs/ac0VS30PBfR+8hSG0gYZ8vbk\n43AJTSPMQWg38NUnSYeA/sCsXYAYZRckjWNSquWW8Oyb3nH2D8pg0UasZzHc\nzez/IMl4Tyy3AiqFY3qDTDANVrsmjOjwYniFhUjOIvQ6bKADwDzxUPCnyyyX\nETzoBeyxarjK8OOFb6H95MeWK+cA/dQNLBQYt2g6m7gQjjki3bsSGiB9cquw\nw+pDOXmgXVZjm33aF3QvRxKHbm6ZMw/Z0A+774v29w/L9EQtZ0OjpCvToqbG\nYArL2vUPdY5dRCf8PHkx6oyO0GCoToxG+piCCMk4BHz5tRNoW5P3d40qQwZU\n6kaN464NS+y/zxAv1u3/b3M4U81vKq44qoMt7M1EfWrffUhUEa+PwwwPY8wE\neJ1RykIjQbOFPCxrI3rgUDKiIUyuSDHHuYm51pH3/GvTMwVKL7qXit5qVPp5\n7/dXEsLsWpTA0Hg5zQdK10gDzyfcHFi8nJuDwKljg1mxycSChdFQyF4P0Uqw\nVeZm\r\n=LyBB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH33/05a6Mvny2BxRdAtK6xGflWqd2bupXKRLx3dygcAAiBDJ30yEAYzPYZwSUT81E6+c483z3X64a9gd5aAxinOsA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2868-beta_1560344714515_0.21620379520827782"},"_hasShrinkwrap":false},"8.0.2869-beta":{"name":"meetup-web-components","version":"8.0.2869-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ff0d0ad71dfa2ca57a9a072e9a194cd6281742cf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2869-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Wrj0hvhOsHEv9rcs7b54janEkzPL06sWsugUguMiH6BS7/msSbVlq2uY6VZt1pU0wsDitS+KFlTL2j12XwXwgg==","shasum":"f4366308af6601defbacdcfbb3f4bebd92483b61","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2869-beta.tgz","fileCount":603,"unpackedSize":3427663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAPvnCRA9TVsSAnZWagAA8xEP/3IBtZvBAHAcRbXIlE+J\nleC0i8qV2rBVwFVTS1rzjRewXz9AHL0UsDkHp3VUchSKcadpKI7F3mftwSWV\n+6VtUN8cS1tcuYXHreo/GrGEG1zGOPMhrLHAvYRdIFyeJHfIre46Dcl88bHy\nNaYYL9lIG8cNpS2IcZMgx/S7GafGHoIv550krsRKj/G3YUE8vuYZSHpIyxo+\n9eXnd4bPmTpCsmdjfqAriDd717P+cuwda8wQHhTWe6OKvltL9gNlRBTCGGOd\nlLDOtJHgFtgxeVaNhIyXxf/z5GfxkUDLvu6cEanH8OXutAD714mgO7BIG6Kn\nZWgwXGcpCyjqXBZR1M+XwtQCD7rbPHLVdloEq+59OSmG11F/mbD1Zw8MauJ2\nqXE3tE15JM0xxYumUpKJuYWIA7U4EuEfalrF9tqthVL5J5Fa8zsNtw5r3n98\nmmLLYDDAdzxfbM5S3nom9kaCOamqglNgW6Ld4XrTIXylABbfSmL9+IkG1q70\ntvSN5TKaBaRur4/lSnwPQbuSBR1tYHqHvxCv3SjY0ksbh9glLzgp9Xvasdgo\nFCRf6hitl9u0Cit+ZY5hTKxJvHE9oTUOxSDNm+FwEhFCOBe+DfBj6PVZdcG3\nWCDVqx2IMVeQK1JSifNXmbom0sZiz84Y5UiREBLH0Mh19iSIW83lCuHKUIxa\nhsnh\r\n=dSPj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCc8FvrzW0XKG9I9yFrS6k6HGPKYwG8bFBifDLv/ieM6wIhAKdGPF6tyqHpIHpLFvPcnR4JuBIy+FA3h1a9YPfJip/w"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2869-beta_1560345574794_0.8990004236682647"},"_hasShrinkwrap":false},"8.0.2870":{"name":"meetup-web-components","version":"8.0.2870","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e282eac96232f34c8c729f2296ded6a922a6eb83","_id":"meetup-web-components@8.0.2870","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Qr4Mf1/hzSRl7+BjOuD55/k2nEo5S9JWzBb2s4kJ9VNI4AyykdNu0XbUvs5axN4BP3atHd/M3ZdZaZd3gGu7Ug==","shasum":"276627d1f5b146717e28cadf79ffe4c6d370898c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2870.tgz","fileCount":603,"unpackedSize":3427658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAQ1fCRA9TVsSAnZWagAAEg8QAJ7osmkNh4E+WxOLDwew\nKzqbSI4U29Y4+8LTCZkvZwAyeri2F+mkuUgY3MAc7Do8ajZi999enNNjb8Yb\n1Bn5j/iGSd2TmkSFRbds0YlKLXeNSAxQ511FhnLXX1FbAijLLMradJ5spN1d\ngqr6vCFP4G4dS+VRkPFgZqHAlDNOrke4ZMhLI0Jm7OddGSCUEodqD0JeBqXy\nq6qemfYqIQJ4ejeIuFuI0qHqE8XJ+Y20KE1YY8uZzu5IpXS6epZEs6xBOzCq\nNd7dDpFlkccWTnP2X1S6JFUPmZJoJea8qHtZjYD4wceh23QJqHlIM40A8lUA\nsMSYHFWjG75agzr2vswXWBhr5V/hSGKLli2kyEVq/dvfF3DDVSa9g2eqk+DS\nfc/SaTPLDGyBsGfbR5lJkswLsgcmMo7NCQJZkyTHqrZgFboDt18El9I5lnjn\nEQH6FhzkXJJB+LierpbU+BAsRaQdgSJMvfNZK1JvNEMAiH36xuQP1Squm8vu\nQhJAj+YUek7ZrVzHiQCDXyez98jMfUV1WQbI9aJzshwQJZTlZAxSVsdSPUPH\nDjTUZFZFt2WQJRCXxrS6UTl3dML0fxm6pV0Plm2kzqDJBSaufYlISPSbLdJF\nQTbX+3UCgIKL7CB/bE180KcVMnrxWsOjYYh91ctqEx5odfz6+3ZDXNp+IEWS\nYQhL\r\n=CPg+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF4EKyGB8EHGHinWDeRhzhGSRH/xTHn6oasWO1dGc3TKAiEAqKEpivN4JpWtMrcywpsfXHIX/ZzLdLF68sWnwcw5exE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2870_1560350046643_0.017719644988111183"},"_hasShrinkwrap":false},"8.0.2871-beta":{"name":"meetup-web-components","version":"8.0.2871-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"91cd78ce505bce9d742432d393540e565c5007bd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2871-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-hfhVzf5+Xj12cBuzOSxo/E0NRzlNWufbD1nU/Nsn+JMVGnGm02nipulFdXVj5GqOFKT13w454y3al/a6I5OJrw==","shasum":"8a703e1c1918f0b0dd35bab37628f5da837e31df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2871-beta.tgz","fileCount":603,"unpackedSize":3427161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAVgXCRA9TVsSAnZWagAAoDoP/1eATpvmexG8MgkBqmTh\n4iX+7kmRIHrbdtxS+0IeQoNj3cWx/R7fVRkJE51wD+4JgphNAWux7xo10sSA\nkG5Pz6sWvKAj/kMsZJEy40hltv1kOjdEOMLtxX7Wlt9y3IPnn1jo2XF+uj0p\n4TTEwFT0MvldUUxrp2+82gttybvGNGTMrqctPi/9+IGq8GewQt8YY7TDy9tA\npA8EDG4o7r+3wMASzHlrhr3kif9ImzwUQw91nZU1x2UxehVLIyDrkiis/Le3\npE6L/NnjWKovVioTKg+yagRZ+4uuP9OwCuw1lHocMdQ/IfNS6EUOQdetMoMi\n+emTtgdGnhA6G07OaZWeaVb0CxfqxqlKkepZb0JjDxpzdULC2O5iS0OVDwXP\nsnF6NsKjvY2z4b+F4bcVmFvQ+6TYH74EY3vlVWhMn/SZ/WkKvBCeULD5lUps\nEv0Jr0w4ltdCMY+/PdrL/hPah0O0uNSmSZJ9i8Ip0mo0To/ymiTJlqacWUxz\nyqXovxK7V6wbpcF2XmnK+XEFR5i3/+cY6ndgS7MCogVnu0xFDP5irG+vFTcT\nmgf59/1EehCKKnrMTtCFLNxdTW7pXIpRfBtIvlJZ6DAEnl2QXjJDfdDwpjWM\nR/rxjmYKx0JCBW0lnDmsXetXOa7isE6n6bbDFvBm45AXvKuqqq5d4EFUADui\nvw0p\r\n=hKU5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDTyh6AQL8auHkalm10EzPnPBzFw1IHIqmOJqZKY5wkKAiEAqbHVkkq+3ov64Cfev+Y1T+s/fBLHRWvtp6qjydlpf2U="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2871-beta_1560369174956_0.0314426990458434"},"_hasShrinkwrap":false},"8.0.2872":{"name":"meetup-web-components","version":"8.0.2872","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4d21434bc2bd0e096d38b1e9f33caa67419fbd1a","_id":"meetup-web-components@8.0.2872","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-eIuSoLESgeLZH1dAyFBdjABZcWBW0Dcez6aTf1UPveKFgPZJQDpeCMHu6RgwGx3zNzkYP5QqSjSoQrbacm+g6w==","shasum":"cb966e4aacd0053f92a804d3ee01d43acd863533","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2872.tgz","fileCount":603,"unpackedSize":3427156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAVmXCRA9TVsSAnZWagAAtBYP/3JJ0PjqHbKVAdAiX1Pe\nvuph987Fo9lJFGcFgOxC5K8Srd9mvlaP0js7Ak35G4he3yJJ5i6+PXnT5XU0\ndO/gJtqr0OiaXFJ0NYJwOsNVfpqepdOjrmpR39LGsANvgjFYFNtuMlRMsXqm\n2jvIqy2HwxRuDsciJ5s1x0gnrpcTuMq0UIyPnxU7D5abl6MpRSPqRktbFXIw\nAHWahRtVWfQ3KDx69yy6ba2uNcOD5IIREU+YcxKdPanuo9hSAUtaafBWPfn5\nAGb2hIDu3HIAMvs0GNgJQr895Dki3HW9RRWWBr+MGX6Xoanc6WMzEzKvftID\nnIr++W6coH4VpZOvUiv4So7tHySrD87lZ7ASf2+hsozXhBWPuXShdsxJhTn8\nUkKKsQMwddJamf1/zANWa6OOvAuNDy5rUdya0BVVzQXnuKj/RtLA/F9VFATQ\nNg8xCi0trA8kbs9azU9WLVIRpZg9TWPUIoXOjr0yrRoUhYXPKT9e62iCSEar\nwToNoI4KNhaW6+7a9ZDnbaqPCSKk4sOJWP8wxlP5gPN2eQ0AwpEHS0jp7Gx+\ns9ckcdWh1fjRGO5+1Cy6FtyWP9ND+tGrxwxSTkGqkjz7oKKE0Elc+h9payc0\nNq5k5b2qJiH69/X27IL+Z+yt+AOeC6yIuVdbx2kv1Y1iKd7uwcOPQZn2lC7C\ncIJ0\r\n=FtOj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjayDbmFpdtSTcn/AGcH2NizVArkUSXDTmMtMYHcl5WAiBlKtk7x+Z4dTBeDpeHgLdc9RGE1dX0WFk30MSgxoIoPQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2872_1560369558526_0.4238780828303914"},"_hasShrinkwrap":false},"8.0.2873-beta":{"name":"meetup-web-components","version":"8.0.2873-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1ec991dd027efe311c38cc2777dad6acc2adfd78","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2873-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-3YI5FmSumsgFfP5sIirQumTBAUopTb5Ssk8JRUI59iJRCeZg+UqrEbiCv61QVlxWBCkP3FHbiSoWLlZVeen4hQ==","shasum":"1d7749bc725970f4e856137268e4c3bf7a2c82f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2873-beta.tgz","fileCount":603,"unpackedSize":3427164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAWn4CRA9TVsSAnZWagAAPc8P/iB512MYDI4easjeux51\np1jtsczRMqRPd446oJaKI/rrAdP48yhexe6R54JngDotL348Fqx7gt5d6W9M\nop5bgmcwKpVCWB42/mdYA521+3T5bugxNfqrrktBUBrBl09IFGs2r9Yakvq8\nACtqlfjLIGhzDPpIEvGqC1yb90gTYwtpz6taC+y7VKb3wMhLljihHjGb8LVP\nfVMEZArhsdYaLSiPTjJtETVDdR1F5SLQpS0ukqbYxxSyp++8bqEmC8jTx0a4\ngQccoxyoVYUNDNVc+EflcoATPQUeTWJ1Sa6If+Sy1Y69iemkUzPEaWcjgGBc\nkkFQmJzJIjGO85FRLWeuWTSrlF79JwKctvI4oggEEqn6ui7AxhbFf3dqTN2i\n01WyxEymJKVFCKuzAWO247BaYmW0dqEbY7gMqNO7+ISGKwKc33AhhNwOy+KB\nIkgAWHT/DzycSUGIAVbtrkbgI/Y15AkzcUQte+YI6JhctXb8ssKMVEnUChiu\nva7W2EHfiyC6lQ4BfglHnvH9PcKIdyJnmpdV9Os57Yal40CB5ZXpJkj9NlGe\nSNdh8/nGUxeNKxj6lgch3jczHcpCX3VBDlo3+/s66qrUY3nDeWS+gQ1ZTOBy\nQ+X/zi8wbOttg48VT40PhMlbfxCFp2eeeUDrFnx75F/9Od6p/dwUrlMg5FuY\nFB/8\r\n=cUdn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrtG7KCg9l0MEDTXvxT42yXdaZ1h1Pj+gJ/c76ZQym/gIgBOO5sfc+wlQGzFnrz5yWhy2mCWhMpypIkEKhxvr2nhU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2873-beta_1560373751768_0.061213706283111735"},"_hasShrinkwrap":false},"8.0.2874":{"name":"meetup-web-components","version":"8.0.2874","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.12","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"592e584395d385771ae599a79674033e5ba58dac","_id":"meetup-web-components@8.0.2874","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-nxvVk55Qm7dNGYLFYnCPGjb7faYCd/TPj5WXkZhWJTo73v9C7pqZGX2aiy8Dp6bErZ1Frqg+vEiu+iDQr7W5yQ==","shasum":"e2e985a233c0804681464ee4beb34af2b9735398","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2874.tgz","fileCount":603,"unpackedSize":3427159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAnM7CRA9TVsSAnZWagAAwtYQAJ64KjazvUVptOcn7/n9\niMpd3b3qd0LINsEcVQIGhjVTeO5zKeoqDTN6nWU5p6WqZhDEKhAyc78yMWpG\n0AeI1guooIvwStPBhJG+w4+SuAjwj6JAMvKzyGBxDvCCNTkjh0EJhUczh+55\nmKVkmtOkhWhuImO1njle44oJGGltDJWY31cpdrz2ydhmThGyZxvFkOKDYxIV\nkHY/mfdDT+piaPix6XFxt61tdAHseWbHVd0BbazDOGpMTOwAebNtbCaZJGZP\n/iNq82xHE6pK2uZKGDQGKVIinDv6pKEGomb7m3Dgh+puu/TzlHKPaWjmRWEg\n9arhbfJLLk3Ced7bBHJWXRfPWXPw/G8jKnu0oRcPCdtqwuLDz7yTXjWPw1xw\nTIW1NZj9jMaQW54YT/0X9Pcogu+ed7fKd8xsEVFV2BLEOox3eQval6/lB2TH\noCld22td3pgA1Tfpm3AkLDlRH4wcLsQDpnLqQ5lHYFcX6vmMDqr9UjuQDld9\nqgaVMgEBGRQlh0o3xE/wzrMzeuhQ2npduQxRx5HS0MbvZZRSzipl78fXv0tR\nAo2Die3d8LTNYWHIXIOtaPeVaBlSBWc4Vn+6RfonOtdCzAR+FvTasffEWpoB\nJlBJvAT4lpisAJ/rS7s6R8KmFQbhfPmxjYhm/V7Ew7VGnCu/uz2eDa5CQy/P\nTdNh\r\n=i40V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1Wa1skg54ISSpEhlOivxsN+TNeg/urP46UnyZ7I1BdQIgbRkN0N9PhpcxzOhTEcOuVeL0khvGr1wss6F+EupCzfQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2874_1560441658635_0.4832382707842393"},"_hasShrinkwrap":false},"8.0.2875-beta":{"name":"meetup-web-components","version":"8.0.2875-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"741fd09dab57ba4b4c2ad77fc7a869c816d38433","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2875-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-5x0lKyKWMZRRp+srTJUfJMj5N0v0otnEZw4T0Sw97Zqddxey7B0t5NczQVODSfoaD8WFlbp5hOiknd/VcAsj8Q==","shasum":"677a7dc4f0b757b82f1aea350bfcfa4d6cb42b8b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2875-beta.tgz","fileCount":603,"unpackedSize":3427460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdBA/dCRA9TVsSAnZWagAAZxYP/AnjcnHkhR5pnjdutZNi\n0NmtnJOjC6gblq/+lFSYLuQ8kHVPdJfrpLOuqQHYCZotFt0NAJ6o1b5zqGEC\nfFVPwtYquoy/hGPkm5YTIrCghy2FXT3H4tZF6ayOZmcnIB3RwwJETokFhRPR\n4/DR8tzxKPn9yvwKv1iUq7nkDSyOkj/mqCNP9qs/peDKfFb/NexJvizPayxO\nv7Ci1gAINMlnwwn08mnaQSP+Ody6OtavDeCFxkXKHNDR+W8HzJ4IwacYQyOC\nj2dOjzFGthlZf4m/yh78LVPW63w8Llu2l99Sb5+lqyMokFaJM4VgWURf51Bc\nkPnow4gN5VtFounoqluQ1FZDSJbRH72Kk3vUZmKltEgOi/Ykl+Jp6l7ai4XX\nMaNJNuoK8vZGqu3UwyTbYbV9DN2+Su0JBaMsMbe06T4TPXr72/jxfzXpLFXC\n2YeMJ+12qHkTJy+ptjAqouYrxT0EelYg3MNdKuWvQqiuSW9TMNK/WlIgVnp/\n27z71qwE5KDlgKZ96M0aJGmtx0X2IeFkKgvde3kjhfE/s8GnuIHAjPYQCoQx\n/3hDDmkeBw1XvlZcP9YlziAPvhYT+RAmTQF+MPpawRmOloPv9Mn3Av8pESX5\nfD0yqsxhseubHwfoZ7nbKi4U7idFCqtYyggXl9UOAkVfiM2dFZpqVTebZdYV\nfu/E\r\n=xxbS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTk3WqljEYm3MkznxUvVR8RbtgJ/ugc9vHfcSVlRhk9wIgCa3YGEqJCDcdA1sxQBM2gp1xSiP7CPzbJssIwHwIKiM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2875-beta_1560547292892_0.6631452795837856"},"_hasShrinkwrap":false},"8.0.2876":{"name":"meetup-web-components","version":"8.0.2876","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"74f9145e139617984075fca26d2ab5ad6feb36f5","_id":"meetup-web-components@8.0.2876","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-HnaKitqZ3Om+tt3VuwCPl7jOw0r/6tY35Y0ozy+kl0ORHdD0SPJha/t7kLyZOHR4WVnqUyUEtuBcRGu01TjSqA==","shasum":"319cb335f2a7fc5b88f8d761e0dc1abd647644fd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2876.tgz","fileCount":603,"unpackedSize":3427455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdB5QxCRA9TVsSAnZWagAAp/UP/15zBMZI9sjvoLRNnYn0\n6SRjcF4oFEafJQGy+EYttg9veCMjndIAsaUtmo7pR81k+HMAkvSdoDWDDxhK\ng2/0ohjnZq5JoasyjLZjkdOnS/4AmC8i8eGMzLv7vE8Cql73pwjYsZbff9gT\n8JcbxSzxPFZg59ti20wDmqJfR2teK9pbL6mrzpL841zhDJ8yiwgfhuIIT5Us\nqO5Auwwvl2Myp2HnJzzp0RwgTAndIJD9Y70pDWKUEd97AIHN/OIMz9GmlxFw\ncs7+7ERxDuqr+DKIqLAb2GuLKOW5IgaQ6L+jPAOrf9mNJwJfiyH75uN2yQgt\nRacbCFrdwFFdnA/oNcFXSZzxowQ4K+A4TZ7zJc7IAlEhteXHAi2Xgcu/pDBu\na/sa9M5UOXiKDdWe7CnfrWiG23wvTHHx0CGMnUVXcusqEfOZtBPK9K3zZyXp\nJ2g51SBsrDE7BjebPWE6b19eN4bQ0x7Q/kle+2vrKA8pRFTEj9U2QAMZVXmv\nROvUSdD/2vAwHTuYWDFxSFHfgE8nXMCHgPw7AyYKcfROfwn/wfnkl5dNp0tv\nIyIHQZCG+zpAkE5WmFsRG7rhdtak5CzSAoB9m1RrGr7+pVCdnHNNCqDuCcyL\noDux7JV4ZF/6R2rfrJg+zVyIjVk+1MxolrW5jWHamK/YlXysSFOGOAu4EQdh\nsFmr\r\n=2+tq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9T3Pfz32l5m1mYI8PUm/si7HAJtCt2lngrdIHzxgYEAiEAj47WSRkwcTWfMfmsVCl3Obm8FdqGWm4x4vUdZBh7+x4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2876_1560777776818_0.6760087424453698"},"_hasShrinkwrap":false},"8.0.2877-beta":{"name":"meetup-web-components","version":"8.0.2877-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7175d9982707ef5854016371a55ba44869973798","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2877-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-1hJ1Inb2XFpZ/jJuW/2nWpdaz4szzz8dbGgZFgtq5RYhNIRItr8vH2PIouk3XvTxeJLVD9en1i94GwpWK+mI5Q==","shasum":"d08e668000f077aba6091ff3ffeca2729868f35d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2877-beta.tgz","fileCount":603,"unpackedSize":3428670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKOpICRA9TVsSAnZWagAAzuQP/1fYimjdbHHash9hO9P3\n1wlM1AVbkBiMA7fb80pAWW1bihmnEmB/1fcSKMFgbhHEgR+JpgvQl6FjU1m3\ns/L9nZAPsSF9Sare7ehBzl9XmyWST0L23ZwHLYNZNROUaCoeEdGOJ3cn6LAx\nWZTEBZpvsJk0tdmCGxMKhhOHOkLFHLKBIBdp+PchNGC8svdLj+MndfmWsunL\nqBJiS3CU24r+Ea82emk1GkSln9be2J/MqZpAfP/LLjJ2GBTe3mPKI2evMQL4\nX7bu7KD+yguQpYnzKSMLRl+TKv6Bilg+86D9wLIoA1DPVLVufnl9zdWEEX/k\nqmNGxP63jCIRYX7AMZsv07+ZpEctfGdJerLmXubj9cK8NAsAPOxhG9eAPLN/\nHyzLzc0dbigTS7+C79N2M69E9VeG23cuswDZIwDXoQejBVqHW+Dd76Xkh6+1\nJebTYAkt2Z3s5y+b3V9NrKsNatOQQ2aacE/TIicmxzY0mguJEsC/B1gE1EN6\nrErE/YWi3QTmN8KKH56bCOGrqB+V6N8qW6IJrUSMIoK9ZJz2HM66+EoCbpcR\nkuSQKCcDAtelRp0l7Ao27FcwnjU8aHV5AG4yp/Qr/zKVnFw4VO51IKqWZuQ4\nZgoTu/Bly9lXyLfxKLpZFnzMzxzeekI9Q0Es1MrKBvOdDfBS7LIoKYqT5z/F\nxJeS\r\n=xFxx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvNjJy7Xc1hccg0LmYgGGN0Dd8IZm4nseQjqXYeF2qRAIgfXV7Km90cXAX7WPrToaWM3O0bOmI4ioLIw94gj3jceI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2877-beta_1562962503803_0.8175577560094607"},"_hasShrinkwrap":false},"8.0.2878":{"name":"meetup-web-components","version":"8.0.2878","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8f907efd2aa05d7c25decd1a5ecd818b24708e9f","_id":"meetup-web-components@8.0.2878","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-P3gETHWmZb8CFMlV+CU7rMO8iLlj/UwqxT+OURIiXr7GBNJ6DjF9hyevqyFCQERmqBe86X3lpD401CljnZBGeg==","shasum":"102975fafc7f497869627ed288b8e8ae74053e63","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2878.tgz","fileCount":603,"unpackedSize":3427618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKRSCCRA9TVsSAnZWagAA9HcP/Rg828UkLrwHU6emOQ44\n5qZcbZfOGu0y4j7QtGQWOGfkUq0kz/UZXHYoCMbpMYiFDHYBPDkI6ilRmSRC\no3kbipXtViaV0oSkyIVYCLDkxv5Jspouv8tYq+3XyzniEepoj1aUEWJHRAP1\nO1X3ertbDy+cL/synu7DHRLtb/PdSdovW0L8EsBQmDrfMmbjOriboKGYp8W9\nDShHT+sMyK7Opy9A2rLTzPTojC6ljYs9PAx6GbBtdPuKB1A/zOZsmqVms6cA\nvr6RqpkR98QfRCaL7oJDinvIo9zxjecNuxP0FxK3RltxpIkRtv4X4AWgbBRL\nGxqrEj9QjSpgKZk5J2q0+n1ksKI+zU+mj8T64qQi6Q86JxlZFxbHWw7INwvf\nMdK5e3bxmFtZWiVcfJ7lweSfdceuANRepnM9xsH9KYZDjyYWlvNlYGWPxrDi\nRxEeTr/gU1yn+O046ra3TvQOO51erMjh5wgY40glQiXYw/zZnGgwOO/H61b+\nqBWxacw11Ynh8lgTAfrOb+gd6ldLOe/vP16VDZnB0/nL2uxQs487PFLSJS1k\nGzTE/Iz+3oLWvhezt4y1yIszcMrsxXAHCMwxENDnZd+TiBh4buHNABKX54RS\nEhfeYjfr1N/PG5++Wzjdu/XPC+aX/ePMUr/xlB1tfgKWgttnuQPNiV6h9Kpa\nF2ml\r\n=5BKA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJHGWKXdX0fUxeQvaItzll+xIs80Jr7yA3ci3kDllYGQIhANaZE6m4tnZNa0xzLFgBeAXpSm3Pd7cFmrSrzkrAtgdO"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2878_1562973311848_0.1291631476416244"},"_hasShrinkwrap":false},"8.0.2879":{"name":"meetup-web-components","version":"8.0.2879","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"da15168b5ee00b262e09e328bdb22f7e40978de8","_id":"meetup-web-components@8.0.2879","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-U2MDAHOO3hlDo4/DQV2eRvVKlAelXI58jxwi1wBnKkq9fTc5rBMLb9Ulfj25sMIkfGNCI3E9zoLn+zhmFnEFqw==","shasum":"956703f4ad2e0d653cdc13d2c00b975ecd56c8ff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2879.tgz","fileCount":603,"unpackedSize":3428675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLIgFCRA9TVsSAnZWagAA+eYP/3/wk2PGuHGqhJ52hgGL\nxw1/ZrQGBZyFIGyNYgFngifjYf2FNk6yicGzRSPS0MxUXtSC/N7fsj/9tLML\nvUkt5K0DfxgE/Bpxv2NrE4mOB4gTauJzEZjajfmdH82boAAv09e3e4nRQiYG\nkj5jeazoKOEcOffZI+5zBKH1+/G+9lfzzGpbfihz92J8jTc3zvlbRbRmH1LS\n+G6KHm301c2s+1OJXMK5mZslwlmJ0s6awQghhtDiQq02HBJxZecnowXtS4IP\nxBO59kI5V01llEyJz26Vv6qxni1goU+RL469V0iljHWAmnERtzRiwYm7cKjl\nukrJ1j4GPwy8yxbmzK5EaE9dEXz3vT4eyB4Fx7OgtBs+3iL8k034i6hPLaQT\nCinTu/3Iph1ujjfmSKgAfYeMbECg40bIe7ZdrTHyn0iTFWMXilZ97zLwL20t\nn+67+auStGk1wR32hec8SrsX8Qa4OyJOZlZNT/vUzGepjjxF5lboL2YLxevw\nPF4nFPXeahcbBJ0UlQzLxKkP8MSiQ2G0UOBLueQ4zy6WItcauTukeTgLGVdA\nexq7ChkK9wgfPMOekAE7hifktE9Vz2qju+MK7X0dJhFy8Iw+DbWpXHlL4HSr\ntmpdxkkCBMUgTvFTZxw9GYA3y3Jn0Mc91xekCeFI9eNlUaxgOK0J2LNtqFvd\ntiZp\r\n=KGKN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb5KUIXBw/Bm/LIpiMf4yz8lBXacfCLeoMow6AdBFoAQIgbGFTjXLqeukDF+uSo7WmbtUh7oGDpEHmPqnn7XkXEZ8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2879_1563199492660_0.6373598161597691"},"_hasShrinkwrap":false},"8.0.2882-beta":{"name":"meetup-web-components","version":"8.0.2882-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7bbe583b558c9f44832b7685a2218fc6886866e1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2882-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-AwI7qzhXvgv7TuGdwy/oDaf03jDZbm3XbVQkUBmqrgT0RiTBmXJKl9IQ5MUKEo7XfACYMJMlPf2+7AdgKMappg==","shasum":"cd29b9d93ce64fb09706ae2e17589b2779f90872","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2882-beta.tgz","fileCount":603,"unpackedSize":3430743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOLbSCRA9TVsSAnZWagAAN5kP/32h2uU6Brt+EJV4/YM7\nEBrKoSAKBtgJM5JqPk7O4OYN1dvYa0harGPKauoLI15eGD0dGziBpvMw9bvb\nyy8gbwJJ6CEnzPgIe6kgp/7vadN20recJWZOlktT9XIJZtEQcTDiT238fDse\nvM0e1Wdo9r2I6oErCLbxhe7XqlR5DorAh5OCg4Xtwa7RrUYxmTZoD4738KfD\n1ig8eALGwFkYTUiV4/yMksTuybtg8OP9z3r+Bbaf4BJGYmZ7txkmJNQv/lmT\nyv7r+yvD24amXliWMDTn6nW11ucQYa6TrKAyZKCBkPDi+/h3dZIdICQIxjjt\nNTtIKJmqcRyCHEo7m6PbR4ee3lV5UEpiM7iDK1DvzkIURyNYr4qSx2/TE1CC\nV5AZ5I1ZDHgvg2doQ6XDYiIvg3qxEW12Cum+we921m8xxmNZQ3WlirJ7XhYi\nXrK60uZDC7cfaZgAnbD9wWu4HAPLaezjhfwoE5uuh0Vw5IbndtmKZQWnVfXR\nkxFEhxMe55/ZS5AqV7MSQrrRXWWUAm3ZsKj6Pi3MkKhavE+uSFFLzu//2pkq\nZJxW3QvEeOH0VMR4BmrPCWwdoquWd+yU4wtbtBoO4j23NtiRAGR0mndFKYrd\nSGf0LLiQVd+VtZRKzAKndV93Sje9hvEZIf9cUMWy0/YGHl5J9hAg1+QSNXqI\nFm9q\r\n=dBKU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB40YpQczFmY8ARS91xI8aQsK0L0N3ghcv9aaLaeMdeAAiEAruHXFwKfhL5ADTb9Zvi9I0UX64RMIoMhSzgEEnK3FVI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2882-beta_1563997905345_0.18087653801236936"},"_hasShrinkwrap":false},"8.0.2883":{"name":"meetup-web-components","version":"8.0.2883","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1d7548171068e1b905f7e6f725ab06dda15784f4","_id":"meetup-web-components@8.0.2883","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-z0v7VUYYrAQiCid+ztOgLUqzeaQtEQiOqwcpZJVJ+wOHwUPo2xYza8wNtpTW+ilR3ghGpbJ59tgJn+5+Z9dCkA==","shasum":"8135620653e122c435dfe5c39dcb5f3eb63a3add","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2883.tgz","fileCount":603,"unpackedSize":3430738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOLiuCRA9TVsSAnZWagAAS98P/0PMgtQnBIVne3hvBRc/\nTRuu1p5ugCrVZDsDqjexUOOUmejkAqC1ftyqJq9jQEY9KUXf8yJ+75UodjRP\npbwYNnn1HBgxKWT6FgH0ySuiJsrcmUyhz8IyRCSkdTTYziURIqT4hSdOUgOX\nCVKuyM1dCugO9QvSN5hF/4rF25Q2kFqGreWQdZqx2L3FWMWESRpuAOcn22l7\ncYKeNPSTAUafnSFwscy/Mm2Wg31oc+6Aj+l0UKLVHDkLUJIh17q1QuTOShri\nh0pUHBvtZvG1I564WDSe6SSS+DwlqfTllj9L8lSM7DkMqSJMh1uBXu+iom1F\nex+KQ9p5r2uj0sUGUHc4QzSYZUB/AmZsSkovScrxhnzLY7Ht92ngt2CtadKI\n06Mgnp7AKpxsN2ejHtAm9GFm7G+I4IqrxdkvbsX+lKL5jHxDBBlX4gLpj7/A\nqIycGXpJHpcOG/cHHgYpGHtrAyvxt4IDSdg27DchGuFpmxrHKr3CJNs3uWmS\nbv7+HWYuxCp7FvoCKnKdAnYJkJwIvhw41ROQ+gbPSDklVDU9uqr1MA31zTDS\nYbzK9FeBtxkXlgeX+89NLZhQI3HeiQpiuCoofgOOb1q5PNWWVOieEKtHVV4X\nEy+keQmcsz2Vp5LEVImGpa9f1nVGc0ie33KqCO2SfV3tuHn3CAuGQUSXTFHp\nj6oR\r\n=TA0H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTTdGjDrysT0oT4dWf04uL2xqvZstTmQw5LHDqD8F1iwIgOuzivVV9EKLNjyIoI45nNN0BRrKaFI+7BPnyXkqoNJA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2883_1563998381932_0.5698675754908087"},"_hasShrinkwrap":false},"8.0.2884-beta":{"name":"meetup-web-components","version":"8.0.2884-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ce472d660f5e8da347c7957e3a56f17a8cf21216","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2884-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-G4V4fxGNyzjGlJGcF7/k9/D+2SL+CO1vpQIWlmWHdyRLbdw+HsBvhpU+BSkW2yB+ceBbOrP0BVZquZjXXyJfIQ==","shasum":"e15f1249852dd50d9974e0a3cee56c498b2f6c2c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2884-beta.tgz","fileCount":606,"unpackedSize":3442175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOe/LCRA9TVsSAnZWagAAuDAP/1E5yQ5O4srLS6a5NfKO\nj9soVAv4P9M+Uf+m2bj5S+AuAELTKohN4zNdsiOKkZ5ZlpqpEr9oMdSWTRQ0\nXVILt/bq4aXvBNr3AGuWNVtAs7DSLWhIjQ/oHhN8npwHd1jJw5yPQacC6jwX\nGnpU3QLdaHK9DP5d+ktMTxwKeGTI9aNw/YVuY9KioGPp+BV1uVx3bcE0vYs+\nYc1lcsKYt5PZzg+7VJTH7tcLQrbGK5i4nFtr3H/Tjy5eniUTGonwYSsCMRlj\n+CPsDH1dUuX/6m7fzLWPiJFos6nhikvgslSj0N445Ax5wS3oGgafnSDEPbj0\n9hoCOzP9Z/J3J/ppQk30pKTb4b7OWyzGv5NLJor+wIz5gwORZXMXR1QMhKJZ\nquBiwnE+PRgPFdARh3VTrmScFR8nBhrXaWU0caKhqyOmPf9ztuOEvNYgMDke\naXrzzpUwTfXHlc6wW3nzipFs30pt2FQYGVql5njSGRYHKLeLs6NhAbakZu1Q\n34w+uFguu7DdSlR9TL0t6ljkON69iN641g2RQ9cZ/b7iuGWKAs7IWPsrRuUV\nweeLWa9wWKyqlZL5JWij9BCQoPFR5uCNpOx5E88oz6Br1fJ69pgFgCnOiEJK\n4N0oGLzGDCEnCwJPZQyQ6Oe4vVUZPHIuS/LVl/UierV/4XG2cG3wfrDnhByu\njMue\r\n=7JvG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFSNwQpXttmNiqATuJOT0SXH8YKO2gj/oJgwbhfbNkFbAiBjsO/AQafQNnJFOHXZSFkRHff8CLfkRroJUzieNoAbgQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2884-beta_1564078026198_0.5415331057070809"},"_hasShrinkwrap":false},"8.0.2885":{"name":"meetup-web-components","version":"8.0.2885","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"858c16fcd595b1ce98bdef7a56185c82ae7bc465","_id":"meetup-web-components@8.0.2885","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IA0KsGky3ae4lhDrmWCIaVBnuVmbz2O6Vd7bksoXVymDu9DGuEhORcEEUIFvb5i9gku/CbNUvNx7PB0voFTkpA==","shasum":"5e94b67e7d178d747dc22461fddbc087d1bcb417","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2885.tgz","fileCount":606,"unpackedSize":3442170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdPxQ4CRA9TVsSAnZWagAAOCQQAJxd/vBNhxtNgqdMwVby\n4zwTkNGTFZ/sGGu0JZ5+i5Zauu6NbotkJwq4mqedtoTnbxaO/gztE0VBeX9R\nO3ZfAoM3+6A23aC3of9tdUToMF66ijhBSGl4yIVhU3fCmaFYkvVOv6uKewQQ\nxfBXvrgUV66En8rmHK4L2n1V7dU7Jtnrph+GjdItHv6vghb7KxpeV1/I/Mf/\nD4kAhIwFdwJFvIodSfSsqfAh9r/EN8dkR2MhZviy6yQ7uBYmrQGU5/bOvVpd\nBLQna6epLfHZ12ZJBfarioItjbggXt28Y6n7HZF3aDZ1/4ecCi41AweP4H2p\nKisi4icOgcdJvFtcVRbngo/O9npnYvOblIKOrHrPQPfWfbgLWF9OsNeRKkAv\nmuu5Ex1apx+jpe5qzl0puuGaP0IFy8MpxGFmMOZZuxovCp5Oo5K4EgFRaxfj\nG+HOJY207PMhtRj20PigwQDwmz0QSJSaM7f1Sv/INIuVpOm/bJJlUCGlY/n0\nJ7B/TfFcD7pe1Rm4Ty6bANsS1WnZihW5JhbqXDFRfK1tr35mZJoCJsBrHJob\ncHz1vVfewFbeXNUxAB8Qm+DOcfAws+vJU1H2XC2yuzeEv02cE9G8O6CXBVEu\nOUtsLfhx35ECiRiiEei6j++xxXWZcysPTKR/Xp7WpAiDV87WgbvS0sSK3aqt\nKAUh\r\n=qORj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDGgGSRG0V9R+JaGY607hWZIydYTPW94NiECm/7tZdAIAiB6znlNVkc+NqhmxR6xkG6/mJsVf0ock40IBfkWuJ93eQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2885_1564415030756_0.9437448032536317"},"_hasShrinkwrap":false},"8.0.2887":{"name":"meetup-web-components","version":"8.0.2887","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c0dce6373fd526221e94173c9b9326c0c7d30f1b","_id":"meetup-web-components@8.0.2887","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-mCg4AdYJee9pT9saOiJV/2WUkkWgnSos90lyraJ8zxHYQ0lxg0mwMwm51lqWKuJupKHuJXhXZR6XW0EVjtAVlg==","shasum":"856c285ebbb1ec40724162535b8c1785d2f77bbe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2887.tgz","fileCount":606,"unpackedSize":3441995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdU0TCCRA9TVsSAnZWagAAs/IQAJEfZmlSZRnnej8df4BG\nsZbC5dO5z+6qhMkTtQisUA8qdorMnrlkc4q1Cek75++LxO5/2JBxa8N0OPIU\n9hpXpVU3922IZALZdrVG0WDzUCU0xoqYM8MqYj/PbZLenNWIGALv8xIWgWeg\nsBdv05sIAncZMaFca0qcs+yLC6wM9lKY3rYOORey+AiOcbbkMdzn55k6+QJe\n0vSsd2BuxlW4kiTsFPRSYrmgVgJTKwRIYNjmFTzmJbkE7Sk0gwrJmTONT36B\nUnj+wdEoLe5JG/4A5Ay9ZEdX+dYvwQUVaGuJn2vsNABVAF71+3a0fPRnOHhR\nvy4qDL5c9wVyH2XMEr7UV+iqEjZD9FGSQNCdcKDAmjiXMp6X6m2dur5/foxl\nAd7NVPzSVv02B/TQhnpVw7ma/+TwORjCoIrTiJrJ+XhAbQ96xex8CJVLrHPb\n22EG9FHz9jMkyafen6+k57bqMixQ6SubGmokciY8duELjc7OazdXYkm4oeFC\n13J7G9yu34BrZ3vdADtan1Ql6hYjN8jiE60+2eSqjT72GxtUe5k5eG3Uky7t\ntbiGaH42ZOk/BP6w5dxni+dGD6wH83iY222NjZlOOv+fwtW14yfXqasLP24v\nkBs/KWvgRWpo6lFB9qG75Fdc7f56EzJToahfkwa3qKBHICLEO/lec5AfLP0a\nZixJ\r\n=5/EY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFHaImfcijaI2hviXpk+QY99R/4m/mpq3d0fr7chM7aXAiAVXI7upS08w3gDuGBn9wyb8STpfkfPJ495Fs0buB+4kA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2887_1565738177292_0.6325967539115227"},"_hasShrinkwrap":false},"8.0.2888":{"name":"meetup-web-components","version":"8.0.2888","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f088646e4746bb4c9b67d1dbff6195f7e2420203","_id":"meetup-web-components@8.0.2888","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rqNbWe3wR5ATrnx63ef3eqlp9bS395WVF1KRGdY7uNZldLXcimYoFswTGmMAlLzGgbtG7aCXZRTXEm0/GgVccA==","shasum":"c3c08ffbe14c27031aa0e67223e080a9c1eaaac8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2888.tgz","fileCount":606,"unpackedSize":3442761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdU0mrCRA9TVsSAnZWagAAdQEQAJc2BQwwy3sIGOlctz29\nEchplQ/nTHCNYA2QzWW0Nm1XI9M1df/e04FXvFUuyNkqLnmmo0OdLWxT4n8O\nHAg9oPqg9iyDTjDVR5WMYCz8FjftFlBm0OMFvckYZplCzFjlu9UvVs4/KmDF\nPT2ydUogVoDlIpEInOK2965po0HfCnaMHgZY0DNPXVym4gvmbwsNtyI/UgqY\nyaxPwA8meRKPgZoI43QNOBtyE4mfKl69qZa2OWIQEKKB/I68S/OBEswTKWHJ\nGzjh4a3X6079m6T4UCqB5PBcj5mtGBe9qnnQfNYC4NnLXiDG5lZCAqXeXaa1\n2IJMW3BfJgkJiw2tAikh8TwuqRgrgk0lNAJyTZX9FClFxVcdBybrF2GD8TZb\n+Qn+04r0fkSFk9Fhw13fl5r/01Pgxo4lM232GjL1uY/Z+yGX1bCcUrinwPkt\n2V9hfVEhEbrzYkoaE4YxnV7/soD6nfLziaMXHC7VuJbya/hTzys4dRwzBnHr\ny8VI5kvJfPNwRZ2OBKOcWGwTDUyj9rEWvD1gaWykG1aWR6Mpr8ei6l5nePy/\nK3rLOyGBWYgxiBeaMcoUf7ZNeGOBoutvW6e4LJmjIaPZss/PTrsbNWJUOq+J\n7OrbU6JCN7F1ZC48SUt93aZF7z8RjPvnXd8WaNDktPkGmAwNP0Eh0KgQSAbD\nyav+\r\n=ezOw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6ys2QjaECAUhe+lAj+YaOJhUUJ8/hmRE8YNm2LLqF2AiAiWu3zvAMoNY5CLPFsLz+5MIPu8J3n17JnzHWi0oVvLA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2888_1565739434986_0.39858044325889197"},"_hasShrinkwrap":false},"8.0.2889":{"name":"meetup-web-components","version":"8.0.2889","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bad0d249b2d71c77506454918eff39a5304ced06","_id":"meetup-web-components@8.0.2889","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-Q7FMkttT8gZAF1asQIF05E1fkacmXT5XBh1fPivBaSIq6/CIE7JZ/I/DyhID0MvWBVrhV5WLGFfNEfoHYNen7Q==","shasum":"482e19ce80ae4d8338580896fad72ca5733beb01","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2889.tgz","fileCount":606,"unpackedSize":3443132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdU1qcCRA9TVsSAnZWagAAMyUP/RNQZ0qb8fHLFyON/6fg\nkAaumZTRTtURDn4ezNaKlzJJmkBe/JmEz9UW7wo3z+3W5B+NV5gwiCyxUMzG\ns1E0uEsucDQaWZUX6yCGDmiAD+BJZD89zZevgagSXbvv+fEuebtO2wjLwcgK\nb5f3G9Nkc7wNzDCvs8yezdp97RtyJ51sorWzCiQUaSVLsjK4xAClBa2hzVDu\nvc3qGK0dWWPUYDuBehia86gv4J0/iV+fPQwk7gzC8WYF7EP55bdSsj51FLNx\nYkwbM0VLtkU5bNhUPYxLfGcV46doLYbkQ+KC2bUSn1DWiMRzq/aAf+ik8mee\n3NKzg4m5XVuAR7bQOl12ZUNkpG4sYTwk4hM2yPp7RI+3P1TB+XUwRa92bgnG\nVUa+kaCouR1sWraZ8dUBNXfwHn1SBfhWmFQ1KldMvfk0HvWz2t/67aZwbP1X\nLQmjMh4ODtMhElpzSvct5c37Vh1gzNhryuFm6n27HRt/GvCP6W4P8TvlEojZ\nUl4L5MTxb97RfMAb5XOoKGmBzbbLzSP0VbFdG/wWjwNSI0vjNqyMZH9bDrP3\nLe3JcmxznMOI7TJYCmz10fxdaEM62iwFlr6/9WeGXAgSiNInOkT9DD1IuKlA\ns5f4lizsAZe1IM9+yGEli+3NkNAt6UMevAY+ish1s4LGUC2FVmbxUF9KgmWk\nmSPs\r\n=gYeW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICfGnxpe5qoSPKd6Qa8OF5pF4T+JgZslReTDXkbv0J5oAiBE/ogU6t+Hp6ksd6xUFaUjah+sOiysuJvJDOuhg+D1rA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2889_1565743771195_0.8409790467134832"},"_hasShrinkwrap":false},"8.0.2890-beta":{"name":"meetup-web-components","version":"8.0.2890-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"30129cd1595eb5a64c0fcbe10fbb5e6a6623a206","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2890-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-jBn4yd/VBx0QDyvnKHLN6mPspufHqwLqzVIZjVKpvtLFwIVne4hap74sLiHVlqEgFltNf7saPePdlUsajC91Dw==","shasum":"b42f7c42ea8a7f7f539cc3f5fdb3e69c5fe77c66","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2890-beta.tgz","fileCount":607,"unpackedSize":3443120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWvvhCRA9TVsSAnZWagAAuNgP/A6KyaC2ZsxhFF0IXMgk\nYbk3iao0gtwe70XZjsYkdtqgjV9uyT374GT6N76qHdakq/ibzaGJ+UC6vMSM\nikY0JCV3jy07Fowx7mGkXyEfPYbdnBICVnxCLYCC6jSzub0t8J+1p+HJGVEW\nD25TuSRphpN2/OSIgzsZMPMOYN5651izsobFrXl+tFSVOOGqRFfDtM1GLQJK\nyXkGIiKQe5060fai6KN3CqXLUqlMI3zv6nvJVxWUM1HIPGZIz/4PNLx03K8Z\n5Z2M2b415hivZcs87Wttwj7Q6vSBUiBCWK0SeNv2fhT72V+TlhnhwkK6JVes\nmeIGdAYlY8/J7IO8BnSpTTR6wUTwwuNCeHMYzyl0RlAP7VLdXxAoAjat1GGz\nGIxyQDSQYlD8zwEzOoqPwZ+fjXHaS10SfzPcrtwjs5Q9JraHm4wEi2Fs4Cpw\nO+xgmrAmM9UsEpGa1Ex6gyyMZgamcNyhd6g8TvzZ+ZJCzuovnj1wUFwWzem9\nsHz9Jgn1k27nYMMYWOyngxaEmOKXv68cWv1epBFQXOr+ZkoM7jGnm+F4dE1N\ndP55Ia3Gmf4mQNIKIOQhKA13317gsU0b1gBK7ohGJMa5JbH/YkNzMeZgvMzV\nlfSP2aeqA+wJSszQWUAjchkj8gjRULAmZ33YekfcPOUCsHPulqbNDfA2BnuW\nAE2x\r\n=sBkE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHS+epvUPa4DvJzmKvMcJa76D6C/2+ba9DTMZnGWUythAiEAxgRz4dOAolP93oBbz5VlqbAVlDZw+teDuDEHwNw+4MY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2890-beta_1566243808259_0.48892096300562815"},"_hasShrinkwrap":false},"8.0.2891-beta":{"name":"meetup-web-components","version":"8.0.2891-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"11723cfd872f8cc349fcaf78ca18f940e964bb22","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2891-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-tjT4i8WeEG9kCfVgYkyVNwGOBkYzgERjoOJyN3+RofkqnphgsJlBHGF6DdqbfBGLIH9x4yQBW551YTps7Du7NQ==","shasum":"367100f2315d5428c79159aff7b7ac025944d518","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2891-beta.tgz","fileCount":606,"unpackedSize":3443106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWvwwCRA9TVsSAnZWagAAbv0P/1YJQZM+0yLhhEHYBbmM\ngEC4SrlXDTRORiYvkwzf0td0O4/ApXckXLui43J8yCUKLUzK6+5i9j2EwW58\nNA2fFaXqBte63wovYoqGhTgQ4UoxcaJp6SPGbHA+4EjGNW/lGe7pjWDqUtLj\nwCjxutiWgMjZNftSW03+jQM8Os/pdtMPBK7YY5quPa6MxZgqRU1QiSSAhOUY\naGD1xB4+xSyf6uvv3cTifzmrfsnfmqsefVAvky3iHPhG7KjBGDA3k2ua5tQ6\nNczIOdytxdwow20O+leU/goz/zrC/OHoV8oIVmp1h+jd6VsXhbpr4gMlFLlG\nVTKi4mWEhI8hp3FlsgHsN3rfeCEwCGpyaGmiTDgIZ1wRnMjnGHuP23BgJ1Gm\nPdatOYZOCV3L2qnwNXwqYkJwrmdgcUHKQLYISqBM+BtApYqCsScfX8GJCu6U\nhk2g+az+HB3KRgCKTBFH704hwDApgDMCUxm2CZrNvoiDp45R26sI8MQMBDOa\n8wIaonvLsHlNBP8HhxuCtRQyoKKILXq+n4/vEQRyqiliFpSJ8x7eABkdR8D/\nKWdAtvHrl2R9K2NUtEmObVFJyNfHAB801oFL6Xjf83APDq0XkXa/D4HSyOPU\nMX5PMEGkIvniUat/cG9sddUhgxT4TFUT5OFrwkRaOG7W2cQIh7Y/HmgQ4N+G\nJiaV\r\n=VJ4Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG4v16a4IGdAUsVHNYasxG8k9rriIHlfzuxkO0ip+cehAiEAySrzCqAq6fZE0AnRcVL9p876i4F6Xd/3f/SbIoen1CQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2891-beta_1566243887828_0.0004657205889402327"},"_hasShrinkwrap":false},"8.0.2892-beta":{"name":"meetup-web-components","version":"8.0.2892-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"07b1f5c96e5d3a52d6dec2fa35a9fa4d884a2f47","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2892-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-d0ySbkgBLnXw8D3RkoKWU3C0LWackWrYantBNnaxFDga0PP5zev9sxTNr28wbGrEiTrDWdeWGC3B2J+AB7Egzg==","shasum":"d6f2e1385dc8ff9797304cd703ea39cd0bc412ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2892-beta.tgz","fileCount":606,"unpackedSize":3444404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWwEaCRA9TVsSAnZWagAArywP/1QHPwXr0Sml6wIHMjQ7\nbGhQQocqZ2czIgBJRM45Iav42j+0im/C1FJ0kqOtNv2NqPG3mvAzrYf0U/c8\nksVQcu2yaIB5dEHP7+2MeP+/UWPI0Hmt6ogtWAqJV7xw12LsA7wcCY4i6V+f\nWaxRLZDjH8FaIBP/1L4NZ35yItE2ahcboxAo9JC2KOLnC6xYFq5US16Vv6Bi\nZJBPy7JYUH+EL8fOq80Bp8Ft/JoJCvRRe2e+P9DwCsKRxD110X3EQ0RmowDZ\n8uHLS13TYegoYR8KUFolAqyd1y5xQ0mZ6o3YzJ8qglYpauMcwTTgB8I+89BP\nQFE80pCPHC5hYhFAgjH2OZiTTVYNFKbaOPNmGN6XB2C7tMmYTdPQMa8lYkqw\nf/QUqyVQOhy44ql4Fusz+fsrKzOS30RamGDBaMD6eaULF3afFf5F55epRG5N\nXfJaagceCihUAlUsBgiOdZr/cc+EmTzZIDyiZLoRZiK+fGUAMK26az/XdaST\nSvyfMIo1tkxUeC+n7soUIaFq99EO1U9O9kri5I3tIDVBDgo/0R4Lkvam40SO\nfFE8NHQq0bWKlWLK12Mf/3h848+krNYjFjfc8k2W25b34KzXLNxERNppuSyy\nLvDkLDcOWDr+9VBQJD9KErlRhDMdDAohBE6zbEIRIhoj98tMs4J1NxMH5RGL\n4nBz\r\n=8icP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIv+b3T1YMzPtKYA6ADXuBy/xeiBJCebUISDAUEjM2jAIhAPTmdq2/SMSPSCX1qpyU7KdXGR8//L4iZ+kcGGrZrO6V"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2892-beta_1566245145912_0.5035462697935613"},"_hasShrinkwrap":false},"8.0.2893":{"name":"meetup-web-components","version":"8.0.2893","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ae6f1341e5c452f873a10a7ea7896e3bc46e6e9f","_id":"meetup-web-components@8.0.2893","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pe0NdaEvQXdWBl7cFC+QRS0T3jq6gW+faGVApI2jaTp2ZP85hA3eHJyIXcxz/v9oPa+vNn0AECrdv8DBiHyMpw==","shasum":"64a62e1364f7933d1487a36540ae13bc6786d282","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2893.tgz","fileCount":606,"unpackedSize":3444399,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWxzyCRA9TVsSAnZWagAA7rcP/ApAWGwD6/N8XG52zoPo\n5Gm3S31R/thj2tb39ICcqP9Zxh2v2tQS2UIvy0AI9DdEjHHIpwRsDEf+K2Zd\nuy2KQO3LmrQe7XCzpHFHmBG5kCYzKTqpUVnUqrF8Rt4v8VfE6mdmC/8Ev6J6\nLown/2JdsfPO4ORmaxLIUu0nRsEdWjp7HCHIf1uU4RBg8WTE8TkTHkjUd0Yc\nvxA2AMZpAGBQzXqHZ+P3d4vsP++L0hcC2otPHKsjkbgyL+Ewf3GcJgD4OJV/\nvKMNT2zJf4Qvj32SldtQQG/j2UBDAIxdcPKWxh81ldx1NO7cBj+7XQHYwUVy\noqTXDbMoph+HftnDkji2uIQECa4yB+xrvIikUCtzyqXPNpEEleaCq77q79dK\n/Eid1lfDZ4Jkro5ijjRtqgHxrYif/yLfig3S4DqbAI4DEYJPbbbJHxOlV0ST\ntkOzzZtZg475bsq0tRsVREYuo2ul2oN0kZyXt/4XqaIvP4HBjkOriw5P1FY+\nGy9HdSUf3l5aNqfaAbT+C8vdA7s13JK8iglG8OAUKd0cV15ebonWq8ekOKAJ\np3cdRCMxEe+5nvAiabg39lmOHoBX8tlPRAIvT+OAtp6Z53FwAo7ncu3QIyrz\nDzYt6RVALnLupHO5FjZkAHHhUhNR9QwXdtCtApha/LD0WJF81htOrf8ZCJ0J\n8n1a\r\n=TuPA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHR8SV90lMZvqyy/bNCt7l+GdDoT+RVnfOZDohThtYrqAiBLHDIZV2DAMc6AfRo1qeCcFgv2zTmUHFT9UsMr5FcYSw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2893_1566252273734_0.857765435382507"},"_hasShrinkwrap":false},"8.0.2895-beta":{"name":"meetup-web-components","version":"8.0.2895-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a507c432d0721402196c521f3daca2d95c6c1ef8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2895-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-ompkxUVBS+zSAzvrDggZ1ITWNoLzzMsRgyv63VgVKIs30C1C0tttxz/pY6bGENE1i2Zqwgw7cDFYmpX3gxbZtg==","shasum":"8a4baf382bc39b5e33488348da52958bfd168290","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2895-beta.tgz","fileCount":606,"unpackedSize":3444600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXDDPCRA9TVsSAnZWagAAh5oP/3KYxyPlU76fhr2voab8\ncFco+8Xfi5dt5DiO8w2E0zJ5HFvnnx/qW68t6ONbp4fNleFPttuccmREea+I\njP/+n50Ds9/DfDE1p3OX0dSe09dfK/1qWTeJZFke/EtR+3ezlTtXsAXiu/cM\nzZ6adAe3vCTGCn/i/wQx84Nm3blO11N7Xjau0756IlBtb4CKlw11jf815znK\nkE30DeCn+rxUnl7V4Fa4eOJakno9Azxa9g7AZTB9KlxJA3MdrrQJx+PDhFAW\nZ3shA/57eMxgWQ944MSK6smUb9tryZkzGAJIiwEmpIRV1B4j1dz4L7uGaXUb\nZ5U7j6whUhOJxgyO8i7hYUgeqhzHprmY9DwwCzsTu54IhqPfvJKBqmdLiaNi\nJIz2QeaiNfDxuPw4DlgG2gp1YtcAYSBXrYO6AxYuvtDjDQojaA5PcuKldXh1\nqI7xY8shxeWqfv8ekEaz+LJaLaKGyX/qhqP9PWE15rqkL7nfzHP2jwjJUrdD\n0Fo1sjw1YK05pFfBsm9Lirz733BdQHITwmDfUpKDroOhBuyqNn+L8R7j4z1M\nrAxSyg+/nQmYoy/sRaPiu99JXN5/4Ur8poH5FaBcSyEdz/HVNoPEnAFQtT5R\nla7gvU6StbJZpkpUOgxWH12GBTRoOFkqcJbn1Ib687RjTZxjW+vVsrT1Ore5\n+jGn\r\n=ZQ5H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrFI8aKKJuyneuqjTE61chYK7LeG0IbO+arlCVCc+0pwIhAMQ9WrY45h10fs62iBMVo1zUO4l+HBnX2xkPggV9R9V6"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2895-beta_1566322894346_0.20507513309415248"},"_hasShrinkwrap":false},"8.0.2896":{"name":"meetup-web-components","version":"8.0.2896","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ceb7c63d0769cef4fd446333e8441e27e74c0db0","_id":"meetup-web-components@8.0.2896","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-pkVkWUviX2zcmopQGboqPKYFii3UciqoDRVIsNI5LKR7P6oIocc8ljhNkaIUTYn56kcPSwa2r33/CFyuu5B1lQ==","shasum":"0a809cf4ed731284b05e839e21bf1c95755cb22a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2896.tgz","fileCount":606,"unpackedSize":3444595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXD+NCRA9TVsSAnZWagAAmiQP/3uxmgbX/iaYNO6OYR/j\nWzLFVybuJu0H8RTYMN2Bu6iixWxlxpIQTvy9GfaoRgvvj2QtnkJv5SeD1oN5\nmS/p7SPUXesmds/MYUXCsXy/BvDx27t6Em1qomQVwIlYt9/TvH5Aoj5qoPZu\noGIrc2ioCFp4p8otIUbHT87LaKsWULgoBKYUbYqKbQ9l5DXXw4Gahu2kAoLv\nGragPNhJk/EkGwmr41KQy+5iMidIfPFShAModpfoKjRuaoyz1ZrYcrGSmo9x\n2zs3fRWrETKeB1hlJvp3mgf97wuCZFhnsg7+ZsaH2flTuPiI/YnrlpvER1/p\nv84gEsZnhIeQOqO/XICRymZysEv4djPbC2y6+BR1l3HRjyUcc2v4/ExOmN6m\ndPnYr55B7o9UO5a023mE8SpH+cHCaf69qCSt7Mx3UbbvWyZFhZfInpOPJh2j\nmMtf6pioPsGAO76y3zKkGRKdEvFb8fvwJ3vtPu2rsWj15WymV0Bov3Hw+vnP\nnOfQ085DY8vJCkVEbLnCY9uHMYVzicO7tRAcQ+cSfJY2tB3VerhDuLZrUPqS\nJLTdqusXWzj3CVRy+jerfzDiCxkTttfByxXS7jBQi7cR1sQxUK3LqqzLbaRI\nLvdTsZbdurndW4CXCuwojyUdte5m1SYPttiWnRWEh7yaGPXSjJRFWsE7X0sC\nYV14\r\n=pX3p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLKodYhife7YAoxKMSOmhB4OPGopuKEp/z7viSxc1k8QIhAPGAPhEY8tebak2UdC4IO5rn4KojCuF5g2zQVgkqPGZk"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2896_1566326668332_0.12192573498625547"},"_hasShrinkwrap":false},"8.0.2897-beta":{"name":"meetup-web-components","version":"8.0.2897-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c3b3aaf2401946997194db0c16d5964465cfd4b7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2897-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-gzT1ykLnItNCuNUE1K9HflpMf6rNtjRs+zPEw8GVGEpfFJ/UgRzsCeHSLxHBUP2p8YGp67BN/mnfMEt1FTOCEg==","shasum":"7deab746bd70bca2a791499e4f1c3fcf5d266a6e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2897-beta.tgz","fileCount":606,"unpackedSize":3445543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX7uXCRA9TVsSAnZWagAArqYP/1j7DkVaffQyzFUkJq8b\ntoTY2Zixx02PeauPRf/ycr8+tNg0mg+H4dWjgu4QzOtAhio5K2KGQIRSN6ZT\ngjgV+w79yr0tRJaLyehvLgGR8cXM8ay1UgM7c/bD5LcjS1jhDYF3AfWAZ3la\n62johs24BRkeNEPa5QVGEhVBl84S6aOWLw7Kofb2SRLnmR3ctrAZNUZyFjKV\neMNVv8UyCfIrElQyjjHwCN7FLTzqgqMewk+zlBxOC6+JWIrT4bwnEz4T8Gsg\nBK0i52ufV4YoVVY93MwJFeZ/BJ2/y+RMvmw1+kO32upgS85nQsj8rteuQZ7q\nC5yfpBZHnflPyS3kM/n8AttOSITtbT+TZLcBF2XgSusGw2rIVneKf8LhJ6pk\nAlNiecAXSZPhbHlvYusHUhL3irScbYujcdLx02wgWNpOijgzKks0GnVKcTyW\nXRrh1GUuXHfurhifvuFA9a8bqxZXOFTBE4pXbaPbiuH1lWl1J5A6j+Dm2ca1\nQ8gOzqZrE4v8QgfWbcpgVJZ8VoFRF0XFqWIk6Nfx4G7Gsdk9LC6wsDVNOBPs\nDUZYEIEdHy4UHbj3Ws2DAwm+ll1aujSrGUnayH/zsuA5S+9Y5jEj4BEoaAmT\nNOLcUN+9mEYloXeiexctrzOp/v8gEYoOvlEnFD0WiXIBt3rW3xlOLLZQWQQm\n1faI\r\n=1JJT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPNW6kfTIW3mwVdWe3Lgd6jifqgS9fRiuOLlOLSBzomAiEA0Gu493rAUOb0Y0CO2sz9MTAh12vrnmaRhQI4BSz/K/g="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2897-beta_1566555030773_0.8586412181691601"},"_hasShrinkwrap":false},"8.0.2899-beta":{"name":"meetup-web-components","version":"8.0.2899-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"60d38a003221194dda15bf4f9597085a1b1e2ec5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2899-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+qY0gSi3g+aPJkNuIWbTN32jMW4B9T5UtDhJ3arvloq8bm9/VevMVdUnDnwZ1pL14qRWCmlgsH5Qb80GTTHhUw==","shasum":"3b2def2007a478e54ed5f3f188afc12a122ea96e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2899-beta.tgz","fileCount":605,"unpackedSize":3023007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYEvLCRA9TVsSAnZWagAA6eYP/jk6FcgNDvT8uWMhE2dq\nh+9MNWNS9xt9mPwJkddlW3zQhd4nrQ7SwfZbnx/5wpCZgOnSJ1SU/+7d1PRG\nn0xcK/y8BeYtPbKLHaRCIW1SGP4DekMiOrGV37clxPeB441c9gRVgEjSeSQT\n2mfCylCRRwR/2kHd/gNtd7sN8LNQTu8xuIDBp0FAUq4F5RaP7TPg+ELxbsbN\nXZ1vmHnrj0FMjPiKjj56ojqMlPgof+fDc8OofXoZdeI8hjW34Kfu09OIhcwk\nk2lUGZcYnKgaodbWotCoDpgtdmI12Ub0Ci1qwQSgyPA+HRF6qwyIliyFmYTf\nb1e9FNIl7DqtOJ6OIpinye0MtLnb4acLkC2Q02c2Rzhp9E0/oojQi7x9ktRJ\nbB8epXm2buQEedwdiIJTUWYtL/3TLgDeXkeR8XhFC8FR/0wC+ozB8h6kY1VP\nGx1J76quBRunXnGHh3gjLxgiPKYZ8AP+NAemWouDwkRwp9r6aC/xjXEQMrqi\nshwD2tFV2ZhxJxWvZkbpEXnqxG4qKBINBCbEOEgNG2KsVfV1zLbqe9gQWQAb\nrORbhy0+zeh6SUAxBzljiYr0MWKZ5IlPAb0wpikKUGamCfjMjtubkhU8krOr\nFBtETHL2Y6fgFwaj06qToezl9ofK5WtHMfJS7PwAirAEonns2quX4emrR7CE\n+rSK\r\n=x4xr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw9oeNGD4YA8Sg7uoP1z9hac0I9SAT/kqJri75HIyw2gIhAPszBdQcFC2vvka6hIHGn+iti1xmXyksypCE7IPVXN4x"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2899-beta_1566591946470_0.6563815046483432"},"_hasShrinkwrap":false},"8.0.2901-beta":{"name":"meetup-web-components","version":"8.0.2901-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3051-beta","mwp-config":"22.4.3051-beta","mwp-i18n":"22.4.3051-beta","node-sass":"4.12.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e177bffc4c147f8f16e3fe61d80097243e05571e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2901-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-a7w84QFJPtU9Zq4H2H988m0QbhB6IHfXd8VLGCx0UMhKkbV5MFaVZQcPzAS7Mf8u8BcRRFgUaAy/32TNRYKcHQ==","shasum":"0a3a3c7ee6fa290e3021420779e995c07aa1afda","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2901-beta.tgz","fileCount":605,"unpackedSize":3025217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYGeKCRA9TVsSAnZWagAAHrUP/jxpRmKNpAK8i+nUhVQX\n2SizjZbPN5kNfgt4GXJfMS+wq322UlLFN0UdGkyhkD/l92Ody0ZodqJIu8aM\nPbId94HqOw+h6nkfO1nUzvI+LDp4cc1sNSU3ijJYoriSFqmXn3cA7rWUBVmF\nivLQwFkXY6MYf/ELJQ4mzbiMKbjI2Bhh8QaXupBVq8DvVffuZFOhx1CN9yVO\nyaDy2nE/qPhAh2HkA6Sqv2iOdBK8Mr9aqkmKc80Gy+wXh7H4Qt9K/z2ReTRG\noiYoAf4q2E3aGba32lu2oyf6tY9IpmAS41XbHTfZ2wwEMRsxV42S2csHOryj\ne6kREq8Fijz0DLj8pOBxyT9A2eakLwsCQe9bPsRF+UfW4+HXN3olNEqLYJy4\n9d/Z6aqKilP/lFmOE33jgKm/UeIlmcPnfyomU/8cLixZiPuDsTzOm4zcAU3S\niAmo0wXYmSBD20SZgKgKJZd7kaZdYKcKQPBu2S0DrikM7xMGo84+xZnXsT2E\ncyAsUtiyJ2jTI6GioWd5gf7YN10Yt9Fj7P9o7Vu98ve+iLEY8HRvM9VBR0zn\nsuCTwehK8dshvPMltF9Ox1+8vrxaEpuLLsjjtpGy1LJi6J8pd0DMK2UclvQy\nO9pkRyqXtS1KeJouCebtLIQ/MEfFgAGNYFYVrORd6aozFB/WLJPWaCswfaTQ\nFk+o\r\n=e2bg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8mH4YqV6O1FjF91yawIztzrjdrJ29UKXkm9rJGFUtNAiAsyjIKcGSE/0jr4ZJUc1X6tQSeTGAdwappz/WpGxxPzA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2901-beta_1566599049751_0.14883654510183586"},"_hasShrinkwrap":false},"8.0.2902-beta":{"name":"meetup-web-components","version":"8.0.2902-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3053-beta","mwp-config":"22.4.3053-beta","mwp-i18n":"22.4.3053-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7ddfb2de09f8b4d1f70371da21d18094f963cebb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2902-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RB3/hAoTgDMksu+lFq/Xd1OnaltkQGW+SFeJn/7qEUJrnkxyvmzyQrIWP2E3UizBgw2Wms5KwyCMM+W5Csz94Q==","shasum":"97d0cf5c02db62d0135ee76bf659a9d1c61a8340","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2902-beta.tgz","fileCount":605,"unpackedSize":3025217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdY/GNCRA9TVsSAnZWagAAiOAQAI9+vCIAzIHSiXPbuyEV\nftrBY3xC5ivHpi7WylJMX++y3nVCeEqmSCt/KhwFQFC4EGjGkGXTRSXgxgGc\n58+fawb/o8biwJljpqNE74M7lO1r+Q0uAfA0O3A8SCBtNztnhr57q0qL5O9Z\neDMLf00OCyKK2d0Pq1MRbpIOzsQzpMiP4vCsJl81I9osyKka/XtHGSDMq9Cn\nEITSYz1IOnZzkcWrLmvXu3OwPmHfahE0GftzysMx+nWsqShWKPcZVnOv/S0t\nJp9Lo+/leHb+Xo6oMhqnsQiECJfc+SaP5WP4P4pVv0z3hhTP0CzEV+K3VNoG\n77Fp2qTcxBzGCMhC25mDnrrj6NqzYZj3G3cQwlsRbO3YzaoQQ8KNs3QTDD65\n1Ujo3O2eimge4RgEqBT+yqlmSakoKnCa9lWCsppaJYo4qm00bIhYpqmhrlFc\nFqVjqogwiPquLSREHZwAkBo+jCspTAbZE2ygTl0qbx1mduDphT7J0t+kkQBP\n0GtcpVXFjqtVAgRQLHO9bgvZrWY9yNd9E2/5iUDKnSkjpsLiq5zozsS7M8pS\nGAU1PV07LEUBb0znWmC9xrPXYV3T/VFzvxxhDA456HGWpShaSGlc5+11L+kP\nw4R1oGVfbSDeotnYI7cG393t7eg47XKJKDRP9WV4SQ1GLenArukJKTdViDWg\nlx/8\r\n=bTJm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA53W10zpRwcKPi58611T2PMWU9TEqHyAtmjErGqziMeAiEAnYYwImyNHs+jT6y3pM5gQiuP6lv9zI5mhI0wFfheQG8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2902-beta_1566830987223_0.8334175339584815"},"_hasShrinkwrap":false},"8.0.2903-beta":{"name":"meetup-web-components","version":"8.0.2903-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3062-beta","mwp-config":"22.4.3062-beta","mwp-i18n":"22.4.3062-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1df600710dd5ef6e467d30b07d39f1760c066f74","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2903-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gfqHxRnbcAx9Q8k534dOTRwPOamQZt0P3U0Kuab4mIPjukG/hdfVJTPkQYEYrZ41GTn07E2EKCRo3zub3z0KDA==","shasum":"aeb729b823e3b580f5bfa4944d193539406a3296","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2903-beta.tgz","fileCount":605,"unpackedSize":3025217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZBy9CRA9TVsSAnZWagAAp6YP/2TEyl14qPrgOV9UtVtj\nKViG+aTyvJYk9wYe57W/CIyww9BB+8MaWr4tuHWoULIgqz7M4ty9Oejpahg0\nHxTLItLNwDgUtk3NtVeN5dtMtaKnvsyZdXtUT7tmbw63ip41+0Q5VT6XdEW1\nCQv7/laS4GM9Fxk3bthEsq5ISdMsJpjoGAvRJUnSULMcbaXxfJEgwz6yRH/R\nQFbwqac51YxlK/IBOB9h3GHEj2+4wHMCFDqDLSyaszfkLbNjXEj87WKayYTR\n8M1ZvxSBDZS2vsS8HfEzDlDkeueHP3l6nHHqwQtsi6mllKQg5AapBEuqK4tn\nBba+97LHeKB0qZvOu48rxxKPu0U+zaXWki+Rcc87hEDDNQ34Fn/e2Cha/0RJ\nOXu5owhiNtStlMAv1inDVcZyJLmtboAaJnRUxdK7sVb5HcHaNjWvYYZsKuJC\nie9kBHyz0nkA8I8mKL8mRhQGj4/O00AccSKaUZT/LXVNHyglQCjudba7QQP1\ng7X6vH6i2cT1x6wKKXPKF6CSpHF4ubZMNQ4Twq58kc4vB+1qCoWL7uPaDWyd\nChjPGNkaUIuSK61NGg054a9l1i+LDem3LxU5IZskGHlcJD23UxbtGffUF1fV\nkzRX108ZR4gUbCVlQpfehwN/F4a8RU+5rmGjxEFzWzNBHFWcWWtIdbCOLprN\n222V\r\n=xBHA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/Gj8phmUyK/qquwCKHFctBEPI97ouSSlY+6S/m8Z7OwIhAKv64cFMNsBtt9a78sOuC274lpSxJVJ1bdrxOuibQiTG"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2903-beta_1566842044638_0.8329030738569476"},"_hasShrinkwrap":false},"8.0.2904-beta":{"name":"meetup-web-components","version":"8.0.2904-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3063-beta","mwp-config":"22.4.3063-beta","mwp-i18n":"22.4.3063-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cc3fed276cb317e8e6cbe584297ebca529482c93","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2904-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LaVr35xfmGMUIlpJiSt6+inOp+Po0uCyGdqoMrpe8e45LJrP8vJeqJ8fAvQHkloq09aIZgj8Oidta7K5Am2S7g==","shasum":"199ed5702db16ad57ae42c36a3343e0037516a1f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2904-beta.tgz","fileCount":605,"unpackedSize":3025217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZCLWCRA9TVsSAnZWagAAbsUP/RCI6m0EKJR4/bwpZSCG\neLog0AiCErqt5crYjq+OELahOwKV5Ry/GTRa2x0EJANWf7R4jvwuSXv1AnFi\ncq3CMEekCb9juAzq00POxg33z5OaGkhedicVX/vBJS32w2WByKki3PkKnuOs\n2+dOKGGANNtauXjcDBS/ZgSfqsTXRXIf5MvhyOBBVh+KsZYWGVekFmRE7rwp\n3vtJUEPW1esB8bazmBd+NpnLLhRY3lLwzKcjIZYryFatRgLwVaQFtbx1BBvH\nnx7Kp95sLgBkbjBBvaLJn7KSp7wH8rqAsvqqpzb+Yzm/w1371KVXr7bxooE8\nqfxcmr1oSYPZNVlZeAGLxeRo1tvX1W+NWe3pNAXSxSVMOrO1QRV4RjCEZL9B\n2HQ7igea1Mz/0nc6R+W6N+pnQoqQ7R8mq6TmIhT2YUBTu37z4zBdaFoGdFfj\nI45T0vSkZi5mSp/5PUzjIw0DL1lE33LJrpE50HKMIuJ4NByZrO2lmBjg44HJ\nDXXbSD7SfD9J+SnRnmwVx8xyXlJKw+OyN54x0JpeT3ug1YGNCcXYRA+OZs9X\nKbUtGpuEakRTSUYuYuIUb8ClNM6N4+rtZwFHXKLvZNZD886qXCp+m92EPtQu\nwjawGdwWQu1zZBbiPxYX0xVPBnmDOMFvIYx2WzzL/nU8CIdnRIrBLwDMKbKI\nCDCk\r\n=Yfwh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7hS6udhnfJd/BgI7AfoZR0GyvUfY2YbzGbzQWd8qtuQIgPs6Jj1DAZz2g5tmr4TLt1RwJOjwy3GIAmauPGRd78BY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2904-beta_1566843604732_0.060942269138640315"},"_hasShrinkwrap":false},"8.0.2905-beta":{"name":"meetup-web-components","version":"8.0.2905-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.433-beta"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3063-beta","mwp-config":"22.4.3063-beta","mwp-i18n":"22.4.3063-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a38c1c53123d63f76d850a73f32ddc67facd920e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2905-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HiFNF4KoVy0ac4/ni6GHvhwS63lOGOZ0036bIXSedz0LrM3IJX/uxnswYRL08mtNvWhm8CttmdpHfv8qD+p+wQ==","shasum":"60833f4aa914fc982e3eb26e8812eaca18beb5e4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2905-beta.tgz","fileCount":605,"unpackedSize":3023411,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZtgACRA9TVsSAnZWagAA2yMP/249skJNk0fuxEz69mW7\nqW9CPrWlwBMBrZyN3TCceiloRD8expDrqCTT3hOks/ldx2mEC9LJAnkexLe/\n/OL9KTkrqrirXDNurtRgNai3507jwUV9dq187ihbfBmf12CaVRcp1M9Pl+CM\nYTOx1Ntg1zrkpyhPf/yCB2t4LpaXpf8uMWq323mT13OqfAmwZvSdxFcbCH1o\nEFg+WL5mRr4QRAwv/lz5MV/yVcBU3sJJ4hNbL0HXg/BE6i3KrYaAiKoP7qKx\nNYejICLTnk2f6GuXL18hQOjPM9QUf8lMRDHIVr1CRFKEOQ8+rt/M2C///vhN\nGrZ3m7yBY4dFNGlJOgfastwb5RIX8h1XgOm5Sr5hF7xuYbLH7uWXF5bqtOlc\n/ZtID+peQyQqmTaChPVPvqv7lqrsIwKvQu1InlE8HevuL+G79CeZIt2yzYVh\nevF+9lQJNd9BGe4TvN4+xIJ0Ky6iBCtw+5RKvCy0FKbTXTDbmz8xx8+3kgAL\n5OJjbezhYC6dqyrvNhCwRpBADMWH4h2D9keAt0wPOUfDMiF86Jyp6+CZRguj\nuZ2D+zjB/7nJ2NZCy9E7HPp60wIGwMMKqrIdI3fqkoZBiKUdQ6hZSO1z1rG1\nrO22s6DqsWbQxUREAhdfSErbUaeCoqqRxsj0gY/wJOQZA2AX06x9kxqgMwtu\ngf4A\r\n=zqOG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpg6+r9y7BDdZcCQll+IeSXV4UDLiRX/wM1hu+HE3m6QIhAIqBWqJFYp4KjskW0VuO8fVnIIX+Ccuh/aTSIwccB+jq"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2905-beta_1567021055319_0.06250989537216411"},"_hasShrinkwrap":false},"8.0.2906-beta":{"name":"meetup-web-components","version":"8.0.2906-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.433-beta"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"99235e4c3de321517f0eeddbba5330a00ce1774f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2906-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-22Kw5hEUllDUTcbfO8g0S8EtXo+/uOJdm1tFS/NsAt6yfdoSaIxu/sSOvui/CIKy7j0JKfq/zs0vXtxmhuwhqA==","shasum":"d7b1d095d8b19e41ea7e6042493c008de6a51521","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2906-beta.tgz","fileCount":605,"unpackedSize":3023411,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZuXeCRA9TVsSAnZWagAAT6sP/2IG5NCvWB2RlQXaXpJV\n3amTloXieP/Ep3Uu4A5OG57vf0pMwgQFZ4YcyFHAos7Xm9Ueo+Eo70NVibdN\nIwVPxoTdv2IfoQh4L1yv+IHx1zQqZpVRMkBiuSWP9ZLZa57QFRIZMT+LPiHB\nS5MDl9UMfYSroI4AfJnyidypGStwj5c2AXMpFrwtGfLMtCK296q0PWfmZPk3\niaBvfqcTDK8yX207q7QeqWJD+9H55PyyLA8Df1reXlU/86R+asgDnyunveGX\nQtZRl0qda/LH55Ur1XhO/yDIZAxyGYAEecJQNY8zDipI/d/rSaZlR6GvtS1/\nyDVq7MrNxYZggrbfOSeE8aZ0lf194eAmbkZHW1u6QX4PcldyiEaW20oWQLZq\nFgOYHsUeKiV14Ukk/5kP2BD+2tKIfsfM0MPNPBOm8U6y8S+i2RGlMhGiCsl+\nPaWbhX1mUZIllYC2m4DykSmWWWldAO1wOvIUskx69CVNklz5v2WY6og90+ty\n5m3whSJxsH0eweAu3pBfYmMAPkW2tjHnrQ38M7diX6jUVw1i/PxTcdf+TyZ2\nwUKJVsY9gsjcvdxUbWmy0F3uBZtliJCe06nJTxWRUoWaeTYHu772+sTN771q\n8aaIrI/rrYDKkty2ePvbmBlFGja7ZnS/SGqcx/yHyYsO9ET0najQtBXRzPsn\ng6ZW\r\n=2eMd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkpBYUrrqFon0OtyPwbZE/IzAR2NN5xcXcx9if5qxqaAiEAmAQdUIei+pl9gE3nBTLG2mK77FqBymBlfsswL5hv6Eg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2906-beta_1567024605680_0.7634166597128376"},"_hasShrinkwrap":false},"8.0.2907-beta":{"name":"meetup-web-components","version":"8.0.2907-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.433-beta"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"042cd43ffb10993dd9ef3ad1a15009bac0d6ce11","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2907-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lt8DkJYEYB2RyuxgXHVhRsuRRg8UysZhPUs//yc0hjV3xcyhVk/3FfRAybxZ3mKo/D+EjR29QgBdBhG5SfO82g==","shasum":"1269ba83adaaa3dd129f43fc7feeaa23760f8ec2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2907-beta.tgz","fileCount":605,"unpackedSize":3023367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZuYvCRA9TVsSAnZWagAA8vwQAJQqmxWtAbV1icHiP5cu\nKhA/UH5mN/utKL9iqTyOb7EuhQ4F4Oh89d0Mj2flkguzAZQVuWuPFJnTQF7F\nWzn5bhiDj9CGqHtMM0QZUiUf+cjNPNCsFt7rfAyV/azbJpXiEPH6xHG36rPK\nezfkZqVh3uLukFPRpStm+VLhq91qrlVKoGxHa6t+cfoCEgEz+meBxU7s2CqZ\n0CJNJX79kW4AzoqDowcY9vIpYLpZd8SiUA63bxKLFly/PEJ0FxKeFO0PuckM\nHP+bMBa+4ZMDG2Z/jz+0mZEg5UEckP3XfIWw/v/PlOm0Dt9kfUZjylrC2fZs\nvhv3S0xXYaFXtlInTM+LH4GcUYpIh1vGCoD4DZJSxqCwZjP8KiSo+K11jO12\neLMtamNx/IcjgBaiyOix3ZxB1sgUsDsoZ+do9FIsND92fUqvoZjR6LbEpAvV\nlmp80zPSPXnABTaB58Kx5Ush/beFd0mKk4CEkMUp7GB2Rn2rrva26pxDgG8h\ntsC9SUa8At8j+Klrp435wD2FVzafM5T2dyPDEJ+arBnhanl9sey9/gETCw0+\nHNHDuiY5z+ysUpn+51S3IoWarrfYgalK3r2s+5avi72/XxN7mLjv8MkPBXHS\nijBpNf87dLNLxbfiPUpT3uvpj8XSyQObczJlAWXa1RN0Ff8F6/ly5I2/wmZN\nEdmK\r\n=IhkZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFiHV/UdzLTYInqCCa2wzEOb1jerEFEW/0+KG/yVRNsbAiAEiEb2HlkEgWjRCHEM2pRt6I1Dt+eK7zecm53pHk65jg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2907-beta_1567024686916_0.1633065591150491"},"_hasShrinkwrap":false},"6.1.2764":{"name":"meetup-web-components","version":"6.1.2764","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","node-sass":"4.10.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"7327cd365d89b4b379963267fef56747e8798087","_id":"meetup-web-components@6.1.2764","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+knyfWSb+Ljsv69FiZW/f5S4Wf66eC1vmIqPb6XzSGfe6e/mA/im1A8EMuSsNAoSTUgEDVU5bMPY0yQrVDM4mw==","shasum":"80b437f656c8d59aa0cca004e870d34669c0180f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2764.tgz","fileCount":584,"unpackedSize":2834565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbpj/CRA9TVsSAnZWagAAFEgP/iP9MQCcdX0vP0FVAeRT\nYUtGicAdzW4mJT+x1p3uvBRf/6qdLvxRPRXd390ZrtlT5HXKgGT1r6nKh0Xu\n0HV3mZgaB1TqEBZ0e30s17EICFtpe7bxWpoKOBJqU7HgXZZSjFiwbn0KQXBk\nj4ZvrRwhQuLmtcK6ni+fC/Dp74sjAvloOH+diPop/Wu84P8TG/fNt+f9grhU\nM3lrBcOhFgMIaxJ24XBt2Es1YPssvdrYRm2aAKJ7zxaVIYr9Vow03PTJ2VQz\nGQSjRu/HDcEZiBUyRu67YBJVqwx+qCKR8QNjCYiUpkN3pBKO2ghXIvNebFtG\nxLS0fCT14A3iGV3zdtGU7u+0WdDkxJf+Pt6zz98GvnIOoI0rURGtswJ/qfFf\nF4l5G6e0hbZT1XDM1LmOxvEYIsBLbgfjzFHnOeQDoBfhVbF10S5/5mPdTOzn\nLgalMRLxSIe3Wie1XNrtdTbfIF/XFybjzGlC2XYNkTLhVjpArMcDKnHt1UkL\nK+pVp9IMNcUd/xvje4wdYtHyz2hGL3HmR/lTl00DtfmF8uF/4mHaHRsHJXL7\n3ewaR17nb2VSFa3SMJhVbPWNdL++XfCnLLNB/4DwjIFV8cS7M/PNcWBis1b5\nw/mb+ufdBry3vZEW7/aDBDAXAInr5YQRukHZ2MBEHM+IMW98+GZbFsoIS0aA\njAQJ\r\n=XpP1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBizmeO5sV8YUIfjYf4KR1+YUEAKAykOtVcDOvhCSVW5AiEA8lb7Wbw5wDazsDNOrLLNofaRn9QQr5ZunIkkU9yK0mU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2764_1567529214242_0.4483042383791773"},"_hasShrinkwrap":false},"6.1.2765":{"name":"meetup-web-components","version":"6.1.2765","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","node-sass":"4.10.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"c739dd6b21bc1d7614e8e1ec65139f4042c31651","_id":"meetup-web-components@6.1.2765","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-294LzumPcKKpreG2lw6oZEeJUM/p8qiwPlnlnl3weg6yDU1ow4RF9Fjtfso5pv2mTmc9yb0i5EkAVFzPwXHdJw==","shasum":"b7b19dc5f040da7ff7f957d9b049948b7f2d799d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2765.tgz","fileCount":584,"unpackedSize":2901762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbp28CRA9TVsSAnZWagAApcQQAKKzGZhz7HBSej/DrKxu\nJWC/6t1r18BjPknZHdBSnhCeETpiYTo6OgLgP3QOIVU6nXyEuhSTUnz6YQSM\nureHNYC03ARu5BJe21UDdSatWs4MCzukb1fz5yEDuxTtz1gTqwsTVJotTxa3\nM7wBR9lh1kl9c3IBRf0HmrgB8ijrd/glWunMaQycYLWpKGoUIb19c1nrWmCP\ncX0VPAT2z9wAK1ZuXTsr7NegP1YJwYUXzJBt2h7tIxhjU+VlE2ULyzyGx7v/\na00bRBPkUhjbw/mb7PYbO0ZnClLyd/kokqryw236aFCIZXh+gB+v3gq6v8Qk\nO9TlnQOpjNXI+v10HXKZ52U5Y9tSpqh9BTy7ntkwAjDIV4450tnsrxonmpF6\nkNqOcpDJM0VcYeGhrqaDFJKY7Gb+cY0qmEEkQeluTeOHs/38TSAy2jqiPPBV\nVeCNng2mDQ+QmkWp1QuQT9e5CEr+el8BDTW4ik3UQsT+S0o22d5lkYhyXdye\ngfunAi6zRYESnldaM08Kt2WKJOVK8D2QM4V0Z0BhVE8G1TEajGVR1SpEzhQC\ns7d+O418uKhK6DzH+h4wq3+kZinBRWAuTedtAnNDB2Ia5ZFY3I4Bq7ISINcF\nD5BXvtlSbkrPSxWOIQHF8GvsSQnf1hpVdK2vOThvyJzbYOzq19vjOIAi5O9y\nVwFv\r\n=y5aE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICI+GTKDynQSOcSNuOcVfZ3zwXF8trfaUjxJp1Z3hLzAAiATeIAY4SBAUouw1qGY0MFHTU5BXgJy9drFeVe6JCYiYg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2765_1567530427253_0.33369689190230245"},"_hasShrinkwrap":false},"8.0.2908-beta":{"name":"meetup-web-components","version":"8.0.2908-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"357d6b258fb94e92f9007af47f7275900175b092","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2908-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-iIlK1AaoCWTzk74e9yAex3qzmL4lvKwR3SYzolRSyGQOQJ+K7aFP+vcZ8EzMJXyMv2Pt4AxR0xqZDtO6HIzyZw==","shasum":"dd9cdc288f037590093f8fbf5b5aacea05eea355","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2908-beta.tgz","fileCount":606,"unpackedSize":3449425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeOVBCRA9TVsSAnZWagAAYWUP/jGTE7lmcjYPWOYBU9RC\nj7rYqjpSKj1FeLUmVL5/o9xDtf5KHUmFEyYLK3II0HX3XYCSiWjS2zwWLJzU\nBkPOPdO4a95s1zBHjTktH6/HSNOaWgYiqg3rv7BoZmcbkQR/Bqg2ljtEVl6o\ng/9LHtJuZKYHUZNKexF+KlmTPmkDZHDKJitNr4335Ki45d1mkrKxjzIwxeB8\nmHaZhopTS+5w+vMiFQp97u+cuVBN3HWtFx0QilzjwqXz5y3ss4gZtT08Iu53\nZf2+KTGgkF1pyRelAW7uzY8wqQ8nfFs45tY+lVpTw75OWwZFB8HEbpbX9FjD\nAEh5mr1VyBh0fD8A5H2YchG/Hn+HNNMLjHyFqgJ5+0dJd+LzWhob+IzXJSSh\nKCif7gXLEFHL695hEa+HPF4/WiWGR0JDeoU0UqJ0Xn0CwUKTKDVqEHHOV3Uk\nbp4nhY73Atam23ImQH16toAaJbWEAblb4oq5A18qEjXo0n1Qh/krTYH5GVJ/\nvScEfh7eKrCpBoFJ0gDVQJiXWzXz+UtWYL2hmUJGM127X+yChdcUtM7pszKr\nC7C34wjhhrO27AJi5C9nUpQGcjx39mIkzlRDI4Y+SlLsThAjl5q+Hu2ZwdbQ\nqrtOryZETYUoAFAV07Dh5ammk3ODUGt4g1vIISnZeX/fdmvQL4YHOs9gFpih\neIeP\r\n=2SAu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBy7LR7XTAxLw22VrEtioId1D/HSbFcEKclnE82zBPjNAiAnicVzDyiFGCviU+i9+zljCeXBNZSmvWzLXLx5Je+DPg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2908-beta_1568204096704_0.4537201137528968"},"_hasShrinkwrap":false},"8.0.2910-beta":{"name":"meetup-web-components","version":"8.0.2910-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"045cd9d34681ca4044b73bd2553ff5cbafdd5e94","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2910-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-f/SwXYoY4P1Xl8ihCGqQkuW7h5PfeTBPjKf6JrHzFMREuOB8GHYzgKHXetlxiDJsqRfc1D9NRXd+hjGWc7Xn/g==","shasum":"66046c43174c61f06453f75f212664e80a529543","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2910-beta.tgz","fileCount":606,"unpackedSize":3449239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeRkyCRA9TVsSAnZWagAATT4P/R4Lhs+FgdT7tkmSmjf6\nRACgoWWz3Ar9QdNd97VMFazWM8L+QWjxnnwhUmVnaY4t4GlVlxEYTFdYAyxs\np2uuXOMLtCUhfdTJBxeoK2Zp50e0mdtVlT7rWtLXXPiauyLrAifteGBOmeSB\nnXvbTJ6o5G0xTuICF/38w5f0MMTWMgeiRwmacb0OKLjxshvjWLy7X2/10y2y\nrBBW6Uvi1LOJFRZtQ1MYpeamlUqSfWUchDBnpq6q6B9n+y6pJXgO3Rhw1dEX\n6gETyBFrURabHadkEyGonKkZM4R7Gp44jnywv1tml0zgVBQGabiHYh9b7HjV\nkQCUfMgTwLx+Xt71m3Q7uHb+5e/WXCqi/xak23R+EAbxZLWKIgsS3IvzwUiC\nYkT04gQ1aTsnMxcPhMOcpuK9C0VK5WteUSIAWWKpIok85l8QZPwCvR1siQ7+\nmYAdK95cEYw3YIBuCNUxEf+S0R/Rnjym45EM3UStNVw3FVbRfrtGw48lVCE8\nkhAkO1VqeI/QJhliiZNMe79AJH4KAokVHzsFwm7Jfoq9Uij9C8Kp7cS6D3Oz\nsiS8Sj+Vxm0W9YRRAHV4O1/5Mb3r0Bv317xDUc0ZIeCnVJE5IJ14Fwu9/wzu\naewrFXQIPqq0ig7X6f6kP+48/oLNuW0usF+37q4HjKh6LNCqpCkg9rcRWGe3\nSDmF\r\n=3PjH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIE4hWY4k4iSco/bWSqsA8LL00BECEeuuFlLhqsEjV6gIhAL9mMXP0lTzTHsqoPKIcYnwTIwgNujTEqFdUrk3IumCq"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2910-beta_1568217393163_0.5132449927577944"},"_hasShrinkwrap":false},"8.0.2911":{"name":"meetup-web-components","version":"8.0.2911","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9889024f33b5c141c3a3e2ae68b6a03fa3d5ff22","_id":"meetup-web-components@8.0.2911","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-IDv7SphixMgVLw0bSqGbH5MSSfKJ9jAnCdRb86mrtygRJcas2UOx+QazKLs5+h0vZn/mwO8bR18937Iv8MhCLg==","shasum":"e40fa0a44d74d0dd4f8de7cea4bc6cfac9d77ecc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2911.tgz","fileCount":606,"unpackedSize":3449234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdefvQCRA9TVsSAnZWagAAEYMP/jSErUWdyrJbnXNYwJjF\nnNfcUPbLtOJkk7getSDLzV1wyPxCYu9S3kDcEBQMI3KDejvQ5Kx4EFC+9chD\nXOSRz9OypSDJRjLl+pmyBvD1/jzW3pD9N6mg2hlyov36ioshg+Wlu9X+oxfq\no5YPo3jP20OpDzpgEfmq7BQsBR+1FI3lpe7cezJQAQgPP9MFcuv4e/q7yl3/\nstr3Fgil7/6Retrdai21vH2wSi8BPlnEpa5V+btfELfY/9fupm3U2Y/cmj8/\n+wKrIBEH/fiIqNZ6E3weJaHN5ybC2cXQuKo73h08jLq0aL3JyxhYwwgGOyOk\nWPykcQsjlnQkZuND5Fx7zp6aOfq59g53JWhWL3LAhQBCakI8uXYKonF8GytK\n+UZOD12ZkP/MSzsWrEi/meIqt4H8LRMzaCxryhiHQfpwkClEwFneRV5fJYHR\nbUZyE5EvFdgt5QNdw8CVd93+1RbpHJNxdZLjPO8b+v/XqRqSQE6y/EsE06zR\nRPraKkjByOuOiHZP5Txk9SUQvkJx2GVVvtMJCH9KY9Z50Uy9pi3iZmEwC/n+\nzn4nYF1P9XRyh1jKgevVeaKM3pBfIfcHEHbaCJK+Em8L7ypEeDIRiTipS0mU\nXwsE8LYmV8boNYjJY54tBlZEnCinl/yoCkAOnTzWJShLHZU8+Lol+38Uwlhl\nXVC4\r\n=jQ73\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHPh5oi86EbvMQd6UH1vjR2Z33CIucroCgHIOIdlm3vBAiBYQkRBlNXk+9CYu0g6lKSCTU1M2vrUf5xxQl2In7nRlA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2911_1568275407444_0.17906294062821848"},"_hasShrinkwrap":false},"8.0.2912-beta":{"name":"meetup-web-components","version":"8.0.2912-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e7d74258fc4d12720f8ac0a47bff2ae402fa63e3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2912-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-2Nq8hDDxj8Kxa3EyYoExY9FkfRHuwWkSK1vsuNKvluwgS5BYPgyODNmNagVXyzjaYjbo4f6MvceNOjNuGkEJqg==","shasum":"3b1eddb014e0b53275e8d9109d1fd2b4ff1526ae","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2912-beta.tgz","fileCount":606,"unpackedSize":3452414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeknQCRA9TVsSAnZWagAAR/0P/15Verk8oeylKUl+ZxVq\nb8awTqsOjilrGPIfITkN/Vx6hHt9YaiqJbBGvsgGrgf6bbFF8VKm4rHqgybV\nmRxN0oXmsQXTIvNEmvx6jCZ5NCqWAKWkNaW912xkzJ0uISFk6CAjoxHGKcu4\nCS6ikuFGPaYBG0z7NdriGAfs2u0qS8gJ/L39r2w/BmhbQ3cHj6wDbrSsmLty\nvQ8K5EFOZOE1NcXmer2xt0LPOMhe4HLzEP29ATvGC5lNiEPZMETk7AKy5jG8\nCfmTzpUAhW5wqwcCdLU6qpmIKfqdbS+5ccW22O5nbWybtzP+NzIQE32qs7SQ\n5GzTuXQniwUEPTmsnQ2zcuvbZS8QHbRWGCgWXzZFjs3kWesgRtv4oGbCexfs\nbjI32KSjq6N+PtOg+U+tQk5n+737Exx5RsUzUZ/jeywl+DfnTz1YZRTheAOx\n74pEQ/G0Wsd7I68LD4lgBmHutHd9rPpeCy5piXXFdb4ZchksdnJFvBMzvkTt\nsOGYLuue+0E7jEPBQjBN5AlwOaxS0anF1nTpkyi2Lb1HOagN/z4ou64OEtxs\nS0rcxan9NvTKhK6mvnXuxI6TZ39AdzU5vp6eNbslm/koE8BjNFqti95m1bdq\nwHDtZKrmxoV+T/mTafp4v/AcdzhO3sRZ/ZMr8dxLxvSR+4e4v7lw2m+3DVJi\nTJSd\r\n=u+PU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG+u2q3IjrpZq4ITzxPkbm5PgAPYmI4wQ+Tr8vL4GA9yAiEA+rO1ijy06vUi7omqPWL0e1EDmw20grLmOOAHulOkEHQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2912-beta_1568295375224_0.11299032529940867"},"_hasShrinkwrap":false},"8.0.2913":{"name":"meetup-web-components","version":"8.0.2913","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d16f07e58523312f504c33171a165523ae08c390","_id":"meetup-web-components@8.0.2913","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-rvUs9gP74wGIiktMob6rU8euns+aDvZoGwC4DoZ/1TsR58yNP673sGc+dpUc7KhE7sd4Rc/wFTFahV8hUyaYQw==","shasum":"90a6de9012661de21633cc6624f8ef3afe041a57","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2913.tgz","fileCount":606,"unpackedSize":3452409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJde1i+CRA9TVsSAnZWagAAwSQQAKG2oDzzMqAfU77vqJXQ\nHSiYZSBW8wq55xDnTpGeRqwNeR1CjwhHQ42OJo91dYlTGayTEuleveIM2Mwi\nSAUl6/yiYH5Pz1zbinXl26pyQnR//F25zlPDa+cigSuPpii7IAD5NUqBN0bE\nZMLMNHd6ClbiNRYvTwE2pUq7UicYS5fStcFCR1retN8BMh8yso+dgOoPcnfq\ndQAO1HU6X9XEf+o0DW1defcineNCFnvu7oZnXFySkAaXnFN9groNA26JcnZ7\nBecAJ0RZoDvJOslTyZsLmLYMsD3hdLxGGfGfzk4QKoUEusTb00Gmt16dc53x\n5hF9N/odPgeTWztKgmOfP6kWJe79PZyAV6S/xh4ewKTY0zMtEkUBg9KH8LT3\nc35rRuR4ARokegseSGooY1+JDNLp4/mvENv28aNz1BqyZ66IoI607Ou1xh41\n5E+y/fdwu/YMu/AT425QtXSxceuduupU9JPFFFU/awSkQOfOkv8aqN+h/K5S\nyQO8+itkuljGGAWEQu0vQ+jZwD5yI3Y24D9OSQWdzOuRPdpIFlRPD1aLqT97\nbOjtl6L/zCH9IV9hTUgO4UmLwq2u9qJ0KmFQiamKGEtlgwJfe4u+GcRmlG41\n7fwCbT/bGSBqbPAYlgBrv9D5rR6a7wRUCRPxqSn+jF0ib4ETboV+P7HOyK7S\nZXeu\r\n=1HpP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdG0jo1N2SliJCuC0NZAkS8wpNU2ieL5FzbYHctY69pAiEA1THHe4qlsqFmPqKQkM4Xw55oEcJul1BTTQL538i0J9c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2913_1568364733801_0.1033710410619173"},"_hasShrinkwrap":false},"8.0.2914-beta":{"name":"meetup-web-components","version":"8.0.2914-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.433-beta"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"107826eae2f04f9eac76c9af8b8294a09d9e9513","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2914-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-wI/Tx7rU3YhPCgVriXMmRTPhzR9faIUFUhKxOY9cmAR3MAC6u77lXGl200aXUKecCZDsfU3HDDWhCEQZ/0ZDFg==","shasum":"43029f6bbf4f4d4c79d644d69172278cca660ce8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2914-beta.tgz","fileCount":605,"unpackedSize":3031181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf57pCRA9TVsSAnZWagAAVrAP+gJgW9vg1KCBVpHPxi87\n2X853fLh3WrUpXf/aDWr/TUchOa9PEEIya69Jjny3yIaN9F7GtCw8+iUQZFz\nDXp40IqIQ4pvq/EDFUBxyeIwsXoyRaYBQbEq2MVWC0jsO1KwJ4s7AbHQ15pj\nzunIkw2px4sQHl3s0OObW+n1QZ9kbnroadf9H45l2/FF34YHDgYU1nItjfls\nO0JnDcgtEC5j+gPDVSKu9BBOpSJHTxXTVu2dIZXeo1PywmzcvQ83p2zrre4y\nCgRa4BJdYSCnoc/VEg3gcKxlS5oS/vyp5yz4L2xOe2YbcEvk0NYX9Cd3UKFT\n7cw8uwbNpNGByelSLPCd/XUs/OjfQIRCTWhjTzzEPG4/b0MRm6wE23Eo0Dpx\nbidC/A1Si4UyS99UZlVMufmrHoBh8xl40RmNrWZ34czIvxylCsVPP92YFyoA\nc5fCEafHXAPAFmQ2uomY6SBUtJL7sr64QaL/ZD7RAKFSfuHqEX//lDqOnKXe\nFU35lVlk3DecQwdEvQAQ4nNXyrHyZFSjS3/egWEFp/vk16vGQyO2DAE0jmC9\nQrhDjuUp7PIhXUNooJulaTvUfd3S9mvSpAUju4y+gwNRnQ/Rputz3yA0CI4J\n3o1KrYfswRqvVFRf67tvxcZJ14RYs+1zcY7sJGIIX/ReFN1tlVxD2oUwEp6Z\nPjQ7\r\n=hW9W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDchOirFYGn71THt/C5LEu1Kebgz8WiZ0leMBhvytAe9wIhAK/xRIOAZ2hstdO/iTc9yzQxLaSYLKbiecc7PLArOmat"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2914-beta_1568644840905_0.43563343694406464"},"_hasShrinkwrap":false},"8.0.2915-beta":{"name":"meetup-web-components","version":"8.0.2915-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.433-beta"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cd227051dccd7ab4ef2a1486574d7a85f1039374","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2915-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Lp2oaiQ0D/bULjn49+wgZH1d61k1rhF5iUFbHNZ5gJyYwznltoh7hesYPM0hPknIEaKME6lsGEvXoQ55BBkAvg==","shasum":"0228e6255f203b45f91e61b347f7fa94bc1c0c0b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2915-beta.tgz","fileCount":605,"unpackedSize":3031181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgnHhCRA9TVsSAnZWagAA6aUP/R2LbRsF24jZhuAgDeHA\nTKXAvoDsqpzIcMJCU+jhBH13g1r3HTjy0Gi3h2OSWOzswYFhYWFItSE6dE83\nF50+keZoUI8aKLDt1q71DwQiur/Qhs3J+RyXitfkTOIxua9/Vrb0t+0i+ucP\n/vKAjHvNwng5XeajQW1f7sfgLK92TH2d3WNwusDhg0sTe6gqu6F25AfLVjKW\nWcNJH3mv6ypCIFWfhMJdi1DDrDER/Ezsw4zyhhjoEvwqf8gzH2oIZrHfOpgu\n+Ix9CYXdAWqvoMOoaz6/eQqr0QqY0GJeddo7KxZroEBVHBSPqHzCEm2vPmd+\nSveNO4zxwEfe2F/qShpyDRFTFUhRAOb98AiiP7Sl4kmy7F7F+5NnxpuzmMzp\nQFqPp2x+ez4jVqFYQGMP5Yt4LW3GUjKYHTwbqoG3t1395jPhFyoSWLyutIaZ\nA9Vg7m2AuIvT4EgOdI4gOwOpt2XCLaVFe6q2D9XFwlUMO6eM772WT/71YnOP\ndRDr9NVaMwLYhXbcTGRcgTL2q2krNX6uAXIWhuq6PQpj69klr5dGpAGq5C7m\ndKbpsAt8UTOaR+tT4rsaZK5sDH8MKhyCaLDhJFBWnz2AylcQra3VFK/xzhof\nbNGFhXYZvYlvW1bkTiKWlhSHvdGCvlTmYP077J4s4SB4Y9kkOesBJ1jz/Y8N\nLaYT\r\n=mJF2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHOww9fIfAP5PsCEjxRiQSua6rafsU8S4dnw1YasxthAiEAnkB5MoqoIbDKbu3jClBFGjMOXibsW6RmUnyhhzrP1ds="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2915-beta_1568829920771_0.806346821389488"},"_hasShrinkwrap":false},"8.0.2916-beta":{"name":"meetup-web-components","version":"8.0.2916-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b48cc5b15af6b4358782062d2ff89bed16edb0e8","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2916-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-cUvmIborfR8ukasgUGXjT3KfEc2iqdzPrg5bcJgzNc8co+HMFi0A9lWWEZmhBxNtuBKxnzWGl20IZDWgu0iPew==","shasum":"76a7bd256449a81747f7ed2e90a27ecafc672fff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2916-beta.tgz","fileCount":606,"unpackedSize":3452279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi4oYCRA9TVsSAnZWagAAgVgP/1hhJOorZH5kYf9IzXH5\nH/q7cYLTPyoREsis7pXk9D73DYc1eO/QZ+OEHB3W3Qya/2K6L50surUHPGub\nqPfKHadmgWVpgHOC4YRhCyS4YJZSMVlqzjiZhlpUStZHiUAsw6y8udzObMX+\nKIt7J5D4yUl0e6pyrQtmTcnJqBxPC7cMdygH0z9nntVsaaXjQ+v+gO8PIjn7\n1w1VzGb1pLxTPstAa1equr98Ew/gCmFCPXTuU1HmjuiWRZi/vY8WPRPJ0bJO\nVBiqM71E1oTgbqLgjZSpom+dIGEK1KQY47/fXJbjtLzRBusW7h9kICcg2N4l\nT3NMbCyI+7KuzHd0QiHWzNtPUh7deONRKj3KfW/Dja41f5mICEjhRdHTJuNy\nazUrMY7h+T0CGAxTBVx9g+Tm6hTvEymzRzTT1XCxs6EhZxTBquCeoEl+i8uC\nFqEcZ8oNM7I4rCuEiLZ9KDRFAXk8rZHr4+uTWqq1AX7l+QsILLkw/gHt6hNO\n4pDzZV/yvMqG5TnAxUAH1/+/k2eesqW3jSMzY+FViO6YQOZGdR/HqdsJBKN4\nAVGZ1MAdnJN/QJv6EfYlX+jYkSNjUIMi8X0d7nnlnkKI8gPGKAvd/AOMUPrV\nHnXgJWgLfBZnfhjTAAzC4oj7DlHyRJS0xKannWvOUSTpzwDqaPGoqp1iRkut\nXAda\r\n=rhLv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2ouWN0jlBbccwBhuafEj0bV25LJbmy4h0HJaPVKxs9QIhALW+mZOEXbU4j8tkbFY/JEIZjSsOdoRbwuXcz/hvnoXF"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2916-beta_1569425943747_0.8665293700434904"},"_hasShrinkwrap":false},"8.0.2917":{"name":"meetup-web-components","version":"8.0.2917","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^8.11.4","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.262","mwp-app-render":"21.0.2897","mwp-config":"21.0.2897","mwp-i18n":"21.0.2897","node-sass":"4.5.3","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.428","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a7e84ea3ea29239b7c91e1729c4154589d88fa49","_id":"meetup-web-components@8.0.2917","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"dist":{"integrity":"sha512-NUSAV1piO8DpQ1gQ5I93WEpL7UDo5JlkKvm+VVDL/mfmgbCspHsJLs0rVoo2aT7d9ZoLi03ioVT4X00fsXY/5Q==","shasum":"5e051522ffd6ef61d3b69e4d4c79e776c667e846","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2917.tgz","fileCount":606,"unpackedSize":3452274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi4uvCRA9TVsSAnZWagAADFMP/1BELeP9M6R9GprC5UI0\n2DcHCFWn2U+IRP9a4v/OT4hrzNKhP8fyMZu0cHis672x/hi4qizxLm8giK9d\nAvcuBAYO1mbwWsDM0wCbJEeyKASvM1swJ1DYYGj3UOWsHnOmWe5m3uV4qwFi\nbzVsksxSOXFgSQfRoB5KTS3rS9KoMCNxcG2jzQ7oVtsOlRL7/zjFk6tdzL5o\nZfD2n0BfZJvlNUgKHoSvLowv62HI0CJJck/NdpachJAWARysW7g3PQP69iu9\nCu1axfqU5S8Ig7NNkzjqsfkGWrae0KrlTDmBMRsCfkB0Bzoab+1lOnUF/rbU\n2nimSBVtBEht3s6NA/R3djoeWV4wZek3/DA6miDcSZ/k5QJIXWU4jZybY12F\nwYGMaACKA1wYaforOym+tNOTPL8yHEwzA6RAcaqsj9iobAmlOSxbLKo2l284\nh1VLhVp8a46W9/M9kg121o3ek0EnCPLMLkHgmj9LDSMKvnBhabI63CZ3/ap3\nJdclsVzYZRsJ6kC36MOnzbUPqSv8d7pEAWh1yMc3s5qSbqe8I9PwiqPEm6lY\n4XHDrcZVh4zWRv0Mdv2lvKaOT3k381OMZKNIcEVlNCDtE94zyHXxOrLAewPs\nunzee70D3RmohGnlK1rSuCvsxOaunyFDftu/0VOFy3NmWaIWTMPhB5EdwAum\n5X+d\r\n=b5+r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF9YjLjj+IMWlSx5/gdOxLBzAarNGcnMdo5rEaR50EftAiEAu6SxyGOKOn9ObXQrBL1K8aAZeiOgSvXhoHUEi0msFHc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2917_1569426351129_0.16021314024464384"},"_hasShrinkwrap":false},"8.0.2918":{"name":"meetup-web-components","version":"8.0.2918","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.433-beta"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.267-beta","mwp-app-render":"22.4.3064-beta","mwp-config":"22.4.3064-beta","mwp-i18n":"22.4.3064-beta","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"70a76fe463f6a687f2755ad36f58964531eedf73","_id":"meetup-web-components@8.0.2918","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2oz+vUWgCIffxgM/rU441Zg0OqeucExqy/OerMWSjUUxmSTXimEsF0/TgN65o+SbxAoahqyQz5zZMtsY/M8ImQ==","shasum":"5e9886c990a1aac1bebde83216c97ab1f43bd7ad","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2918.tgz","fileCount":605,"unpackedSize":3031041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjh/dCRA9TVsSAnZWagAAlJcP/iSvthqP0iHN4c90D7Kx\nIKc1o/odx2RpebtRcu7HstjY2uHFBuuSEnLMGA9UyxMWPMvYAR8gx1T5d6pH\nvyj2q05r29LSuO2Bt3fUG4x6/YjvNaUmoRBvCUeuxYMlDMohrfLO/+XUvBfm\nRrEQi7YV5/X4g5n/icWKh4Rzs0e//heD9pgCxq+wo63o3Dd8zK+hyHqI4++o\n52JKPZPxBL2yvMXBF8R/6CQTAaVG3L8YnO0zEqa6tPVDLNbvV02V5jS+hgqU\n9yJx/OVuLCCldwH4jmi915D+arIFdUlrjrNndqR/XUP/Q5R9CprEbSBPqFCC\njB4Qi0IdFlcRT3gZRPtp1XXtutH5yZRFpfY8AYVLbilKpvc0IA3Z/BbRBbMf\n8ZtPlP3g6finZ8alR5BLY/3jLXIfbNx5yJjskIJKwinYtEHuwfcaeuYfW59d\n3C9Ot1w3sPpkhhjijeQp5e9T4grvN5QvNUW6Dw5KQzL7O683qjmoJ4yLZvUq\nbvWRkN721Jg/A5mVLYGUoWupoTkphfT3+hVtPk6nbJnPvvDxiJqSc0gQQ5Md\nYc0dYa6o/pZOAujVW9dyNndS3WLetpFZKmkVqTaFuvOu/uTAgEf40Nf8wi7v\nN36uc7stVra78waaborFbckzZkR/98k04YNOh6xL5Va7/9iFbl228GV7C6RT\nr5/h\r\n=jjQG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4784YkqokzNrzsuyGStfMTNBIVEBke7HP8g1BmslvHgIhAKxKEIEFyMS8OuZsMf40+jvPU5zKNTMa3v3+Vx0KGkO6"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2918_1569595356895_0.48636466547871526"},"_hasShrinkwrap":false},"8.0.2919-beta":{"name":"meetup-web-components","version":"8.0.2919-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d92791d427f318c3f220d70ac18f8a70edd31d5a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2919-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/N89ohJpj9CitkBvRfTvVPrwvV88riykgzIfFsCKSLoAH4MVHbCqUETuRwlNOqbkVs9CxwMOzVwijE/MVeKk+Q==","shasum":"fe8a25c3cd8e4e7414adbdbe88b5e52ab33bebd2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2919-beta.tgz","fileCount":605,"unpackedSize":3031016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjiwmCRA9TVsSAnZWagAAiaEP/2fHb2T05IgIh/TeqoQC\n2075LHAQRUWA+95lGA3OjfId5JhJM3k6dSuuU6vagAQ3IpkGWQYBE603cl9c\no0i27jocBk7V8RFx+oVpbfy27wBwbdrB0TQYlHT8Gpqs/NSHuMnNG/c13JW1\n04UcxI0xslutD+OekzO+q7N44s6kpx0HwWSVg5FQB0BYTG+Toq+XNUYcbol5\nznNYAT2vuixI7+KwjeKGgKVTKEn7QpinBxNx/i68MF0da4O/1pxsd8VjfoZB\nDlwSnhLw7xrXMUTzoNmcMELW62tzLeoxXOEvlIHQZTLV6q+gAogaik4YE4ix\n1lHg1a/I0FicGcrnIlpFaKg3PjETVBiZPC0oKbPsj36szHi44PIHuw2QXmJA\nvNM8yJZy3BpTft2u9cSlMTuXzk9RD5LLYJwgyJnrSQ2715EUBK1+cjRmFoT1\nDONhoEqE84+IH6Os+S7Gbfa0bRGJ4iUIb00JlVwRuoSGshXolJduz6UZBGDs\nzNUN9uaQuiqQpVseJUWfZCI0y+CzD46R6By7y7Fd14IB7nNGamHdd8GTfR0u\n2hbhieCVjboKaRPTek+qt4FOQUqUrZUqNTA9UJvy85N/sxts3xGsQI0XK5xl\nZvn0i7+ZO5lXDDWVenmDLkJXnx/Tx5ocrGNzzY5ZZBpKuaFBofc1847zO3hd\nZGsb\r\n=SPLb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGUCMXT6AIcUQ5oZyglcLR8qWxxGbtzoRPeNG3CHj9MhAiEAzXA42ghO2Ui6jV8IWB9dp3oiMB4Zt2qkg/2NYINkvTc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2919-beta_1569598500392_0.1954759573337117"},"_hasShrinkwrap":false},"8.0.2920":{"name":"meetup-web-components","version":"8.0.2920","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"253b4614230de39f85d83a80ab7a062221591bdf","_id":"meetup-web-components@8.0.2920","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ygd4p+uGVaAx1STlyQqU9jv5gqkJqHFlWQKFhZfhI908v8sT2pj9hmJjiP+bW/NgSjLZAyL7gIFIc318BaWaZQ==","shasum":"7f56f8aa68443e6e3c3de92245fb753e3873260a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2920.tgz","fileCount":605,"unpackedSize":3031011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdji1fCRA9TVsSAnZWagAAGZcP/3p+Ah41GUdUQUZbIQHK\nvl60skAF2q0YIukIGIW4ylQPH5OYz0yHB2Pe7pRCPtyaJ3pNMifZdi3NK0I/\nV6jcWMxW9Z7EPzGBiA8oSXROrukXXUnsb3mGk5Yl4hKdrlZoTfCrht7MyOle\nyiolBLE5idyzKv02p5PPAC9Lbfz4o8oWMoCv3QoZLLwuyxN3jc4nLfIkL7bE\nTweeGk5iy7x60X8ym37kCtcF9KiIrdgqlEhaUSGp7bN/U3xBcgcCcuPtu9ju\nL5Njj+Eh67dTZCMgW0QrQFHPAV829CIJp54yTZKwFZTLthCST8ghbAKo0ufZ\nQ17Bt6H3Wy2XfdxDYdcReJiNj6XzPOztt/RbmTKOJsaleG6nt32OUMsFDHaw\npUuOBmffx98w8KKI/C8qBViA87M+zN5GnDhB6p5nSgi9PRR1fmNNK2OVpKof\n56xSvR4BmLzwZm8B0W7lSHq+upDsfxkb2YnAyUTohLmR93PtNPrHco4o6RPa\nGe5BZCqxCiCGzlNyu8A69/wVlkBbDAhOP7BEoc+kPS+Cx7He3eRIXCOGhDhL\nO6XTLe7dVyDiu39CNgXsHajn07s6GaSlAnNjQXxNOVXRhgFFBG90WeJOywlS\nuOLErcaQZWTlcP3YvwHAF7V/ezJuQI6wQrmu7M5fcqov7hd9sOov3M/KxeKg\nrTam\r\n=HvVi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2pdH4hdEmngSjyxu41kG5+sQ7g+fRVcR98mN6Nhd7twIgRws9BODgsQFmn7Lo1sDRmbSYNi+F4JhbN5h+uKF3qnc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2920_1569598814969_0.8820482284129989"},"_hasShrinkwrap":false},"6.1.2766":{"name":"meetup-web-components","version":"6.1.2766","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","node-sass":"4.10.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"ad2e6a039a0cc6032d6bda0388d2ff8307e71ec8","_id":"meetup-web-components@6.1.2766","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-J4iHF1ItD2wWFq2prSTD1mfgV+2DCAGotH9zdEaY/9S8oNup1ny12urd6fZgo9QZGvsQYAJNSuC3bTmtnPaucQ==","shasum":"203b71fe4d1f5145b48511b745038c026b4427d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2766.tgz","fileCount":584,"unpackedSize":2901969,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjnuoCRA9TVsSAnZWagAAR4sQAI1IEHtD4wlkdMU6aiZn\nb8q9Hlbic8zBORtTpbKskLBpdmY+Eca/VuBx3eiNAo1b0u6JMzAHgoU51anI\n0EdVIP2Lp3+OmkIfWCxqLr+9dI7pUnsZ90X7QnBzgyC7qqdDNizzG/3vWnaC\nDysvfh63lkEut5Fg9wuxf40N2oQ2J8E7wgp8/e0Gx9AuPyYsQH/1uPtaakLZ\n1j9PWZN4yJ+jlHFEzNsLLW/WtBTJyt1/GJFB3eRTqd41MvFNCkTg3BDesaVP\ny2Kc7sJUz42YPEEgrOnYSSbf2yvpkb6lXEN+tP6L5AawnO7e+gy2RmFd8W+B\n7MUbw6M9ZWHgiIALlTD9dk4BF83p7PkwM9sAA4Wb96V+Djm3LOQmvM/e0i7F\nrk+IBA0gdS7zmZlRPBrS/eKsm3l65vU6H5WonwmWZShX5gfA+/GTelqjs4qu\n3VTqvFSesCpUVJxVCtLGGD4VzT6NGWcbFfEjMCbQwIty8GJxVVSpWKbIzK1R\nNq3rm5gzDYT4ylS05rZtE8OuZUztv+Hw7hbUJqb5OOanYIh6H4bLr4PuFXLy\n5zPY7OOAfzqOsVk1ZuhXbOYEp+A8SynI1UE0c5wD8Ag3lpqLrxhk02istzQ9\nuD9t8tSSQrooqwF+sx/BgnuDMjKhsK9dbLyVztJVtGJuuDLL/tTTZSFcLX/M\n72w5\r\n=KZIg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHYWrV6Gs0iB1UNU2M8gBy0wYpTiDKKlOQJkHD6wa3qAiEAzLlpJUjEKRO81RdLMsAXdLuTX5piVxhCHXeEMg22ni8="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2766_1569618855621_0.8224711425720015"},"_hasShrinkwrap":false},"6.1.2796":{"name":"meetup-web-components","version":"6.1.2796","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","node-sass":"4.10.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"e9432029ca269a393aaa666715c405686ef7f87a","_id":"meetup-web-components@6.1.2796","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Lt8MGYKVBYh4TmoaKwR4kTLa6AB6K/v0+zDP4PC/AKK+OBlqB6IP6Ad4Oam5pJhR0qUrMKCZSU9Y5aImDlSG3w==","shasum":"f72d4317f152208096537a6f19389a77cfbc71e2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.1.2796.tgz","fileCount":584,"unpackedSize":2902347,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjoC/CRA9TVsSAnZWagAAbMgP+wWKUVDnirSbKnDSDt6u\nzVuPVtpsJ7nJmEEGSKhTskEODk2SChQj4d+t4Csi6RvjjVZ/MdaKmPsG3ZnT\nB2W5U0A0SUTDPA4Fme0rmjXwxCrRZDI/6l7qmFR31H7hiS73vgiN4/R3+A9d\ngNHIRSpxszYKxlIJLiA0sTE986FBUMgXp5vsd7vERc9+TUqosBczPj+oSUYz\nF6o5hOXOORW1T1GFpOAa6A/zldEt7n/sE3WOhIe88h47MV279nOG2gFeZaNZ\nyWhXaEItHwR/a3H7NAGMDsMPClABtkqgIyXl9XxQRhCIlrlmgt2dJCXKQlPL\npiUGiv9IN/AMkRk/a1lf9f7myW/+eurUkG7NvgEYV9ZTzjMMiAU87qbSB9n/\nLh0W7Q2OVTyW6nZuSqjxRQ0+1P8QoaTZbDfNNUMcMQpaEcED3hbwJ8yJk58J\n/kv6pQcYOEU7AVueae6pB9d36Mm8KrJtAvu/62eQzoPC3r0p4jliEHufaPQL\nrsrMuF1di8PSFYVf4Jq1wPm3y2O8ZWB6GHAx6ob8tu/qhfSjdfaROhCZEM5L\nCXNDVr+rrvVomh/2jlZSc4emToM/PLHz5LUkCc+G7pxLuT8saoTaU4tj5Spl\nXWbnO+wNsWOF+33+Mp/9J7PVTVWXKS2z0i1Qxzoj0w0Dw1bPCVMoBy30qDOr\nov4G\r\n=fVd/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2j7Mhs0OA0yhxFPJcJOVjKK8VqGzJDRvXJqGAs2obzAiEAgKM4zXILEw+1llFmrCRsC6RAQ2JtShamLNyU/HwpYhY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.1.2796_1569620158676_0.3796648958443747"},"_hasShrinkwrap":false},"6.2.0":{"name":"meetup-web-components","version":"6.2.0","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.7.0","react-dom":"^16.7.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.425"},"dependencies":{"autosize":"3.0.21","downshift":"1.31.12","focus-trap-react":"3.1.2","node-sass":"4.10.0","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.7.0","react-dom":"16.7.0","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.433-beta","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","gitHead":"c2a25dcfb1fcd25366dda0d2793fb7fec2336559","_id":"meetup-web-components@6.2.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-WlWHdvUkRGahAZCwR917XlCeze+tjlOt+X6mI3MVZ7dxyebE+G6x+bEARVTt+oXqWf0ID8a9DRuKJ+wizolKqQ==","shasum":"2c982dd365f4d957c4ac6864aa0dede380602f0a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-6.2.0.tgz","fileCount":584,"unpackedSize":3478132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkibYCRA9TVsSAnZWagAAjzIP/iOuce1St25AUZuDhRgc\nOltwzgy8fgLxeln3dzl6MNW62bjs9a/4VkD3e2sfe0qP7QyKgJ91xXn3855M\nSQRm1dzhdCs60pahjHp+cL7JvlBRz0otIaDPSUN2KyCBAIoNcBUIZaBPrarA\nasXkeLBnLtZt7DZEHqnCrR4rP3gQzZzJebN7kglzmlUDxaK4avoZ0rhDQUdG\nFitC1aC1Gh+K5jbuHmHCSZ1rX3o8YDRuKlge5EAc9Ch1aCkG7g2zmXej0P+z\nC9tM17SqEkBSon0IVgStCWLLIjeUc6qBJH6cmDOUQeiYxz9YaTWQqeoCFRfS\nIdP/WhhyiYpIcEJ0tzM+0AjSn4+7BcrPvExIuO3YX+dcBJIMrUExuEVMjc/Z\nsR6sKqKyCB6pgPLQAildvqzF7jSEX9h8uv+FKBpzAlBHkYhopZDvvw+PDV+q\nYE8UrtUFHWw01jXYjBY9q39gXzgT+7Gxw9xgRF3Qidz7/OjaIdakqTWL5ydf\nlj+YNeu8GPZqFwvMP4apeupJVzOzv8+KNy9LPgAL0GmbqVJvfsGnolna+0xl\nW7JBev7mN7Tko6c2nwSvvE7BLANXWskpGY+BmAVyd8tL654HIalIV1vLfXzL\nfcMqRRnEQJ5AYTnY4XnfSbjIHTHOdlILCMnktXcr9q/Er8LpR6wsGkP3njP2\nXyg2\r\n=Ffdr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7pL9ivdeyMWlW+NVhXkfXdrvrSX/dZ6skwYjbbgategIhALgKaFyHRxYyzFM8GsY9uMrsptOvlvxxgoE/zO+jH0c3"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_6.2.0_1569859287948_0.595174006687688"},"_hasShrinkwrap":false},"8.0.2921":{"name":"meetup-web-components","version":"8.0.2921","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"abc6cf004b4a30628460339413f42a42c7bc89f1","_id":"meetup-web-components@8.0.2921","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VCijiyzeXnz7boLiq4jwY3n4xZrisd9/2T+npSCWO9bXAs3J9L3PuWIe1aU9bDYCibzu+Bru7FZYDMDIl+s4Qw==","shasum":"7e6c2a51e518d6aebcc79273986d69e530207b32","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2921.tgz","fileCount":605,"unpackedSize":3031772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkjz+CRA9TVsSAnZWagAAc9UP/0e8cTKAifuF1blo/qPy\nzYOLuAuShqFEgpM6DUgUpaNXsmcibKCsbNuYsgJuUaaAqWub+soxEo4nL32b\nkdfM1svZ6GEmyZaMeSEUYC3xWSyibyUnCv7rAPHDStCK/ulo5mkxAtbejs7T\naAAEhuta/VskXe1zg9ax3F7sV9AIs38JJvnacl2q5AiX5pVoqV6vEFY0Owzm\nWhuh1RF9dj69BDR9cFKwuG8rLJsz052HKRObP4yylfytkgI5ffydEjld/3Bs\novyuDv/yxeWYzOKlcjs6HhNB0v6zEw2ze0IikIYU2kYEwGBmXQaDN276dByd\nU2rjwWUIZf+sHN7I2t4e0c7qutQABtl5sOpPP1rnVz09wariwZDvpG080rVZ\nOXJgWA8EfBKs3SMnRFYuiOg5+C20mqw1SxXt0MJ0qWNaSI6XLNXQrQRkOAOG\n3WyQCDkS0ttyncsMuKelWdSSfjugA6qTb37cmBRYZftDV4hfM/Q3y1Y3kESr\n61+SeOR31BiCJ02ZiOiOhS4bzUR8DP/3CuNecjQLMy0RfQ7cSoLTP42Wrl+H\nUmIMqDZnBlqPizGpsH0cUVWnd+Xv9ZtdF2mhw8cfE8aazyDRRWJBIM7eF9ob\nfTqt8tuIe03HQ3TId5HuINVCPBYFQW19qIW7gyArrZIYQ82txHohvn04Eb6L\nfYFU\r\n=AhMg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAXoA4wVRb22jCpfOigl8fIstOqDfn5Qz6iGnUSUZJLwIhAP0+dnAAFfBMlLRNAkoRVDpNFjLNifQ+wb34D4sont+B"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2921_1569864957885_0.26393325182014093"},"_hasShrinkwrap":false},"8.0.2922-beta":{"name":"meetup-web-components","version":"8.0.2922-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.19.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.11.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6b4aa4148d9c0d727d437bcce33f76dfa76f6d23","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2922-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-llBzKTyObFSk+IN8CNbEggGWyVCnyx5UcZ0CWffFWC5uBmP2LC7cTD9klRqpRmeLFc2UEHrJRW8G4zIkzymFkQ==","shasum":"61d41dd3d6c6ad2c4dd2630265fb3eb6c792b391","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2922-beta.tgz","fileCount":605,"unpackedSize":3039885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk8FvCRA9TVsSAnZWagAAfacP/1MQsKSRpavUuFmE0+Jh\nkypy+FdzxSbfaaG5KGe1qlEJ3szJieHghYocByelh9Zo66IXoB9Yn7Uk52S/\nLjoPYnw04opB6bSqeve4OAKQv0Rg+2XDjPA+RkuuhYge30tABgzcCcR5SyaN\n49oi76PNCUs2zPkEt+JZF6XPA0oWwW/Au+DiHDY5yAvkqPP30on1+kWUWsY8\n3nNAK+4aobOECj2Zzz27EFgZElQYYw2qS+IPsJnXKTroABAxsZK5buuOp5EB\nGpVjYa6bMmhIB6eF5DCgvpZuU7WzRTGJzolg252GmjdkdfIVGU2TzRN9PVo8\ngtAZVV8AQJWpC3c2p6+fjllGJjNxOw/df8rSmVYoRsYyaXzWBvKIExZqEEzE\nMtRO/I+tB1Dg4GJKvJkpYejPQjqKFuSVaOXpXK0sML7ss3WjYYQ26l0gfrxT\nKY89UXomfKp9fMiEHnyQh8k2CUOtrnUOxSZwJez6IIo5lWX84DB2z+56vNnN\nQgnCZQKvSc/wwDE2AiYvf8fEg99liLCBFd8CyMrYqzS0B1nJ7spmo0YfUmun\n0C8YcqLMhCjCfQ6s3CGIbJW5rfV0bH0tly97kTM38UdYRuXGPwuz3lE1AtC8\nClg9HIL6Opi0WEvtTWjoi7jnSXwlZ8J4WrbPVzyopYOKhchzwaFSLrdkF110\nQ4KL\r\n=6Qaa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/m4CD4yrqSC1OHwAKz5ysZ02KPBh6lZURFODHkuSApgIgMnINddFYApjGEWUf1wB5wr1b+Iym2dVyynwpv+FzKu4="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2922-beta_1569964398740_0.9982937448727607"},"_hasShrinkwrap":false},"8.0.2923":{"name":"meetup-web-components","version":"8.0.2923","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.19.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@meetup/swarm-styles":"0.11.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5d9035c6d80af9a5951186d0cba21e2351030dcb","_id":"meetup-web-components@8.0.2923","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/5B11o9Zqqv3isTMcThzOtqkVjHRi3ilsv15LhRzO2fpxEabyojJHl47vAnYQkBCe9iNSLrcnAqTxYhygadBwQ==","shasum":"5273f4618bbc14e00b864d98a3cfe16fd20441c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2923.tgz","fileCount":605,"unpackedSize":3039880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdl2N6CRA9TVsSAnZWagAA9OcP+gII2FRNBKyRUlmM9ij+\nvMa3XmZ3yVbjWsfU3qUdFpJM/iUZKPJzIQNdKED+jNczJP2hvNRPhH3niJDX\npb36v1amzBcVpOcCkcUKV1Ym2n4kaq1URZaoei3YDDi9FqHF70tYSvpYIDmn\n4oxOQRAiIccmUfqNUYgwXcYCR/GZeFOmWQ92ELs0kSn4sRteUp6cHT8Ow2vH\nSv0bnPO4gp/qWreUbfiA5pqvFqVicWxxFSllFBigcNG0IjCjLMZx4FnSnyz2\nzgMdzuupLMhiBTp3a2TBwu2u1uNEBDPHeCxC5ervPDylZtJbV0nNenEG8EsJ\nct1EoAKusolItndTvj+sl7GKnTXrgULca8venWo9NTeQBMuZQ0fQsxbzsuY8\nngN4WSVtHeevGQGBC1DXsJHr8qOlZNP2TELF0JeJD2lKfxOUALvRvg4Ipjjc\nchtOFhIThhyZ8R+x9meUefRAoPdswZ4wYmZPUlPGLuBtTuAXsNsN+tDSHmsw\nwkJKBo2i9HTkY9oLhNyOjNKRVgjKa9sIJvKhOti5ZgusfdF7hE3U2syIPX3L\nOi+mq4p0xQIAmxSbh/naOfR30kstOGmm9gDslOV6oUbNh9QVveC9nxmosRNi\ngEz0vYGfoBlqkVjbPfYEJC8n+h4hRwi6ODabkYrdyKrbOaQGOqJcsJApW38s\nNF7K\r\n=2VUu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNOzLyGaSF8FZe2Ef6nunbIkycq99k3Hipipk9XavDXwIgeEO2lhPDHd7hlszBZsMqIh3xijzMuwGq1hHJoshJIu0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2923_1570202488707_0.7425248461354184"},"_hasShrinkwrap":false},"8.0.2924-beta":{"name":"meetup-web-components","version":"8.0.2924-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.19.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.11.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"750ef702be6dc5bfb32abc01c15290d5f139b944","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2924-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qyIeS8AVA4gq/fr8qXo2eg4123u4oVfPWpvh6DIuWmTWqk+uR0j6iFVe/luq/iAu2y59vI24vAIeA7vCyIzcLA==","shasum":"e215b84d9318d3c63e28c0e3fb41d77995f87113","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2924-beta.tgz","fileCount":606,"unpackedSize":3058601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5PkNCRA9TVsSAnZWagAA98gP/0DCIWXnv11jN8FeUHDE\nRSfEz1MQcLLkEaOjvI6bjTwBL45hlfifmaPP8ZjfB4gz0Sk2YhcW39IUCgQF\n5g4oXi3teKo6JTtNr8+jovsOCFFI6e9vZkTIN03qMcu00cQYsvZ0YDNnbIV/\n/H0/UqKngQ6al7qr6iOw3EwpI7a8rCl6vQPWfpQbA9aqI5+7L0zS6aJhnNWz\nu16DfZtUHO2grewAPKefJa+l3/gyiUQCnNhtWCts1+SKbf+ub+zYI9WgJn0R\nP75Hjlu1E/QZilrbtTCZuMFOpym2NktVDZAzNrFhnmaG8OqLcUlT9+Bz7/7+\nvoQoE31XMvStXJkEAdlHp4l9BL6W/Q5qlf+PbrQKW54S0cWpZucAF4/qDvgS\nNlDE5Im5Z7tEb/2BsZydYvtWluhcrWA1t7uU3Igh9xtv5WBiZmyhZZ4wBsLh\nGzcgQ1/8MnZE+ZZwDN3+pOlUsT9f7e+Cyv/iBUtZoE2XT8u9y73S+4W0q1N3\nMzzQloBsVc0T1aOtEV6ETIu6z3TT8BuOowUN/Ny51ScwD0NLyKYD1Ti3bLv8\nmPs2m+qLDHLj89JDbOQLROPjME4Kabc6nEVzx8fJRpgYidiJcCzWd/1laQfE\ns61q2twGf+5lu7M47LNv5tWvswiih29zlujc+ncV9LfWKRWE4S02DcAC1Zts\nQqNf\r\n=HpEk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEb2FQnWd0tFkLFo+WwjoRegZ2Q/O7/En4oEEZtU8yMIAiBVz/AFhInursY5hhB/WZtNbqXUCxaCtWDRg6FTBS/2gg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2924-beta_1575287053146_0.4540811820182915"},"_hasShrinkwrap":false},"8.0.2925":{"name":"meetup-web-components","version":"8.0.2925","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.19.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.11.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1ca770cd6119c35ef90b24b19db63c8fb7c60f2a","_id":"meetup-web-components@8.0.2925","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-40LBTm7XtQ7jdPBWskGdAChMftV4kUU4JK2/jqK2j7fECU0h2cFs5CxO75TQwnXXZiL44zJ33upmVBoBpyOZ2g==","shasum":"c7f521d0fedb49c59bf0793ba68dd2c675082d4f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2925.tgz","fileCount":606,"unpackedSize":3058596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5PzBCRA9TVsSAnZWagAAE8QP/2IAsY+aIGUvmxvjhEK6\nY73TEFq5ZYP70Xw1etGMFstw4MYBQLKQduo0SydxOAWuqvY+72wsYgwJOnhm\nyonsYM9SUb0ioHKuPBIvk1luKtp1l0a02sBPrdzUBru6P3ZejGLK6WP0llFT\nDL+PuqeS+R4sr8QPuvtPT0SH8Nf7EiFZ9BgKMnAzl7UA9SjQ9x71vZ/vwEgu\nmleD3srx7WokjKUylYg8O+lHxLkwqMmzxBFZ8WARH2G1HOh2nLJgs5iGdqZC\nbJB3XozoVO3htoXDV5dcO4J5DWoN2/Lrg/tK8nHrgxSOWsMyF2dwu9KG6pH7\n6WalXaj6X2y50xePG6X+ZUM8bvbPEYKMbPAttEx/TC3loK6CL0hA1sJWgUYs\nZ45Z58lfLuAFsMCJrTJZUWyyjJJpLhqt6tScsAkpZLC0aaN4MyL+eBBVBiNU\ndQ+Xx+e6Zijs9fLo70rnKcrljuffAoJ4GXZ800S1r/ocUt6A6/3ws2JnVLQM\nxHvfjvXYJ06cPpCGOqk3rn5lay15NeP0MLWpf6j6lJXd0JLh9BbJlls4n9Ln\nyJgO708zQ1REeJCt7x2pIBgRgwfBEgdAMRjnOSM5jw8FM2RyvqleUjMzFKU7\nMaiaLwcGlWnbXNx/KbMznkrEhgfkOt/nfojSTkStW2uzWyZ8gSh3JvF2RU4Y\n1qZ3\r\n=BwbY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLHUlCQZcqPgwePer49WXxB7n9/b+/FJafi11Ar+Tb1AIhAKiqTMJp6L6v78Ff+0c4PhYxRgVAgkSn0q846p2srV38"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2925_1575288001015_0.551068867913393"},"_hasShrinkwrap":false},"8.0.2926-beta":{"name":"meetup-web-components","version":"8.0.2926-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.21.1","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.11.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"48b488cfc19c3168bc240a0d5932e873b8e78b61","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2926-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LZdd4FYYhKS81pkevwQx0GcKy6t/5hf6UVTu+ERuneI26Lglp/veqFmyZv0qeleqqQTAhEu7M89tqJGNlIAu6g==","shasum":"e5b1debeb3423972e7fc99934354e4623437d119","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2926-beta.tgz","fileCount":606,"unpackedSize":3058234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6glqCRA9TVsSAnZWagAABfkP/jgAPdPjkFxOKREP36fR\nyiOpmkuF5gxX5CxooCR8Z5Z54o4un/I99VixKWIE4VlzDtq1FEBa2DWtVm+z\n9Ta3z7FhhKUDwu7V2jc9S18wkxqaXmWTYagvGoCAoqwg8jxuOMQaWU2YVSG+\njqvhWb2X8R2fluCwxJiZC1Xpx8dfbH572JO9+4C/7qsqRjgybVG8OxXH6t2y\nE8wp8Fr5Ek+2l2cGcPuAJjN8GZ2MKKVNxHVUnpl6jF/fv6Up6/uingxJJ4eM\nCXqrB3F4yPckCpRpdwcXKgBw3mSg05tnGoKJ3XHKlG5OPesZzJ43jUD+j1X2\nBeU/z7W9xfcljdxiNtuYTHqe8uOhs4wjaxC9sv/9CjCrGjobtK9XbXp3dmHl\n1SxYbyIytiB5PuzawNBBTow3LU8rsd5151ASVDAoMCMF0v25ca4UA3tDid9W\nP3K0SDbySIOJFI7wd7J5RCLvrj14Ci16i85K2XRmvr5Nx5FG9fEhMFzF15oZ\n0SycPYXLBLUl6nxDfUIR+hUP5hPClDp3iFIOCZ57y/fOlGbqoAhcqRH4YoT3\nsbR7Bxj5aV3KUtZJgJxmwseRHLdm27tmiI1Uey/vWS7cgOurvRVt9WO7u2CO\nthzE6eIGrhKHKL23x2Wji4JL0WPgebNPyGRiU01v5CpDRpijz2mARZEcrz5N\nWFlX\r\n=FTOr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAdHCc8wDIVIMSelYy5KC56Iq6H2EVhS/u4g4QJVO/iPAiEAwXgWDdutNuZ3YPIGaAXXt31rfoVOLCyBQVEcf7fo1yc="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2926-beta_1575618921348_0.2929021332354864"},"_hasShrinkwrap":false},"8.0.2927-beta":{"name":"meetup-web-components","version":"8.0.2927-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.21.4","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.11.1","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b1ec32a6b3fd2a43357c4f0f7f94f74135ccceb2","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2927-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-djtN4M24UrpLEJ2SVNAi7jdCZS8P4pq8jutVdwfhhJqLY1pePf6nZk4lcSD69r8nKm+ljZ77EBRhLxyO/CbIfA==","shasum":"23a6a88439671834b04a912e5a9dcdd4a9089953","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2927-beta.tgz","fileCount":606,"unpackedSize":3058234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6haGCRA9TVsSAnZWagAADOwP/3Zll4sOD5S6F577wQ6t\nPpX0w84baq8jdUp20zCk/ckdn0NFy9Y2LckTr7eLNMKrlrqtp15OSjp7Qkwu\nOxIio6/qqoUx4K9gMtC6ZEHIaAtVKEWrpeGHJO8L3AAiGVNliobvjzIWPZJ2\n/Hija0JP7Y8nB8ReuFWXzpM4GScYl1bqjItNcxj+Aq2M1qsfKBNhsk1UeSRl\niiPrvDag2mARJTcxSRacWh4wzoIr0Zf55fzVZskXzWGBmTyCK5BGEdzPanCT\n7zZb0TjJGOL1ZgB1XOtNUePte4R3X0LSDnQDCP8DgNry7u0AO36FzxP8PzOf\nLUscyJejTJSzFOEGKSNS/ZjM+DmFGSu7zh7fO79GblrRmi7dPqSkh7XUIS0j\ngndU4bx7+f7+lDNPaUN+WpnomphGTpbmtdLUY20XFSVwoz4K8j4y8o1BigsY\nki31hwzk4ovT39wy3hKgB5GQ4ZAWQH2wKjN9zUu8c9jzdot6k0KFiiVheDz2\nESnNEUTZItuZC9SNyFVgTEeHGdsNC5UvfmKsjjU4AfNQA5KpoL/84VvYAU9c\nOoh22aSlWU/ZH+ZRL4vo6BiilZvLE6jm94TvUK4UAdlz3Q7E+iUbgzHHoNpf\na93G9rvCIQxjsW/htUFSDdICFUn6Mt2p2amRqtD/RbKc32AVNHJFBgEMMh9u\ng81d\r\n=bOAU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKqbVZ7PRPISWrmrt0MTfiXXbnn9g1i8ZqNQW3tqvsDwIhAM5tzD+L3XIfCGAwI5oRED7J8MTl449+JjwXnEosjgLQ"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2927-beta_1575622277737_0.18909745390303745"},"_hasShrinkwrap":false},"8.0.2928-beta":{"name":"meetup-web-components","version":"8.0.2928-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6b97507f3f1e4535741ef0566316723a5742dae5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2928-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2LWWdO4Vh6nYKf9BOFBQLn5vqeNvWSNqXAvL+x57VOQvzrRJslqx4mVOpsMCdWOcTFQdJj+Y1VXszO6MutRQ6A==","shasum":"eb34f499fc3bb20cd30f61a664f260ff082a1740","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2928-beta.tgz","fileCount":606,"unpackedSize":3050493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6h/4CRA9TVsSAnZWagAASUUP/38Vp3FhJcPZ4WqK8kOK\ndvv683r8Labb+NJKtugsdmSTUQK/qe5KOfTM93OxYbfSUTQqyc3uVkIrtSoz\nub6yVA+IcFNDhrksuD3YLju+aKoGtc5/bBUC79/KHj/5OMxzSepfvfDsHy2c\nxTUxsZT14ccDOj42ADSkr24nV7p0UGwvvMlQl6HVMsxSUQPdozJnL4Y/36+1\nDdcqQ6JnzxbRD1T0+cYDc5gzLRxSMPlMMX/bBE04D7VaR+jtbHrA/ZllOh4v\n4bweMDhmCquJyZTzwIWwjkSvnVA9IN+iJUYla9lPic2GhQcUUI55Og6pWre8\n+eJDT18FENOoE0hig4rbEtA39pZl6e9EAuGQu4KyQapaPUuHx2mphxiMsWJ8\neQ25n3KlthghpNcoDGEWod9WpOdQGLlb5r59g42lDaeHN1vuJjJ5ulZklTN3\nZj2IHQGgk7xEZlJ/+WrAhqEabqLpS8aGCSZMpUQ/8jXeVME80Yy5InogBxhc\nDkzW2kcY9KJ9QTFAxmcLGFQ/9yvD05TF8yTuO1Nav5nbzWpIOGx4/TYuYPxb\nAFCDWukAGmqdGz3xo6Ryv/y4vfJ2/wAtEFseV8UZGLjT8G9akNRHLYs2J8A7\nS58vGdwzcVQpXU3G+gfNafWChIlFHnJqHL1oMLMXsjJpEnMFpdiBvnJOO7C6\njm+R\r\n=2Ysx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQArtiHN8TYudOb6Cu+kSJ9pyeGbWQesby8g3CI7bbDwIgGS/ZtSLO6++OwLIcT3wbH6IrB6uj9IWN3hTV15oXrAo="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2928-beta_1575624695866_0.4250670193681254"},"_hasShrinkwrap":false},"8.0.2929":{"name":"meetup-web-components","version":"8.0.2929","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"95e208baca7e8118e2b0f68b1fd8d312dbf2d795","_id":"meetup-web-components@8.0.2929","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-NVNO9j1kVOzns9hTCbOlNFCGvdnXmAULVe4+ejPdAuP/kspuFqU/u5vpoE/jjYf0dCni0PV+l+9sHbbi/u3AUw==","shasum":"0fb2032be969ebe10debdddbc85d522cf7e2dff8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2929.tgz","fileCount":606,"unpackedSize":3050488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6iiVCRA9TVsSAnZWagAABrEP/3RvfWsbl0HFpFE7rTzr\n4KH+xDiBy0Y5w3xryG7dVmJ4zMexe5M15jl4CRmY2JKbBBsKV8y65KdqOBrn\nEd/x5zjbBMnCNDUl486RNPdtq6M56TeWENBFC/HxbPy+HdVh6UFrXtavqqAa\nMs8D/QH97oMEP+8wLBwwu8eECVOFhhU+8SZdH01fGYoZZ/ZPHIEN01VafCFl\nR8EmjiWzsMOL6lu+EJ9uKr7bDuLVCWCAWHdbXEZWOqyCy+wFLbQVMvVncpjv\nIdyFuofS4SLrRNb//BJHkLM+1vZ7BnsL8V4TgD/im4aoiUk0XOYisxhFZGpe\nwEuLp2a1jDDX+NSfQT4WbpoOEQbgJMCHlH8IPI8I2D/kVaR3FxgiHv5PG7OC\n8oojkf+P3b0n+973PAkAabw0jhCpSGCKrwxvFwd22AfM9JfS+xUwaVDnXM/N\n9t26JL0r4d2JoeHz0Uf6LQtRID20HiBDa/pysoU4N8BNst5ju1sauDx7em4O\nim7OOd4Gt/H0QULuZFIxcRNIjvAy0zaHHw6c625L8fU6EdYPjIhfrp/M9szF\n1ZVi5+jKakPFN2WgIgv4T8fSPJrTusM6gPZxlSlGVSMq6TK6EeJqZRMU90Hm\nrhTM9AuR+hk/erd5zIOpZp4AN14/XtG+/5eJ/Rg+XoEcvDkS96G9zXnXVohb\nZPgo\r\n=uzle\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpf3yOOQmPYTcv4OYyPrKteEQB0zENLarDjfAUsnKJzQIhANHkxmWB8KkmK6Ig5qp0TnU5ameRWW/XjJKjJBbUGKgX"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2929_1575626900979_0.7725623604934275"},"_hasShrinkwrap":false},"8.0.2947":{"name":"meetup-web-components","version":"8.0.2947","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a1052b5c4cf6ade3e23cbb192639e72756e19310","_id":"meetup-web-components@8.0.2947","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6Z0qZ8NImogc+Fapu7qwRdIpd58XLZjULGiErB3uFhx5Us+le+xEV+wC8WBDLvbGbv/YArot3pvSJt7WWz80Zw==","shasum":"0c59b95484b2ad80ba782ace39ed8d36d58881a4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2947.tgz","fileCount":608,"unpackedSize":3050860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9blCRA9TVsSAnZWagAAv18QAJo6ZEQQuNk4WjcvSxQB\nrQOxsPxOE1bIV5AQ7hDSycK0CaGfMveeJK/sDDnkDaKU7FT6lD/Z/SoX/Nuh\nfKGPmaw/I3PhVLkZqGltHpwLl2Mpq2nyD785Ai94Izs7tqlr2gkMTYYpPKaJ\nceQg2UfKoAEQMK8jfS6zMi0ReDoZR0JUZM4xtRo4kY1DRbCA2AOWC1xxh1TN\nL8N8khsuPmePo4+t6YG+wk0VRKL0j1M6mecUk9x0oTmg9ZhWlQfuyRHBa5uz\nMBpH1mbHccbwfHsVsoZTHmh7jZEduMlAk2Vz01k5KNEbE3lzgy+BBdnOi1dy\naY8jdULgvDXPODcLnsHsYBIyql9UrvmInjgGVVX0hL8Gj4xvE2V1XF6kcDAa\nWpNpVJHMDIHzrUOSbaJmZMr1MjTZMvNORKSJSa6CyMUbZiGo4VA77Y0mkehf\numMnLfZxA6C85qDa7KKQwuFhKf6kls8qh0vqCXCkcxkGOwFzykZTp1yWZroS\n6gjYrffyuGbVFsMyUcIoHgrf44DveczQIN3nR45fEYNajxsVK05mVQknN6/7\nq+dZrjWCr3KYS3x06zHSlzfkljWJ89+4AVOMy+YWzI0E7dQZja3S0JfRVlhs\nVQYEI9UZe9ig7K0z44786jO4zhbcyRkI9ejz5+GT7WPyxNrP6PxF5ie+0BRy\nkGvs\r\n=h3F0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX5zBCPX5b2Cnp/tqMSyAyYaFOHDhj2npSBKUho4yM8gIhAK+NQBhR+2rspGHUhLSv5fx0kh2ANC7OkvnvAWHs7tM9"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2947_1579669220709_0.17876339641429695"},"_hasShrinkwrap":false},"8.0.2948-beta":{"name":"meetup-web-components","version":"8.0.2948-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"792c9882b58ea6843fdd30fe2029fe0a892c067e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2948-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Y6xxRNOMoMRYsdgqK/DKw7aDHOLkWix1bgMV1PDhW+lVVE4VERVXvlmOigqL9ngcJ9Bp96XBdqDvp2v2PjjjsA==","shasum":"baba290b48b57d34a67ee987b6676ebc64cd74a6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2948-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9dfCRA9TVsSAnZWagAAfu8P/RgRfFw3qY5miKml/pOm\nGzETZpD5/skAl7vep/yIj2CW9vJBBXPpLowxTBncGqE1s8Ul73XBermtUxsz\nStp6Y34/7r2zadZ0G/WAkScFK72Z8PBRfu4e/dfDwjBhdumK1Nsh/9vLiDSA\nbnvT+3NyjlKeE6RWyXDDw4LFbmgqADvqwMwpSk6OmgPwDA/+JnpgnrVVtmcA\n6nNIhfTpWCP/yd7nqkkWvLWuzvKYT97ALvCmxBs3E7Ii9ns+ZB9qcuhGnAfM\nbA1ftrarZNCf9KKMTeSb+dqqFwYaEyv3/beQVbzMqzKvmDpfaYsFhJOAXHsz\n7ZEYGDa0cqstfzpxmvi5y9TdZ2X0PPUSBAFTxCya1Mt3qF6F5a5uia8BLswu\nTU8BzujLVpp1aO5FkQCLy/FVK5jWR2BRASybDK+Qa4U1wJ0q5bj2GPSglImF\nTj6SSMZc9biQxI9k2FQ77zU9HlAYAp8sA6T5ruj8ouJVTNIYth90PuxZ7y0u\nphiCZ32rRS62yl0Spow+ZTvUUrhpc6Tx5HbyofjNeLvdAgJyIH/tPZ97LQUS\nSXpZlhtzOONEMXM1eAfasnDOsAjUeWtH/XlQ+LsE3T0eycV17/LLeFOolozX\n1tHjihYxk0XkKkTKPdAxB26vVeqhukW9vE+6JGfdo8UBlsBVsoMVqWgYwGrR\nOMWS\r\n=BIzQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHAPNGGUdoSVupzhTZumTYodF3ZaqYu9hjAwcssomGxfAiA2vhPF5EVTTR6TNM5U0Fsm68CDybYwZ99QhHUUjn2R2g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2948-beta_1579669342987_0.8253523558458737"},"_hasShrinkwrap":false},"8.0.2950-beta":{"name":"meetup-web-components","version":"8.0.2950-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f144be7dbda639192de3ce0942940a87978ae144","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2950-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-y3GGTGv88ruXlu6zbNqVu2T/4LqoHFapjynp3Np9RvCR+gfH8DvZuOf+jQ5DjHyevDPptkwJ55AeCMrAotQCtQ==","shasum":"502272b1a9902d5b70821daba5b7e33102e01348","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2950-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9eACRA9TVsSAnZWagAAMLcP/1wnYAnjg0AVQ+HCU9KT\nUxiQxCGXTS6pFwSnpmX3MRp5jN8VVGEhgmnuUEg0GXBLs8dcTQkgi1cwzPf+\nlCBMr0EXhjBVYNQNsyIZ9AmBngOIth6W3Ga4my9Qg2fUmRkcn/02HjFnWjQG\nfLUHde8kiihuswiK+WEz2PUHFSpShpYwyQvzxKFTYLne8EZ58DFVgdNNwlJc\nDJJmUa7mdeFMFkVveD/x8/MijYNCLkJ60v27x4uf857dZH5FT8zNGMLApbdQ\n77x5Muh6nIj4mxHEwiKafRgXf1P/F/TfHQLWNGkUIMJqXu9bIEMHmpXyz5Lh\nLZhwqDT9SY4/WV3DH4jWj9HXQOUy5ZNwrvTVrldMrZxPToW+HHB0oDX1HNBQ\nLBq5vcynwz4rEAxAXkJ+8r4Cw+hyScNTssImGRHrHdiN9Xc7PUd6gdaLmBh+\nvOc9/gqeKotb5713oAwdwGd/MzZ+V2CZ329WGU3kyTO74WNGH1FmYg9Krfm4\nFdKRF8x5N7jqvqO7zgdVeQkSGAVex4CIB4QtZFkzQJgGbyoSNe4PF8SRJWhy\niosUFvxTQ+rCMJ8zCCWr52uYEcwwCO0R0oEtwxeA8mJgEYWbGB8r8HxrYKcs\nrcAFoa+G7qRXw5AU3iWHLorjKkJLMps3N7YIpQOrzTianZm1o5bFJLRpTbQQ\ncAEX\r\n=tViI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDf4p2ZtS08bH6SlvlX3ZZnnWha9K9sZIgLMdW+PukU0AiBUxILxeWHNWX0v1Nja8Pk4Yi/w/rocLSmpmYHneA5Wpw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2950-beta_1579669376085_0.8962963552086907"},"_hasShrinkwrap":false},"8.0.2952-beta":{"name":"meetup-web-components","version":"8.0.2952-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f36c12b46016d9337104ac9f569f6578dccc4cf1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2952-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IRGHXy0Un52RUfgL7bXDN78JxF5+Kwpet0hLzGy878ceeQGmKasavANwsJgriMYLplBxAkQK08DQMrG+b5XlJQ==","shasum":"c2ced80b330c059802558f053742aa61214ca7e8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2952-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9efCRA9TVsSAnZWagAAy70P/RhrYcDS4s8a0c0kY3aZ\nvovcEi6puieTos0Ji4x1SOh7K2LaDoKUnWNW4+lV/ijGQ5Wx7zp7N52VzgQs\nKSqZd8n3i6RstRdVnJAwZjrLrGb7+H+2MZac1hZj0Y3nTvTXZskmOKGr2mqq\nRc5Tjdmy0hJoTMPm4n540G0XML+JAp7+JKfNwVN3zoGiHCapuuNk+b79Nuzs\nuCXPE+jiN3YW3OaDL+B6GzXDvhMyTkAI8eWAriuzRDiK02kX9wt/D0pTE3Im\n/jEP9Ru/OSdH/fmNetnI1Vmrk2Fud56XdsMayj1L15ltjlMixo3fGzP5ODXR\nk9JWVvuW0ZipdSGfjQ6FJQTeR0WdHG5UIz2q8nzFaR66SiifrwAjQCwJRw+R\nCyV/HvEy4oy+ZP+MyUZm53RN5wDzXXAahhsd6n8goG2e+X+1Pfet90HKbzov\nGaMLh99l7mb3dxR2d9uhVlgAe4J5usdXekr3M3hia2RP9jVxA2x1HBuerO5x\nnBKRaVufpqsBRLPh+m0qdV6jlYxOsLcZqhd5dFkrQTaT6EgAmvJr7UALrotb\nJ0CC4Alk1DZkwmOhNyzzt0yAQfAhgOolAyxSWn+WeIeMebTkJ7rFXREMf0ts\nz906NRYmo5n6pZKiZmqAO+HIO7gT2g51/AfpydMIUN/xXCO2Sep/jexuXOIp\niubc\r\n=DGJJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQkRzbs4ZYkYeJVJKtMATjHFE00dxiKDk8YN7vMQCwywIhAITDEF3d+6AfEubLioiNUdRTei4JC4Op3Vx34p4qZvmA"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2952-beta_1579669406771_0.1511357026486484"},"_hasShrinkwrap":false},"8.0.2951-beta":{"name":"meetup-web-components","version":"8.0.2951-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7924bd05c884dbd58345994a813353f0d1dfb84c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2951-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-wVGWivyg5EtrIAD+PLVhGNI/XZhvfbyn2JnBB8OmnU7miJXDFOqfv73RSuoBciDaL3AS1+g6IKwKFxMhC1rc8A==","shasum":"a6d3eae3178bb4a8219da5abfaad68ecc3ae2b1d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2951-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9fOCRA9TVsSAnZWagAAGlYQAIG23ue58TH3oMusNTwP\nPxOL0jngCvzPUOiooDM5+yGPrJznXqHjRe582pQJxcUpfvwzKDkITsg46ydA\nD8hkAGWUXKbHr52Qh+nP4Nrant49S3t12GL66YUCD5F8mU3hG2apdVQlxHUs\nOvHv/fsWjyT7+uJHEmUDEtHFgFgNPsbBWFpBkqPyPmNfFfERtbTa4c2lPX8q\nqBxo31ELYY2ioQzxpUVZqz+H7b04kuk62Ub9RVIoPaRtoG9nrjmQ8jaiVEpM\nf/j3jJdXrsIYl+osyu9HA8KVWe8hecXZGM1lAT7rjtkzq0fwRfr9H3KfJwFb\nt4hqIjeUXeifq9dozKDPDuuVHsYE3gKmqxkINBhkyajdkQ+MpAlnE48/E2Dy\ndPIwW0harvYz+5vpexl/M0VRfRl2iKN0f3mU1ieuEJVZRSMqlNL8bmUt/v5D\nZspNV21+hgordhwFh4NfHbAtKloHaJNgENdZzxN2zWX+icPjWXJbCJkU17LD\nfV/LtkfqtUhXltLnTFqa7grCKQJ43tDXdYSYsCsP2nowA1gGmbLU1pRfsIXL\nk4vLmpfXFg1RYgKUwyfJVUpuph/bJXq0KzfCSaux6aKxBGCCeM/ejzrNXAtE\nafd6/PnYJDxm7voD/GoiFF9tNLVpG0B4xWj6F3o7SuOxn6a+ltGeC/WkTq7B\nTKce\r\n=P10u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFk+x4XaZVQ9wuBUNPu1lOqOpbJg6havHnh7L2QZLh3XAiBkrgJ2DQ7+TxSsDTK1nkwDq3LeDAV8lpM5qd/OBR2dsQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2951-beta_1579669454175_0.9988475024097785"},"_hasShrinkwrap":false},"8.0.2953-beta":{"name":"meetup-web-components","version":"8.0.2953-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9ed7e21552397b77651c71d67e13870b67a80ed1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2953-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-zw+etm8IdOyO8yVjj1tPrC9tddvfxrqb0G/beYYxvoodU+hPUEkaP889+3xD/5bdmXphpu/esNimEoojyknLQw==","shasum":"9f5192ba3b22c73d7968c34251e3d8b0d64ec301","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2953-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9gKCRA9TVsSAnZWagAA39oP/0k8CG5xMYx54/QNNBjz\n8iIvtuHSp/ooIXTHfsGr55bRyFKTxY5wvwLLGZkNOHtXe/H6fVx4oSZBDKBi\nd7VulCy1eociRGug1I6MC3XKtU1mLyNGh3MwMCoJSOmDtQDiBV45Xm0m6/NC\nWtfGgeDrTK6YJVz8IifJtyractLl4HYMN7+pl//aaokPcLdpROihdYk/pjIl\n+TnGXTi6wBubrIEUtoM/lfuVNeCVdAqXScMEQrXmJqd4Cxc//JNKHVmQL8io\nyNDc4omyxydkE3HqpTLzVSHFpMfFzgu6uRlENFirC2U8ojtDELYQqNb0pXcD\nZ69sURLw5qkoXbJSAEy6FM/GrrVFgpc6lUp/5ORkC5Jo5BlzKC9KvtZOVz/9\ngqOmFYmNLbslk/8nTQ+jV1i1at535h+hb6m9mrlKMQ3Im5POOv82TCvDE9lr\nyIb8xZOnTInbMF1zhENYB9aT1cUBaTqdov56RIOEjiorA841hywVB4LDymnW\nuqK1dyYLS1mDoKF7wYIwMxsb+DimD8GoomeqfALlFfMI6WbBxFAv5NcLHFhd\n9qnY0LrrG6Qgk2AEPHpT6mpBB2yd7r7dM1Iy48riwX7NnV/PdT9n235DL/pj\ny6Y0NJ8YCmqx4OjBnBCAmHj5/0Jf/kxINf1uPDOlqpYAW217/6uHAapVEKT8\noJJq\r\n=qZYc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBvRkt0w9u2DiZ4dBTVQgzveh/D6fnLO/lxmczrL5RgwAiBzhjTYLfmX/In2H8h9cl3R/ZcKUj9jgN4lg3nfLQW1kA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2953-beta_1579669513961_0.9354974497039699"},"_hasShrinkwrap":false},"8.0.2954-beta":{"name":"meetup-web-components","version":"8.0.2954-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bad2f7cc0d29a3b9af02100750ad32bf1764c599","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2954-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-69+P/AplkBoxSqpmlVFlpsSaFjmGRcpSjkRQm9M8A3VbJnsQj7qxVBXu0OVc3zinK/ZGDsc47Rem73NzOAoZ/g==","shasum":"0791f45f1ba21681d3597e8190a8324010cfebf5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2954-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9goCRA9TVsSAnZWagAAsUsP/1OuSvzeKm9pkpJ8znrO\nynGl1CAvBF/S4mbXxpZxqTq1dl2pWYXyHMFVqHu6/ZDNHIxJ72ImWmLNq+ll\nDFNLg5erExWUhVZNyU0JlAar57YDDycXD2YRVxVxIQRIvYQSJ6FhsmeU2t73\nv5sDbGhq0/uP9cYMGt9gGVVqDOkSqQ3uCZa8WQZdkZrcMGGojTAx3aYJE+92\nv/JdNqdoat3WaY0vl3q4ax5mimK3pH5uPjB7tFiMjqBcpVshHDi/BxQp6H4l\nngMptHQyoCtnoP4692UQpn0uLhVgAq35+0ADe4FlfVxMTWMtmwQSS9T5EWAX\ni9rsN+lmFZe/bOEVSeFVmnAKFNChnH8X2rLVsarRsHO/GBHq3ReDHxYZcMlv\nPwvLK7mKPk2PUy2mNjI/pYCzeTjTxQxj08rKhSfCyBn9SHU4wFuL+eCa+b+S\nnktBaIRaDlhLRzBDR1rwO+z00VF4nEkgzm4uGn9bmslOuzN8VQa9SOaReXsR\n1SbR42++ZyN/5g4b3u/OU2CEmFojNX5bUgFZnHfq1uS3zjn07anlXNSckLpB\nWdGXuvGIvDL4YxAcC6WS25w2eApekraQKtYAafGV9EU+4xDvXbZfkHEZfruv\ngJkak0sfHIbpdtukTQ8+eAafeXpmfybCNTj40TPjwdX2WDdhL2KQjBAWzW7D\nTWVd\r\n=f5pb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwB8UGqR0x2PoaXVpOcEAvGm+06oqlPK8AS+aqSIOayAiB8z3T68TPMKJXOE0p98dPHpOeNO8wu9yXuqHWd/niyFA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2954-beta_1579669544397_0.927784434875145"},"_hasShrinkwrap":false},"8.0.2955-beta":{"name":"meetup-web-components","version":"8.0.2955-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"825c57678e4e2c4c661e7eeb020ceabb77821a1d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2955-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6+LnfdAzxfwXTjOZpE/cH+TsBeqawDk+U47G9Rr1thLgr6SN837LzLBZgwdYHZuM0EWlD+yl80LH9jJieHB2Ug==","shasum":"97c06039e1f7b03dee27aad427e34d6945af0fe8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2955-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9hKCRA9TVsSAnZWagAAs+oP/iM7anIIXS8WBfFPECpo\nuu3/qehE8sWwarmZhUBA0jlTDFvOR7s64Ol/LiedZPBBHCxdPqdNhz9g+41X\n7F6qRamXdubc/a/tMS+IJGVaWVA15fuUxD3CssC9E2GJlcEbdxYSesU6WPsN\nCjicQSSNofrzQz0jHMW25lFkglYY1IookoXW0DK0rB9OzfU642FQqKWsdvIR\nQylGQOExCnpEd+1xP6E+23E3MFEdi1LA+Z1bnBlwfzz8himKYufdMEtOpdoX\nxBN7tjH2Jhti1/IRX+WwmkcYns2dzrCDm/yyxpr0M2k8O44jcPtDeb3XCtvM\n36ZFh4ehAK2wRiOYcy4FmYcAL6i9ZDDuQl5IfWmdxNu4XKN9QUirwpQ2qNrp\nlbWrdlkfuuYua4ceC8leXZmqukIM9ixUfYH0gU2FBnbsxyB1YvZ0fDKP3riM\n4Uwt8ndKqstGz7DEd/5+7gIzaTFv/NuHvTcWcEomkldM8c1B8kaflgSKDL+d\nYZHefoiTlZu9C8feSu1uPc8RPWiX0NcbjaOXGIX0xzqP3oyCUFU372RsKRUa\nMQvARAsFUy5CuCDZyYbg0p13htMnfKpUrmYj/v2lciLijn015ExOfBul2Bsv\n01vk2HxoR6CH+nZiDlKbd5xQ6X8d0oxNf59muBq+kEsrFl7efgGqvUhig8kA\nZNsN\r\n=tT1s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBhu9OTiMa0Bt1CNfvTe7/g3NVh4QCTqTsJe7XJkFqCiAiBbNVp9x7gnP8GR4pNu2d+5zH9jxHv8QPS9/c6FvAtyOA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2955-beta_1579669577706_0.8400738737161357"},"_hasShrinkwrap":false},"8.0.2956-beta":{"name":"meetup-web-components","version":"8.0.2956-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a797d19683bd4bdd164ae1f4dceb571d7c7ccdf4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2956-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TihgzyyUzWeKmDsTgZUyBMl1wry0m2eJbzVkN+Fw5XHNFcmunXXAptcCYXFgOjG/qxQ6awuTXSC7UrqcoOTlsQ==","shasum":"fb7e3f16d0ca7f23966ecc4afe1209230c58eecc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2956-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9hqCRA9TVsSAnZWagAAXK8P/A/RrlVjNtC0a1G2NRSy\n+hVCLvAESvk5lBNqWwb6YZE0yBvWhLq4ZgJu2p3h6dvItMqxkc81MqHI/UrK\nw+NR1TODh0g3bjT2hTm545p5Xi7g0e0K5M6b2BPBUfhvcCCDdC+XMopHa/Zh\n/CeZv0p0mKMZnu6U8z7FObxuBs5pcuNEA7nedILhol3uP8xMs7d2bQ1qT+2K\nKUusQEO0AxJbHBgR4S+N7KUXh+c89rxtj5U3oCv17mUUPmpi0J0RPbLP2eCy\n9rcT2yFUBxpLfFbDks1X4Sn7KHEtC1n29sl0w1Cfm1G4JcfUfiE+22HiXWwH\nlhzrMtlJb1TBTOBjJ3URtCv8k9TbEwIvR4Svche3kJ2FLYXWjTprAHJDY96H\nn1zpQTwRJi1ijCLWRu0IKjWu+kLYoWcNpzrIcQlhkBDYM8GWMYe7iFV7a+L4\nPIRZDYxkVm4jn36SeWT/KoO8uP4oT+2UGZwfmKeIoqgJXe5fL5Sz7RtANULu\nBjBiTiaoTfT23tiQMRUDin5oSyyASlL7qaICnyKdaGr2xobSE6xmR/EaHV/O\nDS0zngILHX852gPNMu/XMe9TdoXzYXhbeyEN8gVHoeaYLRVE98wnpz4T6dyd\n45TLxP9RdjAguXRMFuuxs9pnmYdK2GlvIKBWO2CqBk3Wuk+b5GukASkbYMXv\nzAZ2\r\n=BfeM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBRyBHEg2nfcLZRWHzNvnIUrOulzw0Qt6YczFyyBIbboAiEAxVM4ZnjayCcjeNdkDnEaQR7Md50Z6HMDNBERUZPIC/U="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2956-beta_1579669609913_0.17363080063197245"},"_hasShrinkwrap":false},"8.0.2957-beta":{"name":"meetup-web-components","version":"8.0.2957-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cc786558c823453475652655cb805ccb8f2dc945","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2957-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-O3sACbqoAoK38oF+V/JfTGVDenJ0XjpYMLhSke8zoTszqgTGB21SvD7C1UjerVgxzklQBxfva8Be14UOUyJrXw==","shasum":"441d33ccdc11d9a97ccfed6365c6ce8ce0d2b724","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2957-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9h+CRA9TVsSAnZWagAAWksQAJt5T8pwrNPJH2yeX7NU\necE0A8hNV+6AotJyK7UjUhFsY7nil3MhjFKeSmm9pqIpv8Bvfu9TJ4mvxMpA\nBja6k4rjA2dhNI3NiMyZoRA69seDFOD4SnCt2Dgc9GAyyKIxs6fnjG8nzVl2\nuapNGVWb9VDjz0bkJo9NHmG+r/8+0jDyAUcO/LaL5NmO/eMMWdgXZY3B7OpO\nXOQIbXFy2Q3Nnh+5VFEcTSvD7WiujgGFpADacrYlohY4ZfQ5U1XyhjDjMlo+\nI7z4H93kf0TK4HIbMA0225uFsHrJeOQezRmjyDJGoXhGIEBecyx0g6ZXu48i\nyUPVC7JwAld3n8bqmbu+fEMc+hRJIdhSCHctbIEz84JInsJd+zQwUXrjuncs\na7XxeLJgkVQ3+wD3zxGzgLYJVs6hCUKSu4Q43XsuOjODkZyAgp5PxN9FXBK5\nNVdEBYUV+BkOE+5DBfhRPnDjrGt//Zd1z0BmNZ5gYc7njAgKEXp6xyPwS/c3\nAwfQEoCf7zXgMD/q9GrAzwbtUI+zflL45ipmCf+cY5i4EmA2OM+xQj3W4y81\n5BfnDtScPOVA5aavKpqbhgEGqDM/puWuavHRuG1152Q7wMnVPQkMFN0hn8Xi\nYH8G3sfRWkouiZDfqQDVtrtIAdvT9qkrbJHDsMox2p70co7Gt01jjCqsg38h\nXzHz\r\n=FGjz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMuGsngw+qhkelTHOeGk6tgDl2Jk6o/4hblClEEkxzOAiEA4gaOy1Bt+gHvJ83gR4llcfMuIe0D5iSxtaS/7gOJ2rU="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2957-beta_1579669630113_0.7807165907549747"},"_hasShrinkwrap":false},"8.0.2958-beta":{"name":"meetup-web-components","version":"8.0.2958-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8e72285aa1a366f4c8034f60ea52cb035456a90f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2958-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-n4GSyyiCk8QFTrVqvuSgKPFXHcjweriplVWxLZbK3BTfEDBha3Ba9GqkkTQgkTGUJSWQjT9HrIbZbw9kF2T13w==","shasum":"e9b2e8f9535637affb629a1e9a41282bd3eaaf5f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2958-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9iyCRA9TVsSAnZWagAAdsYQAJ5WPF4aaDqKDPsIRtrm\nQLC6OWXYd8RXUOIhJVNcPlTGTanp6y18S4GnBDf3eHCnhwMJRpiJh17AWLDY\nuN+Kc33jNpuQ5Im0SfRhZqFX+2f2vpFyyx9JyOFOHNCCKHpfPWEwOU8d7KKp\nljyUypzQzY2uMRDfFE9qC0xnJOkiePTwxWuFjTZAaBuTktQsiIwCUAGwOTh9\nvlOGjehz9rpTcz9BaIZGtxBgp7eZxycUkUJ7X95z48NEppVNtEW9xDWxkZ2R\nhFrbvcbfi5uJyPOOVVeysngq1Sm/VDKGqTksKs8rLc62msb8PCPoCETS5dDf\n4Zy/Zhdd1uI3QqDzjNSOFyZgJJDHz2azgBqRSVzNN4uQgvNHAV37bHQgWDqL\nkfavWA/lDFLuMtEBt6Y5VAS9qSDAHJgnqCQlwY/S0d87ZqH3hQIYH7EYVlhL\nbragNgvgEaRYB610QwDnjd35ElUW9fvRNL75+MXj9jBYEIf2/GySc27NRAEg\nL/mk8N8UyzPFagQDg+Gy5DgbkHQGpCZzmncn5yKLJQ877cUexVPaIGOE5cPa\ngUY2V9hGfPoCcJCmTQaYT4N2goqOT8mG2WwTYCNvg2tt2c8OsvXJQJDvkTt2\nYt4lC4ycsPni0y8+aREsr+eflv2eovuN196ApVvsBwWIPWkYEHAZbbcbkBnq\nUsN2\r\n=g1/Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCe+bEat+AvYSRiI1K81oETBE+VjenekFADxZoxPiVZ3QIgF17rmgl/t8czFLJVmz7VyhvJhnC712qvIr+RFU9mJ3k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2958-beta_1579669682361_0.5295736981974353"},"_hasShrinkwrap":false},"8.0.2959-beta":{"name":"meetup-web-components","version":"8.0.2959-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"040da8d6e40dbcd89918687fcfe6fbcafb6fbc99","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2959-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-L5e5ufY4PXdSTep5Rc2jYoR9Hp/LiYQF/UCZVqT+adGoaPfPZ1fgYtc9x7U9c/SvWwjJJ/7HHpxXX2hS1Nc6tA==","shasum":"236a84b917eec7534345e25050902c2c262c02e1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2959-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ9jTCRA9TVsSAnZWagAATT0P+gKQTJaDp/LrYqG6vzoA\n07bt9x+6/T42fVs7qaoXM1AnF6rV/ccthWMm01xBgZ0Qb0HvL2E7l2z4LvdA\nJmSwa850BMsHpuT8HqwFSsxCmON+DKpyiBuiTuxNIKaChLbrJnfFRjSNJMux\nWu8RXarsmDvSHdEuQcPdK1c16/QhNerAIc/p7xVb+rPkNtKqpMluqwIau5Bo\nIlNoIKC9qijwquRU/LgZaXz6jPhdkjaO3CWdncpZS2ySzUl8xaLCUYA9vN2M\n6RBsM0vplUO0TCKzCZLnKYUfjUcriW6/f/5DcBdYoPeWlIlPrO2OCctJtETs\n4/Id9qaUDPrRWU0bN/5lKIld/QWsCxr38CTm1nEX9DdYNAr+lPm5vNWM1n6Z\nsq2zjixm7bi7qqwycTQG7B0uVvRQlQ39rKO6x6EBAfyxau4F5I1MHpHTfXZ9\nn7D17uCAiGULNHOS8g8Jmylcchq/u/WbJhB0jqbI9FMp7vEilgfa7At8PbMe\nRr6P4M6smQ/Iop5C4ctVkScWnMOjkQR5xj7C5uEhJjRjK/6I8QA7+PzFlOqU\nHho3Q2m7iaU8igvZWS5PkvBEkJOoPBfo6JMRieBS0Axes2PbgD3YfMo6W1Cv\nZDOX0w0SQ0OzUgUiFTnP3upndn4QRSD5cZ+3VmRADhPcTqwO0fmHRsE5MntZ\nQ84s\r\n=zluS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIApg9eFCv33IG2X6scdX9AyzKOhikevC1jzcnV1FuN8YAiBEY+GnqibuFqQjkhecswSLCeQ9Xaj/ubes/cw89G0p+Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2959-beta_1579669715041_0.2592039293960595"},"_hasShrinkwrap":false},"8.0.2960-beta":{"name":"meetup-web-components","version":"8.0.2960-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0275b712e6c4804ac35fd597e54716f8d679b4df","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2960-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ur3aJCJechueCyE598qNRIF4F6OMKFsTut8rjvBip+Ow+pQmSVwq60PvOqKVGI5p+2G/hS99DMGhzVet8f0Xww==","shasum":"52d513217ee9ac8481034d8e6765bd1c9268d9dc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2960-beta.tgz","fileCount":608,"unpackedSize":3050865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeOqyYCRA9TVsSAnZWagAAGhQP+wVENfPCSU5m9FtcbzYV\nJ++YG+5xiOCKekOYOqKnCsbk87FU9EInCKZCFYpZjbRFxX3s5HYm+bC+4xnr\n2Z9LAQe5ksNQTzihS6d2t7vVzNdt66ayaERUGP3wrJ+2HOq4eSktSfUfdlXz\nDpLlzZrTunB0FLNXKm2Z/ic+9rLwzdOPFi2s9Z57mCpD/XljYinHcpxqSg4Q\nS6Y/jzKLTRNC30vangZe/Ilr2PM6W8zpJet4vwHzTiBcBHCwT39CnzdSp4O1\nmzMb19Ro8Y6pbkBO95agRWiVugf9sB0XQ3UZAl5DpQd7oX2g7IP+EbzY92+Q\n+0SmnSP7IhmoPWyx1U1T3Bctf1M1odkYhoBRTbzczxW6Qyyj+LFjK103HC9d\nvT2HkmbVjBJ7jEmbPvwViLDJtnp2k7eJaZ6bWr057y196etpW5DNxZNxjvHv\nLevqeDr5wMHTELIUYxMbgU3IjSGUn4FySHMVHXjbqcPTE0dPZEFeCkiWRC8/\nzImoV+4IJinxA0Z/P6CoRZ84nwe0A9AIt5zQdLsx7Yngq1y9Bqi+FZH6psOg\nw1M4WJ+3rmNam0cq7OEzR5Z/PAzJmQKCit2NWPYMgNQpFwQHu9KsH5OwPQyA\nZKDe+gTKZAPn/pIX8X4VTxbCOl00yq0vehkmkDWYov0RErLpWZy/0l1C8iUR\nKViy\r\n=mja/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE2ywz/VrjQwHQGtd21bDUIoIYaG5hPpkKoZ3elYSh4iAiEAxcK8sWDnX/yLkxp5z3ASLIT+43NdDyCuBzwbhSSVo1Q="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2960-beta_1580903573738_0.596633768851611"},"_hasShrinkwrap":false},"8.0.2961-beta":{"name":"meetup-web-components","version":"8.0.2961-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0167994e4334fd98ce093024509f03340fbf4f9e","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2961-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nYEspGF1YHZmxUVtoa4YdCjzBq51UyHPgowqC9foVlhamPvVrPlYY5HD5BaHmHf6Qy0AgbTG5hRHd7jVVHXW4A==","shasum":"01f55ccca6f5f199f829bd881f5eb013f915bbc1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2961-beta.tgz","fileCount":608,"unpackedSize":3047530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTsmFCRA9TVsSAnZWagAAKn8P/3Yot/fERuU51OhXBoJN\nhbnJ84g6DV4T2GyA3vS7UngcllLaQiypIlQIbAqS2yTh3SunYhapkiqWM+/P\novpyi3LMGEJ3fnISaFP9I2lTo0I1owrsCmB+jq5YrHGrIIIck3LLEphQeD/W\nrBtFDdGkIYq23sKCqHUhzJRqY5VJN2wd1k/y4uRZEDEupM6YIacbt4EWxOCw\n63qUkupw893Oz1zupTacs4ngLlO27LFPLniv8wmZeVcYLrC5j1UJcWcTTzMa\nwbDgg1u6WAV6yvKsfwtPz2e2Q02+OTD+6ofp+A0eib68wgmMje+6PnmqdWwp\nJTZSFlKqnq6HOROATMqzPq9dmIuAZMEj/4XSwjSPrULWi5jJrTAk8C/Mw6mv\ndZeCWLL0r2bwHj8fb/6d244ULnKh4Mm6XLeuMAc1EMrC/7p2RtFu/sPdoW5l\n9528rYLllstv16h8+CYIBG7uIzH1QCSd60wspYuTq0EwnPDAJlO4/tE6awQL\n6EnjUuOTXxKwc37nokjMqVvDKuFotNQSZs9h8CHmCZ52BgSVe/BwXblSg5GW\nf40HZDfFpBH1P1RrodewZm/NU0HR+576ZNlbVjD29lCAo+7kuJeINn9BqYEO\n+iG69w0kRTzjIXBvb2GZXczT4+/4b+1785rRJIJ2SjK0XkHJglccE9DGW47D\nmtCU\r\n=izzO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFvrXccTnAFiweLep7DwwBouHykIpZZrQxyQWHy10L4mAiAEXDcRxr2dqIs1LSqv3d/ZPHDHskQ5y8JTR1vV090cAQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2961-beta_1582221699655_0.5855858696534784"},"_hasShrinkwrap":false},"8.0.2962":{"name":"meetup-web-components","version":"8.0.2962","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3a2944cd6bd5a979d744fa504836f2ff8eb926cd","_id":"meetup-web-components@8.0.2962","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S5KNfbdvNUvWHL16oWDJ08L1lw/pmXja+v79TAz/4RAotOIZ4CLCPgN21eqjbQ0WH9t498bmBgO8JUfsIYuX6g==","shasum":"8fb6c2e94036f9a2cf25dc180148d462998c42e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2962.tgz","fileCount":608,"unpackedSize":3047525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTt0QCRA9TVsSAnZWagAAtocP+gLtzU8g560ry8ycRm6O\nXeEyBKbwLX2BHfdqbGDYLKtsJpZy8AVvx5ycpC/9R3d3bh/V6ZBznMED1xeg\nBDo0216GpRE/Vkjl4qHRzZ/mWQNDOlv9p1Nqu6175TrwLVZVm4PkmqPwwzkS\nME0YdXHRj/TdwXWZtlgQlHE5CfcjkRJtJT1ei7YFd1dX586MtP/11D4b1p1t\nhB5blh1fdKCozL0GnsFAuyVLpTVOrF/mRJt2DIcbakZLevaMZgEkLEpzr4DE\nlYdDQdPi5OlbG5nWUn6MJcYRrENCkksuccAqHd3InNz7HXCVcPvJzbfpUoTx\n0VcwmYnwJ1UnYJ6htrrM1Q7OKsDmnOdZ5Nn0w4WfK6ss83AcQlpG0TejgLTP\nXfjXMZtDq7hl4tMfzZ6f1q3U7k7pJtn53o8wzNvF6N0bdg7vgsBuWYi66QLQ\n+S06jAoXXeV1RK1n/IYJqq7vUvBxRQVoGQt3xoWLz4VABs5vW6XMFV7FB+c/\nESFDUgnzpsz6hIALCHBSvCzzqqx5KCWllRhOp/KZYyqNmfbgS5TbMqVwcEdO\n8nP2feAQNabLmxmfVuJ9gevQ/aR6jhfNKntHC2DHQkaYY+n37Kbh7uDxGKQo\njsh4+uyyBB/ekC/9nC939lNXCrSrjnOTgz+upYpuqx+PkN/gLX63QRd+FY1H\n2Cuy\r\n=1/1G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrdRhZV+yTn9MTBmN/V5pRbBstOe+CXC5tfvbqaVDFbAiBjCP8kVIv8TEbkQn1SJn8wcQqRMSHhCQmp1usDyF3m1Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2962_1582226703884_0.9725901980340004"},"_hasShrinkwrap":false},"8.0.2964-beta":{"name":"meetup-web-components","version":"8.0.2964-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e442fba91d73e3a00ca9ac6678f4540b2ebde39c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2964-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-89MwlRgx21G46BnEduKuFQ0bhupj1di1L076rHUQWQaJZcPzkvEc/AZejAQxdTUv5iqnLtW2f5wAs3jXg/vcdw==","shasum":"63e5ecad67814f3c049503cde042480678321650","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2964-beta.tgz","fileCount":609,"unpackedSize":3052966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXnE5CRA9TVsSAnZWagAAwZgP/RpiD4C2hoKQTpz5vu46\nEAGDZhXXjk77bQV+3TNfmB3NKulpr/cUgsBPC5AAx13vTRpISgyq8Ds09ss9\nBbtnj3WcrZqOJ5kmX+K/AcgVOn+1G3a/iRQjs+9p/560cPzkS6IBk1txm9vt\nRmO5q9ksY9FdsggW6CXhe6bVYVoaFwvDzpy14Ox+93TvKLPnlihyzP1Bqh+W\nupk5XOp4nMfk3njh4RtgcXTy/xuawV1X37Q6gF99MbJ7dzbivZxKKUQET5o8\nPcEjNlduvNL2uQCmzynsKsNorgXAUF+KVduhRQMiqA7iY4f2RKs9QqHoyVZz\nfZUReNSe9leQUX12/2NGjQGz8kDYwuuzsuUYhE2PVCCN7ObJ0DP5U6AUT/gx\nkS+q6yeJ4JmwLz1p17tBnAsYyPetjhf4cxtCayxfsTvA/TLrVRS+NLIX6dxT\nIAQd305WyCWROixPf/QR4D/H1DzwUmFqVZh5GFbQg3pBq3n5eq3VYipIy/jE\nWQfnRN58YZBeS+vfZrmWLz/uZ+wulUuJe6Nln5o5ml3T+rDH/GsJ+a6vlntc\nj8UXRO806F4ZgG7T/aMJGy3wuuPNJ8gdDP92pBigeUJ6A8m1zuRZxq17AciZ\nru/+jsCr1rH1jhJQNDca/ajOnRAiQylLva7/ZVzXjGZ2Kjf1Yi4t4nhQUTpG\nOoFE\r\n=dHIN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZABIWk4rPFyihtkY9xmyCttIHpq8nIS0ozbffCvT04wIhAO5TS8qWd74dacPRQDarJvjo2Qkj9gwNdBJRIM3xcJT8"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2964-beta_1583247673090_0.4621102759852598"},"_hasShrinkwrap":false},"8.0.2965":{"name":"meetup-web-components","version":"8.0.2965","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0d2bfe75abf2b68f4362005c860f83fb01f87725","_id":"meetup-web-components@8.0.2965","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gsBKygQXVFKFX6T7WAdI+hLEewdw0BbFAV805Z0vd02wsLLh/VqsdiulWCFXOQxZSlK9ll9iBg/K9KAF1ZMUPQ==","shasum":"971259a847ec5c9b42dffa4d1049817e9a92402e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2965.tgz","fileCount":608,"unpackedSize":3047525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzZVCRA9TVsSAnZWagAAUrIP+QA0W8JgPxu66oDxHFuX\nzMXsYQNxdgXVtw8n1kS/vyEz/2S+qo3O8TZ3sO2E1cqCXRKntFjEJTYXCQ6N\n970ubaSRun4zwiqNkbb3EIbH1tQ1zYYNIebfKArW9yIzpb+n46wiETxWroXl\ntKkUfhjqagJa9qbfyusIAew8igx28JwdodYnCophVux8pl9QXJJUAbaex7VS\n0vQf9219LLAo1xoZcWmdZP1BV4kSeTw/iXO2FaxX0zKyzAVxfqUZZ6Cp8ggq\n3QNi709ov44qIp0T66K6b5F1M34HX1q9hkyFwfE9LBagjfMoxl5EbzKM2lPf\nF1zYloNHtiEBDFyT+SP9fVz+RpBkNiQvbxC4G+rxnYr3O1CP5yY5YqN5jLCE\nhyzN/7bYRuf2ZwYGsLEOzUIftbubjqdrWXid9Qx4XQI7GmiK3O5IXd1KF7AL\nUdbeTqR9A1OKpurBKFcMPXxFBFRgt5HYbmmlCDIjD1GnfdNrnYzX44gxh2pe\n4ojCRBWeyW1jzBS6gOPwh2351uNwcEH9HSGoW3kfws9KqRnvOqhc5X9Kb5UJ\nJfqPFQYezSDTQuJZgckZCXXIpLP5x81r2Ydil3RudAccAmBwDHJ2aasvXNxB\nBDEea+mm5aC6qWP6f9wLoYTFySk0N8eFR6aJWzEHGZmy4GVmGrzC2mHGjAAh\nlWrW\r\n=uidG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG5R49A+fjqzKs5XZaWSgoS6/Igpj+/twRuavq3I/Ba7AiEA0K34a22u1jXvQT1GGNxZZomOEh1zpijEeiESUWrVkpg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2965_1583298132904_0.6743266159342776"},"_hasShrinkwrap":false},"8.0.2966":{"name":"meetup-web-components","version":"8.0.2966","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3b3790881d4404755558f4b297fb672e9cb432ad","_id":"meetup-web-components@8.0.2966","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-eSYB0PjzPSHKyRwH1qfEOFCDR3VJIyfu56/iLPfeHSzBpx0IshKWl+dGQhy1zUXKFp8ce+t3E0FjOb5E2OxqBw==","shasum":"4fb9d3ceedf2cf5776175bd7dedc515d27274300","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2966.tgz","fileCount":608,"unpackedSize":3047525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzZnCRA9TVsSAnZWagAALiwQAKJzbUGhxeEboBXEDthU\np1+0bp+u+0Ua5CEWyk2W8Nkar/HBsIRr8VM2i4XCwKPPz2l19fSSkL+v8reo\nyO6KXgcKFHfpmvI3BZzx5EixBlDs0pJGvtk3zwzfdA/Tb0vzWuE4cbn3Kq4r\nB26AUYB/9M8dCJtFecZbIRSZOjA1Ow8U5J896ZdvgTMmcgYIfAUODWch7rBK\n4n3gHs+FYQMMYCC+JogZPUm1qNyeW2tYHX/zgyCL30zBqszUKfQaddQYlD4B\nlGErBl/yvPYUf1kNFKZn0vYvddcantg369IBfkIjoSAdGZPmhfKl32Jl1PvL\n4PJQOsfb4m2HZIxBAShQbP/2pg1qSEiOsA7XDs851aQjOv8+3XVk2Mwgqgff\nl4v3bvl07DssjuN9Imgi+/SaK3woWuOzejFIMnfMt+BIhagWSOJ6zZhVSCRf\nfrRRWow843YluQhPmgt11wk3RvjKw1wp7sSo292XMRZlvN9eUC6XMHX4ArOT\nRvYPyjO8w1dB0XGSQant2Xa9TLg9dr8i1JaGt6pg2HYfohlwqw17PIWh/5J4\n94qj0avNgivEipqAUEnBWYuROmm3YePAtYrTZE6NGW9/ufB8iG4Mv6WPxE7F\nUVIICqxAnWNAWYTP55E2c66mU/XLYWpGcoPVOphO8CHy9gb1oEefLfP1qVi+\n+SR7\r\n=pyNM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDODLuUlMTboXls6TbCALeQejCqFw6kszRkb/WSTHYl6gIhAJl6uXEElIfg4rDopwwHXpt5y2/whILOFkdZJuJuCss3"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2966_1583298150814_0.27971924553617233"},"_hasShrinkwrap":false},"8.0.2968":{"name":"meetup-web-components","version":"8.0.2968","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4e3a0ed1482d404bd6712de41035cbec07194e0c","_id":"meetup-web-components@8.0.2968","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qZR9LoB+rPqz5uUkDqUm5sdKchqzgY4ViTBnKb+1FEDIQVvZUxuAfG4TvYgZymG7dSkXt7fysZJhZLzHVnuVeA==","shasum":"b46e0d47bac284148b45f47cad4c19bff8aabaa9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2968.tgz","fileCount":608,"unpackedSize":3047525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzZ3CRA9TVsSAnZWagAASb0QAJ7gMVCMy6F+D2r6wPRy\nHVSYOjcoenmNnJ571ChFzTndJkrGqkGa8HllJ0PxMLi7lRbRuzURX+M0qjxz\nYhuv1adjX2wNKwYexopTxCpC+H5X7TSZxEUcEgoakD+Bn7EbRQCAtuBqbigD\n9iDt2Urxx8W4acftJout9HqTRD55RAl4cSqrvEkAd7Ynr7VZxmWkgI7irKki\nYOpMQvkjHggaUvAcKH8nlKFvzAxS1OYGsUJ6706IY6syY8SFer99HlSXDYEn\nX/BqORY24iukCfWmhV9fDijH3I1G+UP1q1VyUywQ9C9WQIsjiKIbh7R8ikDo\nltmx1wVH5c2NtmEF4ieel2/U6Aoero4xEw8sJ6TV6IGPgRuQXaBzWyGMf+x2\n/9D0Y7rRm14iM5b3UKBCXjiyqKEyI2tedIokwZ8d1htyP5AYsBBpIGpqn447\nYvCAYPX6vZe+qYk8ee5B7DI87nhDD7z8KvJSSz3Ao01kpK+UBoAp/jFy6AQr\nazoISnY7dztgqDmJIEo5YCcZce5fYhp6XaB1aWag4U1XNgJ/E+daup7N0kiT\nr75rwVdNKhHEVoz/I2PoHJIVygSledogLIL/omTW36Me4YIIcbNjCQmMcSAb\nbh/RbRdBeBfENFTrFfeqiZddMbTpKiNpZ5He5GdGOuvRhuAakdDNpfPHFp64\nfQns\r\n=B035\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+0hB2qMIPZK8gv9nXVIba3UHbNRMf+IIPSSog+9RrjAiB0XQnhVCkb6VyAdytZRboE/BQNYP7kx6NQQeW6cjC7rw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2968_1583298167260_0.4046327928721305"},"_hasShrinkwrap":false},"8.0.2967":{"name":"meetup-web-components","version":"8.0.2967","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"976b6bfb677fe01fff40449c9505f4f05618f78d","_id":"meetup-web-components@8.0.2967","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MBkTpZcqOISlZHkKZ/0mknT1/EoIkEMeOeiGRLPBMOBuXAi/4ZS+qaD+JBl5AiNowpobaCnLNPgCDmnM8bBxGA==","shasum":"f1f9624b5bf19cd39113a839655d1a52799adf7d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2967.tgz","fileCount":608,"unpackedSize":3047525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzaHCRA9TVsSAnZWagAAAbEQAJU/O5EgRVol7s4XpD4y\nqxVwMbEo5veFmqlRM5qmFXD0qqF5e2l8CKMZvu+KQvxRqGT7FBCuGX4UQAiV\nDLpYjvabSij00SBMHkJkNm/8p5I091HKFqOOtbmhYPy/ZiUDWrxA5c5FnE80\ncR78Wm+iezHqEC4ltQKMqP4iFiZwN6V/oQJr6G1JaB8elmV0FyyM3T+Xpn5w\ndzcaLRbGLkXwdj91dgikwTbBsRBCax1bWmxjP7g5vM3p1R+sTBknGwmIHnqn\njMWDljfuduvIszEFg6R21WKsMhcyrABzHqmKLmsPrDZ3lUdfSYuZE2kyQTvC\n4o3omjggSn8NC82tOG9oUweE/6ykURmvoV/mr3mWfaC2xTw3zIRMYeMpVKIX\nfCAvwhrQSHnH6WKKEE8Q6at5j6/vXaynzGHfprStM54oXAV04Px64TNTX93K\nRteF7/rHyHdeCeU0a/hs3d4oewTOsi+rjs3siGvFs/Kbz2exbW+tK+ZPQ0oO\nZiKHUzBQ4Es+YG90I6xtYAvBU6mMs9Jz8qRlXXdQUESg/ESG86+3247RaJhm\nF8JZmdV+v73O0g3pVilZozF1KlY1PgWX2sIzDM6Qo14inlwyGal6+eQmMwrH\nGl2vgcxtSCQOxczRGWGE+e4cUxvdhZNP57c0oIFpJH8Wu42LUizzT8pfFRmC\nsjnT\r\n=h7gw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGhSeveJzA/tB/I+SoC8rzD1DhrTS4DBcc8TiQCIychBAiEAp8qkw9P1FgfcfhUAT9cj1LmoNRhPF7lUXLQ0QG3uzAA="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2967_1583298183189_0.47111989179003877"},"_hasShrinkwrap":false},"8.0.2969":{"name":"meetup-web-components","version":"8.0.2969","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"72522f7e306e3e4c97f615d5e00da1d1ed625453","_id":"meetup-web-components@8.0.2969","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-z/jihExwER1/4GVmJwvLk91dIdrMPMlwfkhprV4C+4lhUWjV3zJ0VbqiXJMfGfh5Ep3CzeDGNhCOjvS8HG4iSw==","shasum":"4a8b4029c0ee3e39793e8836f05e5f9ff9bcac1f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2969.tgz","fileCount":608,"unpackedSize":3047525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzagCRA9TVsSAnZWagAAtTUP/jgQQT0AyKOXjlv+0aDf\nD+YRMaQXb02EedaZ0x9fQpYFE9Xstu4hDF7gDJpRtGqhrs2PPqKzuVycHFs3\nsznYF9Fj/DxsC4478Bb3jOjymaWimB2P+m2r/3BLMfwcd++5Kv6hMoKIry+l\n+imxaSBvQzW3CffFkTp0cMmSS/ORu1CdqAqaTi4vmoiXbTPUHMu/KRGJOOCd\naWMmzyQxAB1/5Q98P91DUyujUpxpfu9SFU2pbhYC3+DyYL8e0s9vdnzhyBZI\n9qbkzpJkQYUAcEyVECWcXr4S8kJAh+i0XgFtdfg6G9eRfjpuIRIUkvx44Yul\nsS2gIX49brMrvkKdJgozdfUNAtujIkG+6PChBJsnyL/F5RtM52eJ/v0GZQMg\ntBGbMgJbczhVg1MvLcZo+W1NFeTDec/pyIlorAHpAdm8L4/WJgJ19gCTHS8W\nJXueF1L8djZakzDSPVZKWLiVqBFlBIwsBoHPII/9D9mkly+dHCccv5MwhWpm\nY0aboYbdZTH0oIgNUM5dfpdmQk3LBYHTpEeAk1VjL3QxlsPTML0eTk/Da64f\nNs4ahV0eGMqJXCny3T8ZFtO0DQUQ1Q7S2H4X3wEx3J0fYjDVRrjpwhjn2Bsj\nCGFdCG2N8HpVOmaVHiSrHd2igjgM2DDnd8K4AT2ACn53cNwrmiGMexLcG6h2\nuMpn\r\n=DdK+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNcK2atRuOhECd1t1Mf7FaIj0Zql+DdwUMM9YzNZcX/AiAmxPMUbB8o49y6nT3d59qOU7NwfoZWTRN/aiK1diK/eQ=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2969_1583298207993_0.6337437494285574"},"_hasShrinkwrap":false},"8.0.2970-beta":{"name":"meetup-web-components","version":"8.0.2970-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5da002744ba8eb57f6f7062948e77f1c24066c59","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2970-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PL3uuPA4ezoG3U1mdSl66n3NaWXljb5kgwh/B9AlCbC/OOXZ6NC/xJXnbPIm0E1OUp6tRzhtECEM9mzacwALTA==","shasum":"ee6a0976264f56d52f2f95bc812915cebefb973f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2970-beta.tgz","fileCount":608,"unpackedSize":3047530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzbmCRA9TVsSAnZWagAAE8gQAJQK7NNkfy736hjv4jmC\nSvLRRoJU7mCMZ9FrIUIjfFSkFqwZymH8zNqi0pxo3zmMb2MtRJR3RTtlXoGM\n6s4E+ATsuiSiVyKCu54KgxxiHHMGecIO6ppr/9iyk0rrg2yicHnglaS6XAz8\ntO2IGav6lA4q2Sbh7gUA+YPhjjEF/wErqHxfy+RRmHWVKtbtuOZstdu7N2uL\n4iyBNGh/1OU/smVxe3y5dME6AQS8UgIObfMohV4dX2qVQT43Jc6nxMS6IuSx\nj6bcBbtdZoQWfoP6qxReS3k1YlXyG3xgI2zA9oH9GuQHa/55i5ZAVcTnorKC\nw+OTJzKEczjFImBB4ZyUG546BN0aNcZ8mjGQTcffQdE7hRRJf3Bj5hdrXic1\nHWcIJyaaM5KME+dgMn5tglywunpKM30OlQW2aNj9BoJFDpXWG5znAjTBGkOU\n/+KnEzXKMvU6/5CLe8fFyMrRKEL+g2U7Hf5YjeEo4XZbXxlhduPAyDAxRLZ1\nq0+tOntxdXEx0oyMtfZrP6YreamdGG1BGWsmb/JHJaApierfDNNQs/CNtMoa\nv9p5yi9bo5hfVD07dRPNCw7Dh47oHtrXRjC72NRnaDdVM5Rtofp65u4+3Stl\nkrddhn2jXBjcLMAIOWtA4xAYD6jkaZRcrW505ecx+XS7vix4Mysyd762L7dW\nzFG+\r\n=l7xo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkDs9e/hy8l86+j8TK6RRoU7WTa/nVisNxTr6D03nHDgIgUUpMXBzrOC5jlZWYxYhLTCmHPsVqsXqD8PrVt51M+Sg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2970-beta_1583298277423_0.42189832951421846"},"_hasShrinkwrap":false},"8.0.2971-beta":{"name":"meetup-web-components","version":"8.0.2971-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"16a882b46a9af9b2b3a4f8438cbd8db93688d6ee","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2971-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sixmNU+SmdaQbDOWc6P/sLrjEIBPlzxM0nVYehqBZ+Zq0kqPqKjqoMUSsBOgowyMManc3RZ8ehC8LVfp50YVYQ==","shasum":"cb062fc87065b0071e9f27d12a4e78b0f455df07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2971-beta.tgz","fileCount":608,"unpackedSize":3047530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXzb7CRA9TVsSAnZWagAA+3gQAJcvNJpap64gxmuQdj5o\nSsstK0AhgFS3iKZHy7ymU9gWy05H9a1L9JD/c9kC8WSDrAN9kIzNy7dTgi89\n55UAgFK72wRnXIv9HYvMuVXryXxh6pivZvX0mhW9Gz4M/czrfVWNHttxWCiK\nCA6YRvvntBv9zzVkcdUkxsQNGHfrO4FR007GRGZIfXkXcT1dKaXY+BqeSSQt\nVYONRo+/brYx0uqFoCEHJuF1NsyWWDCsf/GRG15JggyAHLnqyLmc1p1suf/w\nQ8AKoaDqXtG5THzzxlTMlQIFxQ0R/ocU7fqljN3cbHfReQYUjOkd8JTmNzWi\n+n/ZvGoaoUmJATlUbUmHWggTtmO5YvEOdjD276r4T+PkhebllsRkG4YNIaOY\nHUPOdPI/UHWVbMmxJQb5mds4zGbq/mc2+hddlioGml2gc/w2MEc0qGG/CF9g\nPHivwHzPsqeTdyURf/KLcb88C1HnI0beV+Ljd2Do91uSomI53anlsBRPyLW0\nEN61BwrIlIHueDBs4iYfT1zk/9onxDPmHLA+IeB7kB4r7aOe41hrDCWv2EFP\ndK5MGPHfB6/H4ZCFvxeUUTDXbiDyWwnjhHsEjjbsR9t+ZnfdTCdWouDd0zLb\nFhBG5FWDnOUrFlj3+B1qdTDeQDzcmtKtlY3JU2h6zbC+ZhgBz6kbAmvhe8m4\nWH+6\r\n=RWr9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm9AIzNAsiPwj9o7rhxhHM9kXFXBPSfacQpQSSVuvF4QIgMUnXhg+emSszlOEKu4wp1HOeY/6XxwSJwOqfwzS3PEk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2971-beta_1583298298541_0.18129772492850527"},"_hasShrinkwrap":false},"8.0.2972-beta":{"name":"meetup-web-components","version":"8.0.2972-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f79c07dfd9cef73d30f1b0136c5b24dcf1ef7fee","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2972-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ORTE6M+iZ6Ml5W+mSsYoEvUSNg9NpeGjds3DZDvgDsGidy4+NYOt4GDg6S3IWNmeshhryEJFXfzp2628KPG1Eg==","shasum":"7979e0534aabf1400b8e75b38dd24276de4a96b9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2972-beta.tgz","fileCount":610,"unpackedSize":3053317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZHenCRA9TVsSAnZWagAASWgP/jCostdb2Wh3J0J9o00C\nPR5S+UaYqahJp/kWuW8ndZZze8oPiKojAOklS3OX98XVyNZw9qxnQrGIjP5n\nm86QEtGJmArU78lQokMJZ+/H7KjWy4KFSwB6z9XLwWa8fegaNHfLwU8upI6a\n1TKxFjKAdw19iAPSRAX4KAiO4c31GIOwbJR2tkgbY4Oc+33skLJ+XRpMy9Yw\nw/qM9cgJRH0o0w/XyKKlXpRp65eDCr2hFo7WCrR+U0cZTIvRxlhS9ENV1S8F\nRd1HO/sKxwbLouELGpkHqu/4qyRnex9flqt+xRp8/Wm4c7khGUAHQFPmHu+U\nZjf4bu0HcSt6edRdpNyJJn8WRkAWs2t0GSCFwn16IL1qNtV+v86hXZVBPdvd\ndeBGk9XWRFu3L0IUxmbpB/ZWjz7WQIyV2uaNYOxZJRWQhwd2DHsz8J8o53N3\n1ONwabFnoroEOUsXZ9sEdfnePlZN4HpfIctVPVRBmLB4vR4+r9cLVI2k+CGR\no048dcje0ueP+OBj83PUEhXD5YTfKxPCSKYWDHaVHm7bZ0/N8pcb7jKVaTmS\nJ7WNXRpE9zTUZuIsylP0cGM6umv3qKuyg2aNaiQS58Np9A5oIEtOEP0pBk83\nGpcHqR4C9RglJu27h1SvBTHiQ9i0AAnAmN9CuIS1pb+tVqSxKsyLeblc2FnJ\nFuKM\r\n=67CZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsspI79GxZ59TBjyfr09l9FQ6U/r76r8lfulXWBrAAKQIgG24tGtNvoweZgg26HeIOB8iYv3bEERfx0xCl/E+lxSE="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2972-beta_1583642534801_0.8617336118419106"},"_hasShrinkwrap":false},"8.0.2973-beta":{"name":"meetup-web-components","version":"8.0.2973-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"808722405dd0acd9e9e4e099ee6af263f3c7622f","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2973-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yy09zhcRyWvM55E1f4mQEJyNnueN18OFju7fv/VnIWu+mJME7UDuDRiL6y3mQecXyPjmxYniiyuZbfetsqaO1Q==","shasum":"414b68c7030d50ed416d4a83ff65287eb117543c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2973-beta.tgz","fileCount":610,"unpackedSize":3054631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaVO0CRA9TVsSAnZWagAAuI4P/0JItqXAlgVQBjH0KKAS\nQrnnJeCtvWS/zE0Lrc61miRf3rxM3Q2iooHvYiojZb2jCrBTBVk5zIkFWKHy\nSEVgIlQiKUuAuiPEd45BZs22O2yxFP7F9sVXAyo430HOlkWNlsW3vsfmqCsH\n9xtjfAPodSCoiFLXSh98A4upQ9SjBC7HzeL3ByJpgoOFDlbjs5M5ntGBB4EW\n1sBpSx59k6SPplTeYUveOSul0H5IIirViKTbBt/K4no4rf+hUFY9B7QbZ8mU\nX7lcmVR4tSMILK3pqGR7SV4KHH/5nkwlYULdZLYAFGYzMlp8ZcbPUCmb+nn3\n3brw6qoNZS3lVhxDbSoYc6EI5gT9/fmPLgjwRTiAa5gqyvyZiK0LXyaBwLtL\nZTCCz4i5OuU/1SpyAt3YuyxeQdZdfIhoQXYrc8a4fvnU3M1pA9XpppnyJV2+\n3a4bWhX1rSPGfIUjbJwIOYAwwkMZ2kxtD7i6Iia6rtfFEH8EBS7gKHUTFmaG\nSjK72Z1OYhm+X+sn3i3QkAt/mb9CQZxQXSlo3VC2bjzLEvnwyxgxLx7X9nF9\nlJNk532LqzVWB6oqSJKhxj/MHRtl53t3ijK7fGXJ6KWpjHMdgourdyLyxP4i\np+auStqaXvLkMERqs6lb+XBOzSxbxs0fRcRMXDPwNkIADlGuDTuKJA2Pxpml\nnpW7\r\n=my9W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrT21218X4eNiNrII564we6ZQZmGoI8Z5KVleIUfDymAiBjPUFpyGf2khXTZoVSI9qJeMEMUlqekd9Fm+YxckYI6g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2973-beta_1583961010930_0.46586222517513964"},"_hasShrinkwrap":false},"8.0.2974":{"name":"meetup-web-components","version":"8.0.2974","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3c91ebfa181788d82d3e77aa0e74361520f01d41","_id":"meetup-web-components@8.0.2974","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nfVJsN0KIciQaUqVd5/LonirI/n+z2uIU8hHOTIh7sD1gAVdNN6/C3k5j4TohI+Ou4gtg79mZ9Ks0mi4NxKscQ==","shasum":"14af1de12fab3c6e4964c66ab9fb3f60ee31e95a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2974.tgz","fileCount":610,"unpackedSize":3054626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaohfCRA9TVsSAnZWagAAetAP/3uNArVsJ1QGJwdJMlSG\nMW+I3GDSYCtDigaX4sleJwbKpi9W1Snn5oOzZcDUVU4gYCzVimdiAm1fRUff\nYxqripP/GSjg53Se/vrT8A04Z6qozFHrS9c9hh1RmB0Vvw/Rdvjmfdl0RBl0\nj6fCrrY5S8OIMAw2sBMdA89vWIMUQfAgOxvOcVrOAM/8pB9Y2QfpS7HC+9Ku\n9KT9TV6bPmDGpShNQfBobaAk0r1F/+QgNV29faGMmC2G7Rl39/viyJhaEK1E\noW4ZTEWF3NBrci/9/ZBmlwa2j8eIqnFHfSxRyG5OvRMe6nHjUtV/rFNbkrOQ\nflVKynauwEI/2nv2fWkLqMG89ANO2/EgboeY6mQGpxAUiCHiZulYk9I8Ap0I\nmqY2VkbFcxVWSh0hdOb8UCLRq/GK6LeM8r53PKZJ55zVoR9iYUYeEY2br4AN\nBxsdve1PwXTioWlzRLFL5+kGcOa4MWcx9vsKVIFzA6tK6rtpZEmkkjXHgxOZ\n72asSnaD5mxE2j6aqQvY1vYG64/0ZfPNwgNECTZJSdQ6QKsQTzA7teWZayjS\nz8Zavh17St8d5ZjImYk6w1Zlj4JYtabAe9P2f8O3wTUekOE1UFdDL2aPNIWQ\nYVHE3hP1G4envoYnrUgnDnnFpnp5DYWAs7ULLvRKthdZAt+sn9OAgj0vlGQW\ncvPS\r\n=12Bw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmZ6bxJC8PY9BZ0j3HrLo1gQ+BYK4vxvLa2OmKcoMoFAiEAgVbU44RV0rbmDvxTfIiODvJOe6ovRBmA4Cpds/VzlCQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2974_1584040030272_0.7349167220191153"},"_hasShrinkwrap":false},"8.0.2975-beta":{"name":"meetup-web-components","version":"8.0.2975-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d9f7964b43dd773ed76eb8b427e8ffbe3095845a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2975-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4QkKPks/2q6PSWitgGudqsE0Xo6yVJy66bfuR51zKZcNI4ViD3YqzMQRrNr/2NZVo+ZF7apeN75gKoEDEtRgHw==","shasum":"0ae9ba7a7f1037711fbc9e9be36ec49b5e59d2e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2975-beta.tgz","fileCount":610,"unpackedSize":3054631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJebA6HCRA9TVsSAnZWagAAnDAP/0j/g1ulhIaaEo2ehViv\nfE+Vk8pa7Q9fhlma49AwqXhFGHJFF8B1fyx/1q0H+3pC2bcycdmq1Mv8w32a\nuHoygFYhvpSCpN63QXNlAclfbvOdgBBvbSYbFG2HWmvY35+qfWKteTjKh0WK\nXSUoxuh13yn/v+ATe+RsaLTZ9+bqt2nuYVTJnWmp3aXJAQtNGBDalBoWOcnl\nr1p6/DsPbwx26q5qyyLd2aSDS8gBzYH0fI6rBCGCqxwETMLnW0C28WvZZKVQ\nDh2YrGx+XX+bGSIf8o2LUtBkONz4qiFQaaVxTckpF4u6OLnVA9pAMS/2M9n/\nlBewJHcrIOo920F5lLgtwnxW4KMPm6pwyMgtqop/RkzLvDjg7uNJAvxx/MmD\nnTGaSwHQM/EDQcc1kSLV0UFl+juH7X5PtBSzDTr8hYb7uwGcE/CBiofShLOQ\n5DCzH/wFZVEe4B8mhXMVkaOl7uoFcVBlXM2p5Cu+IsbR+NUdKYRnCJDY4H5L\ncLf/4fsXiicumaX90zOm+ULNkH+v42vn98fHPd0YRPNfbd03NN6dY/2gVvSR\nd5nCprkLsbVri+mD1bRhjsI1ttMesG/IEPefWWvFA6ljmlSe10mf1nNzVsez\nLprxFVmF0w/QV1SppFIDLxNFCtF5R3cKvDC8VRAwsxpwP2EOHFeMUrKpvsYC\nEfwe\r\n=uFnI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDv1xHrNoCeNzXeCtJmG4hHbFrll32SxNoGwn92NVVPGQIhAKbq4ahLiB2FX9BaKFUFH1yvYlYdDwg5H8/t7QIdduIt"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2975-beta_1584139911059_0.570477278266831"},"_hasShrinkwrap":false},"8.0.2977-beta":{"name":"meetup-web-components","version":"8.0.2977-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"aaa2b3e51c01a19be376316989dd194d1d41b9a4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2977-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VpPDYK1Xl2QfAWLtoo/1Zn18cuf4mm+3M9BqYKslIImF82oCFJ63Jqk3jLKHtCwbMWgh1l0T9deuMhwyyfg0ig==","shasum":"c97fe87b3e6deee7062050a31e375dd42497324d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2977-beta.tgz","fileCount":610,"unpackedSize":3054339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeggh/CRA9TVsSAnZWagAASgEQAJa7YrGUQOY7ZTVVFHPV\nBPbMN3sNsd+t5K9QQzISqFKS+phLjmcANN/ZugjLK/YOCgBlmBsyYQCGsBT/\ngZ6D+YOvCLycqcBokmqazvnrH2jRBp4NHgQlkVrx5KXz9V63ARodr0Znx/CG\nZ4hxOd1Y8CotfK7XiY2i0NECzGTgTNYl7bWSOOkf75lFUjEg7I7D15bOoXBY\ngCX4f00g7RPJoxCU1rS4hMGBreVJypJMalatLupnQ/y16fPBaDv18r3OMeEE\nRBqDZZpuSTFkWpx10mpsf0GRfENbShW9cFlOMbxjRD0Sofjm375kc8PFV5PY\n6y5xyuBAgJSAyYcObpf+RTVNSQSxuq4ORoS1Jbuh5/5ltrOwRTcbI2PnNDX0\nq4BvVVyfVCgBPRASZbGN6DWdb4atBxi0r4BPgCLLNCqGJfnyW4G47moZdIU9\nru6gW2d6adSHH6vKlBKG6rk+9G0qSk2txDSJzrB0eaOawoIVxACrtGHsyTI4\nl1UjC9mTTMmk6KjM2sio5dRxDJdTkTm9ZIR+VrCN8Gr/t4CjXxzBw9jjzivE\njE+Hu6bJ29lFafeA+OaOU8tRVwDdMI8yfCUoENYpv/3mdfCSUq899fGTs+BZ\nDGXKs6A+xf7YbiAhsghmb+FxXV+1b/9ChrL71uYDYe7HHs08+QAVXX7XbTuc\n1cE0\r\n=Twun\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH9Lv61it0XEiXJvNPeX8sReyU1GFSkefDs/d/hCkfuUAiAYSM+5RJV+SzuO//MSCPynOqJ4Ym4fSMBxAeDDcSn1mw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2977-beta_1585580158437_0.7315112295117479"},"_hasShrinkwrap":false},"8.0.2978":{"name":"meetup-web-components","version":"8.0.2978","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b1c4666e4df0a92e90f8df2b2c815013ca188b2e","_id":"meetup-web-components@8.0.2978","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YKJUaLGarxbPEaTQOQ2YhmFvZZeYvWkFKcftS+tY6rYwQLPnLDFYMUOVCt9/GSFsXROESs70Of4lfpKuCe9vhA==","shasum":"dd2e93e69b940adc8fca09a74067cc8d99bd7445","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2978.tgz","fileCount":610,"unpackedSize":3054334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeggybCRA9TVsSAnZWagAAGLEP+gIKWiQ1h3mCzudTJUe9\nDSA1c3tXRT/Dxyht+8qCgD0HPQxnc6fp4sn3/jS8zW3moDTQkgLz4pjKbAY5\nxiAb5eSIIbahPoLlX6NIxpgUuPiBAAJ0yVw1MH2YMN++/qrPIZbPoR8t1wx1\n8dTYvvaDsvf8CNHdqqBu9I1JeVPn5JvF8E2RxFUvAv+l2QZJdqW6xi5neU7M\nQT3+QiRp7KVuFt24XoAplmoOfdRlb33332314Izgl7T6NePratbusBMCCc7Q\nIO+LA7ES07G5INFZfBmxxOQiBdo7vrl5Mr2u6jsI1OSUh9V7yoN2q+LqV6vk\ncJJ+wxz61qdu25zRl3CTqcaEPKLq5gvBtA/OB8KdAZaGq8tot6k+NuhsJevA\nLSDg16gDKeg0PhCIpLHRpuaX86kkifITfy51lWMgtuicpcTLYUs83X0ZrMcW\n2sCU/cxxREA/qmWtGNE0Q/rr0n/6wjFGx6Xt6OPYf8bkakr6AeEYGPIzdT5J\nUpAxZ5uj9spSP2tCFfUb2xyrbazA6F8/6enR9mT8mEiidQDojOpMPAy85G/L\nxvXWwmnGO14Tkic9HdCHgGpIC3ChhFkMUaVJQ+1Oq5n0zO9c3oWJxpypAJwg\nykilRXcfB31ois33WZn5tEL+IlNXNtAKKZ6kfgYe6A3muv85HHvNe6hhd8Qh\n1EXt\r\n=cBdS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLTS2QNNyCke66TP/OODL/SJWQY/RQRkIjxRsjARKluAIgIiWOC17BHPnli9R4q2+l2e4dPVTMmJJljmgDvosJK4c="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2978_1585581210352_0.6476752063019124"},"_hasShrinkwrap":false},"8.0.2979":{"name":"meetup-web-components","version":"8.0.2979","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"183becbbe689154deeae48f544764528b2ce8b78","_id":"meetup-web-components@8.0.2979","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MEQ1HUMpvlSzWz7JdQHf40b35JzZkGDC82OdPpNbPHeaWYX+Eaq8siE5exVJkBJL48S6mdK2iBbRBaVxGBs/cg==","shasum":"fe2db87f6a65a75bf15ae594817f6ba73e738f33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2979.tgz","fileCount":610,"unpackedSize":3054334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegg2kCRA9TVsSAnZWagAAqcAQAJxJ6KGPg1/i50KO2z5H\nxBI1y7ZMb18YE7yGcKd3JreU4VgHl4dyU8wb5FlIAf0WxOePri0iQ90+XALQ\nTg5+qiK0NZBR/Ti5AdU+8kCzXkP5tJmtprWNA93+cePAxIbji5k8hwnDBzv0\nOAkola+PsyuRiPjp5JyiEuLNx4rBNd2t3wiCgqd0osuO8DlgfLupSXWs9Dlr\nvITi1X/fMVEiiOsdieD/DVFLtj+b+LiKz2D9okTCzUlpkmYX6JSFCOhbg3KR\nnU/JAb4vG+ErAjGneS+HlA4FXcgJfpDeAxZ6Hbe9du62hZIiW8yMWhO460l8\na/9Ce61xMd1kbTJkj+ONf0IAD6t4xGvsjcVEjsOW8FUbtLgzEbiSy9SWDQOm\nVq3qltza7GH5UXwVlJ+mCdvFpX/qdiOpvUSdjRFBniqmuTqgQJf79TcUKezU\niNBH2+cRVBu0CXwIjbRGgXPNuEqOdri7PxnYdAojX5BqzQedZLqnAxd1XcSC\nCAPCFShwn03ixq4M7k/96gSrw5qxfRUHyM5oWsh3gTCELsD7fDDhijHP1BtB\nALpUVz0DcXW5DNCmmJhgoT4vUHjrLPtWdFtf/HfvHkyYNNxN+I2G8l/lhFyn\nZrUJcHhzRXFMAKai356FE5mHbCUD0sjEBeUQ+5Q7EZlAQlgloYcZJ4wUkQ0Q\nJycM\r\n=tFiR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkFDfAhwseuyXqu860uHX7ufbKHzasWZVMPEKgypi2kAiEAl24+tAmymGsLtwCpaJtRYzdTo9KrGELH3aSnv5V4VVM="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2979_1585581475748_0.7465247933994648"},"_hasShrinkwrap":false},"8.0.2980-beta":{"name":"meetup-web-components","version":"8.0.2980-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"174688c29b7f013fb5c2b3e50dccdaf4e7172698","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2980-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gxffeHZgC+7cyyRg31YtWzJpuXZvzT0D9Aw2fAhQPArhBom+zCdAgf6zJVS19cdjjIWn5l4JTJXYtTZbi6ACew==","shasum":"4675952324a38714e95c05da15bb31dfce4a486d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2980-beta.tgz","fileCount":610,"unpackedSize":3054339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehdOICRA9TVsSAnZWagAA648P/1aOfIqL9Vg/0Ir4T3TU\ndCgIKjlNEoIF7JgPdldUFsQd4MZpY1yO9UptPiZzc+uDUhC9z+WQ4Td3LvAX\njeuYn2bHGUewjUu3xlZq+KF6pWdXYpnXkCFJDIF1KsZvQQCW7tuWOUAwVqTc\n4DHFgX7K3YPjRxHphAYv/QpubBzbypFMjzJUPgxsX8V0DaG7M/JU2IB462YI\nANWxsN81+yxdCdXxKFmgrBTgi3jqTdU4B91n6R82sHfXjbHdQe5fuHYlbaRe\n37sw8cVAnkRGwai1t2OxMYnLnY82rdiUKhKMHNk11O9KANIGnPc5ubhMVeuc\n4V3j1QhUYbbS5tUsiuYZtfViD7ULnFI6Yfs2xF2BfbXZ/Vkb6apgrWJu7gd0\nt8cs/vMCsi3ZkJE1ezeHSfHiP62sRYQWzd4nyPkHGLDdPjpTqKOikXm7Uck3\n05NwTz3iuyi+49WvPQ6F8gqD3j4LKI6mS1IqnEbJXzYUd1PZvBItS7fxhjgw\nVWDFW5XJH6uNMdJckfq9CZjbNmyfqnR49ECK8IvMpEsuyV8Q30BGMBnjT7Bp\nbiMfHAcYP5PnwSAIhytyM1jhHlmjpgtYaJIGQXjpJQJKfZu0VoIaQsPB7JDI\nqnXN11tw/3JbkIY8IvgqredZ/hyo+Y6slAhyQyC+Rvhie0DSznTIBczIF1VV\n8GI/\r\n=mcWj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGljBDxrQVzqaF8qS9L0UhmPyjpOTMPMl0s5Nb0scB7bAiAEfjKKGg7xPMt/8fT8a8EkrpTC/1w05/q/nAGEURXAvg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2980-beta_1585828743227_0.7785711072701467"},"_hasShrinkwrap":false},"8.0.2981-beta":{"name":"meetup-web-components","version":"8.0.2981-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2c16995c1cabf0e08bd6ea54ca4aa5a44cfb60c1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2981-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-AlWMtEU2wuCkB0zsEXmVAsjFwCCxanTsV89h60dW1jqhy5YWlDOKepByqkxt8hRtAK+puBM3PNX6Jy8hkhTcrw==","shasum":"28c4682cb3f5314328518261d492151354c6d229","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2981-beta.tgz","fileCount":610,"unpackedSize":3054339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehzt/CRA9TVsSAnZWagAApRYP/A+aY9dkS+pWGS5SYua6\nm3MEKcT4ylNlRpDaUE/2Y2aRJ9yQxRvO80I9eCSKz4GzPyoZzG2j21Q3q6mv\n6nunhGnSWRbqUmkX8UCgNqakCa6/iLXPao+RQGhUNUPi3JcNNmPdkaVKU6Km\nBq9yoCvyks+SfNhJRR2XYIp9gHI0WRhPtiLmoNx5EdyxLx7uNqY5UuIZWDV3\nQhCb1mtgdmTDOjQU2vkF7xR+9/v4QWjeGrydSxDrkVPeh+77/zGahaIP3Esr\nxpBynI9RGkbcC0/eqJpoRn4u0fCRDyU7pIQx/H3lKjX3HLi9slNrc9Pb/jpI\n2azpiiX68kcOcpgIHKqTCrqip5Lga17z6B1xjG/AfT2r5/iNQidAz2EwgzGn\nlQcAajNKAt0QN5IBRP1B7s+6w5F+mDIffHNnhlSFdRREx0271x9QDB1V4Edk\nixaorwbxiKnrL+8L2m+525S6aydfSTY5f+9uD2B5TuIApBfiYLFULLytYWNF\nsimaL6xXBcofYyeCF09QYfWPTql1BpCU0KyTmNA5C2mYF4pQzyOau9P4RGFu\ncEJ7pwMQdYPpVZFYZJ1sq6d6a91bExIbcZIzM0r9BqST8b16WHZFvjd1NgVe\nFvyLIUgWmTLnrhkr71oT5eA6u7uFCJmobYU+fmQO0KvaLdowuk3gaUeFfRt0\njpY5\r\n=T/JW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsfmfYRLLK0mSKQ5C4dotqKGolUMrGwzM6GmL/nH7utgIhANGVKjpgwz2YejJ/SHZ2eIfdi5TwBXQd3OWYufA4WMPY"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2981-beta_1585920895288_0.7700854792011893"},"_hasShrinkwrap":false},"8.0.2982-beta":{"name":"meetup-web-components","version":"8.0.2982-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1c239760485e5b6e7127c8889e96563f197c576c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2982-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Q4iJkZ+wELVXCflvfx4ZJ95vusYusEEMrvMclapQLup4aeOHEn3sYy8vVrzY8D1LNoRdrTwHWinL+2OUVMmplg==","shasum":"f11c4017c543c10c8dc4fe3d0d1c26dff9408e78","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2982-beta.tgz","fileCount":610,"unpackedSize":3054339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejHM8CRA9TVsSAnZWagAAxE0P/RX2HdG4502tTXIoKyal\n/STe5L3+kX+BN5l9XmdgNt2NaH261FZdfbZPSwC4IdIv15c+pGufWYUwmkY6\nnI0SVC1wMNTNgGvTrgTJ4P2WHJ4vqGM3Lv3N7WVc6u3ElwZXxvJGUYcV4rrd\nv4+zfJG5pIkDNPZbRr2Bi+g1hf8mgvA4/Ibyz45LvXvkfT1Q7n4mx/qgc+KG\nTuIGfS4T5fByBmkyCj1Y0B0aNvzEwqpEG3TiXC88VH0b53JUL+Mku4VVQlPT\nHopDsEzkUqImECdCYtiVPvLpYCB02BNS26OfjDGwQliVkV4sHIGAqv14ZDi7\nmQ6RSc53mqP8zdVsyn0jNvxfckcf1t7v0x/0Ff/lB0pR68qTAPo8Q+9WrKvH\nC8SM8OWP8iL6+F5z0XOwKrJqloc6eDjBjdNF8CWnGXojRRIr6uxEaeT6Pach\nE0ElRWCL5UB94efAt7ZuyrHb0UTjbnM0sIHXRC0RuDkXv+fR023um0eMbjmF\nYyLAgAYcrMTfdao6Xgvhz68P1Kn3w17R5jaD/UrpNqlhvzv5Aa5X9BebhXHq\nAkoRquk2gHb9VsMFP/bI2Y89AO1Fb47t5It1GdHr4L3qA81CRwkN2plmYqcS\nMdaN1poZOs9jpOzOjTLL4uF20S8xipbcpXnQPfhniDa6VvhJL802WJyTuqKg\nS2Wz\r\n=RiY9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoUTeAHKb/ksgD0s//AshIz+GF7wvle1LAQ0QeKf7slQIgC2GjSTFqng5ig0S/qd5xyeGQGyzCumsHCGN7DP3mg/k="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2982-beta_1586262844035_0.14903457494906447"},"_hasShrinkwrap":false},"8.0.2983-beta":{"name":"meetup-web-components","version":"8.0.2983-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c0ad2e2a8abbcfc8dc65cba30be889dc55b6dd56","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2983-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hxThwga8Kv0/6E1bhnxG4nOZnTD2w3OJnQHf4BhG15eMlNCDjbHYl39pMT2xDWkxQWK4PN0DQx8ZmCnA9Hd3GQ==","shasum":"b474e9d8529f4eaab84bf967c7b3c6912e139f48","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2983-beta.tgz","fileCount":613,"unpackedSize":3071391,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejHpuCRA9TVsSAnZWagAA2n8P/0KRHWs1KdNc0NQ8HXUC\nLzppgPY6ydPOzb3IykGx0OqS0tvwfIPkq5PIhE+uu9OBT1AQQjQppY+2jkzi\nNboTYGnH4aN1u5DxUCaPvW6FstziT99cc2IxjC8cFNkSHTvvgVDIGlY3OSOI\nnlVTNhRuWIV2tVccgdRnmj5/coZcj7YvGAffPjq2JuSyQWomcKy/0AoHHHkZ\nDG718ZiZkc3gAaaxePOUtT1K5u6tfPc+BCHXyQOs0mWqKPQVzIZDp6xLcqjq\nKQIriOgDV3hpMlyvLYd4bCxiVFHBhR6R65FlAXNyGRJmyiIzUMkRZNHYgOc7\nrxjlu/Wtboe0JjnlzVGHJ7BQykbqUJ3tyzpoYr7oksg3L3Q57ELAEzcfNNvR\nnJD7L9flZpzKkWzLHC517NzfEW+e1KNIbu/KiXMw9HcGpobrycs5DiK62Bez\n1mW9mqLTreh/r0eSliAKDv1693C06tVacqwj5KBcrbZmdCVczKkWjS1O+LT8\nSLVnUP5Bl5g1JkAgjlCud3bCvDDKxHgnSF9s7SDQA62b55a8UIcUYE67DbrQ\nbADt22KKiduuTSCbNVF9SCOnHqJW/FnXXXbm3QzCNCFSr2No4h0UuDdbbxyl\nWCJU4YZiT1gIcXEWhJmmvfoZxDOHZy0PeMNumiYkrjheNSp3WpKC2WO9u+JY\nmmGZ\r\n=4vgy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4Oo9H1X18MTXl/TrNRSD9eTbm+aXP7Ft/eOVQ8yNw8QIhANCZZWWRtPZUBzSHd93TXgXXhh5xVCXJ/mcE+pSOX03a"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2983-beta_1586264685741_0.7106563597370987"},"_hasShrinkwrap":false},"8.0.2984-beta":{"name":"meetup-web-components","version":"8.0.2984-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"019a6344ac957a17b947f3cfacc241cea6d7470c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2984-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IWU2uiIQWld/2ivDJ9wxkepHpDiIVyxxRb5ctZolHVetWhqkjPztdHlQyQ91a1BUV1akttYMDveNdQ/eAWXNoQ==","shasum":"fcc0cf62a87042adbde80117c63974bb4e758d9b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2984-beta.tgz","fileCount":613,"unpackedSize":3072512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejJN8CRA9TVsSAnZWagAATxwQAKAEZiXgmxX224XUsW44\nn41k9nsSigbah1jirPB9zLZcFIa+q+TKobI+Ea8hA6vInhDNh6IrkU4m0aR9\npVDwt5S+g/5ff4cju2E62lFVZgb5kxBRXo64jBzDGu40JYJAEw0oTO0xRzwH\nTAppHqkvYAUaYaxc0O2dAaBSXidbBXFLzVhaRgM3Ewx3oNr2cno5l92oXLqp\nViQMpJzYNzW3nY3Az1FRrq4N+JRcmqhrSM/HaHcU77xBDDABUi32I5LZ7g84\n3LTmqu2ntLgQvh3hGcbS1P3o/MtD55GrbSVoaq60p3Yvm4hy2LVONC9AIbuo\nUICAWvANQSo401plApkWPxW7/ripypYq08UEaFZ2Cyk68moZrX8N1UogZhmZ\nnrj578bFFAbC3MWs6VKX+EOoUWTixlJm8cetB3sIf4R5wr2i3vwO6FfO1/dx\nuIIdGhhHrUC/Jz/AZoxhBurWsWDMajpXLe3LyNC9w8oKYkROLjFPT/A+mQsW\npY3c2sd8LYSEuigy5g35Z7SEMFoS5EGCl1z8qCRXNaIvtFWMMB2acNeeSEeq\n6ZAhsZcRlRTpFcmU9UX1DbvtR8pAAB1Df25dY7Qpd6b77methTAMaVN3Tgv2\nkv/CImXDaUqZp24vf2Ungh/L7O7dHHpqrMo94tS9tqAOI28CySFpNnQYkkfh\n5f2e\r\n=Whr6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwGPXcVLv7tLW2CA5m8RcCe76XG38kSw/DouA/0qK+uAiAGsGz/eF12/4mXYJ/f0E5Sb4+ZF4/HDNqS8iE0CYLaPA=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2984-beta_1586271099839_0.5376070761825744"},"_hasShrinkwrap":false},"8.0.2985":{"name":"meetup-web-components","version":"8.0.2985","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"137522c262ef531728079be98cf04fd89c46733c","_id":"meetup-web-components@8.0.2985","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-BWYF3qKsURdJ3IrMvH9j15KkmTxk0vo9NNO8qoXDzUD2BOoxzoAN8gKU3jxF6WINVHoiMGDMyeAhXDddG0deQg==","shasum":"dd78e4afb8920b333df235e176a7d5f67f7ddc6d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2985.tgz","fileCount":613,"unpackedSize":3072507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejJnNCRA9TVsSAnZWagAAeaUQAIjkjpPLnO/ar/VcVRva\nK8nY27l9H+ZIePCxCHBFqpaysUSfUrAvtseF6kCm2gFiA22BdsNC+RjrlrdX\nB7K/PdxynLtrNmNWpTgmoadnCFampMlldqljGs32JUb+nVMLZ0AzE1a/Z9oe\nf90kevT+twnlCFa9yKkr2gbefrozdXXDh3bxBdWeQv8SUOQMht8b6PO6ZHiE\nfPjzBX9eRG+iaIz7B4LRU3ty13hHNp9NwuZ3hwsecFgqzSqjuzqTTDPALV+o\nc25oe0E5AvKUqcXZx9uKkbhvCCpV60Kd42/ILoWpIl+m4k/KDqjSDplXxTdO\nb8GX0IqkZbLdLQBUZgSO0K7BbdtSnpv6wtB7n8u45OI1azxJP5HCG3yN5piP\nCJP+t01q2aoSc2YyqnLRERT8vhA0Gr8P43wqzlJhy49kddY3pAAk9uh6enXJ\nV479lDvEiBbQApua4y4G9azoyPbkTj8CBb0eT7vBGpoOZj59sNUzuXDgjscp\n4R62BiwwVVEI+2InAUOp44sTRmigz+PXzaY8/FvWCHaeExvkFa/AW6xWbaTg\nnhtk0PI+2Gu0K5QvDOgcnBi3mblu1ka9HZtJ8iPRKl09+eMQsAb4Xx78FBex\nXFsltQQPYPNXBCFQ0VwG1qJhNlKAl8n78mdEHkK14ttQi7uwBV8tNEn4mfM4\naPgr\r\n=Oz+G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGtLxKkn9glDvgBeOIHEK2CaahcCtY+xjZ0WaErwAHEYAiEA/pbIddI6uQljCOKxzKU2LQyUM7EFiuoma3Kb/DmucIQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2985_1586272716498_0.2747456813837559"},"_hasShrinkwrap":false},"8.0.2986-beta":{"name":"meetup-web-components","version":"8.0.2986-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0b45aea3e4ab34798daa5bb4f623abcf7e3fd3bb","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2986-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Dcix+QvL3iKyoVhQsJysUg6ArBtFCD70GVJpFS9RWGxzTS0HvR2R0zUALr460PGgrSRUavCOy3aFZs78WUP21A==","shasum":"8e820f1e7244ee365d15e31461b001c3e760f7e8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2986-beta.tgz","fileCount":613,"unpackedSize":3072427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejeZ+CRA9TVsSAnZWagAAWxwP/iLnFIJguYq7BawATIMp\ntl3yYXksn4n9Vn92Und7VW9ZaV06xa4ToOXuuvoa2GCSRfwLpzP29KdlQF+0\nH2NBu4O2aMJxj2Q/U2dWBexdWUlFyZ7wg/bvelUOv0WL2DjoF+SdVNGc5Dfk\nNcwprJdRkA8RjaVg4m5N2lr91+Q9J6GrG9cQj3lpQmR4+Is7xlZslj98jO8F\nQubwvXUK24BUupmVWnRZz2ZsdHbmz5S4/zcRfs+oVHxKfpzyMapUwdDgbBWr\nYxmPoT+We/rfjn6psFU/un6a9lfYn1ZAwaP21V/byp3c+WMSTedXOi4NTKwq\n23R+smyFNXFXMbtQ4AEG5mpQrxTVQuJuy912Eo076LzOHOBJ3efNDNK8s8IU\n0Q4Z3v9LulrlYou3qRs9h6ZyJJ/D12Uuiwc5aO1ACc/ySLSMDy9Er1vXFeIH\ntnk23/ooKzyOqylDJTdfyF8CXKrkGmj4+cx6IJzPWbxkjNz4ttr4FiZw15G9\nto0Q/qBn6YnyFlt78pUwrQtc9DKx9+j4XQoQbZHCUJiszbsMb0Kc22iOVces\nrPOB1XxfpitZxzNnGOJBTYQ5JXjf3PF27dgARDi6ZIlWA94D86ultpL2AiNd\nh6sisDfEYQNhrzgzVAsUUicE5c577DaG4lt1VhJL63HTvfaj+ZQHtkJOJ3xx\nLHw9\r\n=w3hC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGu9aVWjZiqzNMpb46wkfav46JNRrgbzYluVdC/Gw5V1AiEAoIxii24ZMIh6T+x11M71sJj/UlMgK/fohEGAqTBaUMQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2986-beta_1586357885787_0.07572990117736578"},"_hasShrinkwrap":false},"8.0.2987":{"name":"meetup-web-components","version":"8.0.2987","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"223ba490c60457cab8ffba8325f9a3bb247435ee","_id":"meetup-web-components@8.0.2987","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0opQ5aWWh/8TGduBO7IpZ86FEPBFbSFb/Le1r1edHq3KzBgKeyTOV7yDZ6QJNq+Edqah4+ytFUPx2V9YASjo+g==","shasum":"141b5d5b6abdd222ad3352ecfc52a660e6ee1157","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2987.tgz","fileCount":613,"unpackedSize":3072422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejeeVCRA9TVsSAnZWagAAvZcP/0b3c6sQZdYs5MKYKVPP\nqOv+qM/Hoj4Txmr4Ts2YD2IQzIzJ9MQQyUa5QLQek/R3lJqcVC8X24QGmN5s\n0+dTQGtWg3S7jmjpVmQMPRwDQrEvU00hpCl6tplOTWGb+0IrvmFpBivHrfky\ntTVr8hAbC9eEUIEqYdSvUbOKF8SDe84CIwlgDNZ7ykAQxOsddI+CTAWGhtpf\nNL4JxZurlKU46Hbbh6ZIXPF5vg/SNnNgORjKMff5KLNk5oyFPfRSy9U+pBCO\nwBbSYd4axAxDRzspPSj3XCMsFdZF+M+YInB0Oo8cx3Iqpw5XePmPl6hvonT0\nTVqRySRFaEliEx/nJdauhc2kOMtZeKMEDIMKJzU9TNx5IazFxM+MXzpHUYeh\nuVsQ32w88EUeRh93T44mJhvKYLQEg6hshLJsVUYOsfRZYBw/efMJzEudLxWF\noIHQCplj+s3uJbRUL4QE8qZVymW0bGr0BtEI2K+vJzJBxiWYnefHRfDCUvGM\ngE364fuBNcnI2eZLu1CMwTdK8JJIp9YUvTa/vFzM6shbwKbZQtCW6HlL13qb\nkopViDuEBfJ+qjqCMNFc4hVG8USBHcBq9qxLNZgD50uX5L2PJH45M0l7l0/V\nWPI0Nnwu67uotxKMBKbfPJl9pCrO82U831H4BGTwrZkzIuv5WMSmTwiEv+2l\nXiDH\r\n=HIUF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2DmbLzFlcRVl3fs9shss5+vSruBqNBCIfmb2ZFrkRqAiA65mxY4K2XSEqVXlfdueR1JNPwQtXt27KVcpJlt7I8/Q=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2987_1586358164377_0.9016250210508447"},"_hasShrinkwrap":false},"8.0.2988-beta":{"name":"meetup-web-components","version":"8.0.2988-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"56e69f7a4d8ce31fb35e3bdf555d64a79e89a9db","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2988-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Gv249+zw/t6NPDmX0ySoIurx6JneP/Kse4yEhMuvjXa2FNZGs5mnGW12ClrYQHL6pA3br4i1P4mmpWjLCh+7ZQ==","shasum":"7740989ebeb3f68ea1e2f63d194da86c404afd73","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2988-beta.tgz","fileCount":613,"unpackedSize":3073548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejwngCRA9TVsSAnZWagAADPIP/0sYLn21UYwyaWLrTLHc\nIpkpu/X0m4Yw7IzJqfEwbmAc5fxyWxvSDDJ5eD8wd+MkhnYivEjl6KTftFDY\nkSbZ3WXgAFJDXA1AlxHVqDYqEH3v9XNacOFMphnIZ1YwKfwonxQ61r4xq1ZK\nN3ktBBxqWa+gnhA/aK8OdS6sZX+geIe7JnknLbvgsDOiw304465vJk7ovM7W\nIZIYE3pmBtU3eHnQmPZeVj7DU+Y/pjXiV0x2rq6N7tn/mNO6fOLPrlzXJOsL\nf1HDRcWRMpjRjq5lPJPH/Nj4OyYq+5QsUBtHo29rrQQ6Pp6m1gMpxICnavx3\nNDZ52aj+C9tMYuyZRQ7S6+mMGfOXxt1BI6sBKW/22NfnzTwOzuQXNxdKwtvv\nm28BREX0ZTiLuaQjVYppdq+Ug8AWiExiyh1LWTF9fIWcbOcgyqfwzeG6K+rQ\nAOeHQEdRpRjY6QV1IvTuVTlAn+dysPxD1HL/221cWe7oYfl+UPWs/1W1nhSX\nRooFC5JBOoiFq8obNriZwu+E+BQ/OhZZcL0ZTv6MtjfibhkG5ra6KiEKVp7d\naCIRq46Lz2zLWLQ1kOY1MueTy1UJMR/yNm2F3qSUBjMjhYE1hhnBs6BUrpLS\n1sUmgLrmvU620Fpop86klG5Eu+ZPthBtl40AUj5uESnyxuSjallKstnVE+qS\nk4KF\r\n=SgIZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOpgR1mk36qeHF5UFylqSzThuzKn7N+uxJIeTmhngpGAiEAvmAU9nnKVK/zRpkc5yu/PBfSBw7/6UOrd5feis+KCMY="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2988-beta_1586432479905_0.7774888845228962"},"_hasShrinkwrap":false},"8.0.2989":{"name":"meetup-web-components","version":"8.0.2989","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"de97d84f17a522522922cc2ca5b4d1d4aa8a2788","_id":"meetup-web-components@8.0.2989","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-C7LJTVIUs35vVTNZYs36kIoFjuSEFSVImrm+k8dhfQYHtD0UvhkPW6poDqkZgF1ioyjflNI4ROjvGd40SVu0yw==","shasum":"c7552b8cc0f974bc6d0cc4e28ea00ded7ae77bf3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2989.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejwu3CRA9TVsSAnZWagAAN/EP/A6mNrIAKdJOOExnIfHC\nmaLsKGDW0LIj7xy/IwRp54VGHt5MRnM16mYHMAntcgOVUu12hFypNHaTsWNi\n8pXnqXi/Kc/wrNvTRXWSfK4sAm6PabKqHcP6xGDAcnjrzx0uQ8UwZ6WsYCK6\nSIr59tCvBH6d4WbPtG3mTWld9RGXyVsDu/53Qp7Ldw64Ax+i+dUrslgpOHFn\nREtli4tZpW2PezFfde5NZQtOGwLg6hZRYKs9wik/OkOusJyPFjtABDOnRmsX\nfYVay5spW8r8A7UI2jmjDA0XCgM3YFGSM1x+OWcD/lxyfAfZS1AnmvWAyzod\ncmKMqK3D7bJSAWAQgX4rQrxfw3aiVLdYdWdzDRM1OX8UrE7LiOzaOjhkhEMH\ngDRYrdGWMi0i4WUyHY1Hwo9MjE4bPxdbdyWyyTyvZcx5yJZxnWyPd7dOGsOd\nQKr6wfS6lyRWRlGOr9Jhhtjo0kYLbcylCUzX0/8g8d1J+Iz5nmYzP7c8Fvyg\netCPWmHT78mA1OhWuzVrYzfTXprKRijp9gzgXTdfqS43tm5E3ji2VOfE3HOW\nN1EOBtk6mv74OD67RtklcMPbbbcN+bvrvptcJRx+rj2d8FKenixkCraOrFwQ\nUvrzRglafeO4PYYk409KJp0mDHWblV/ZFl1IHgJO6aOTBwVfkLio3QTEcK9w\nnmQI\r\n=Mngd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNANDIVmmU7zfwbWJq/xFjAvfoo6cBoWyAaMcrJwmSwAIgXxsMUzRC5FamiqNaqV142/Hw8/mbs9lKbEENyHAF2Xs="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2989_1586432951169_0.23375555749214372"},"_hasShrinkwrap":false},"8.0.2990":{"name":"meetup-web-components","version":"8.0.2990","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"25244a14190428c48f3890b4ef26478a499445aa","_id":"meetup-web-components@8.0.2990","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mFSDZZz+AlWrj+nYia22BhbZiC2gY7JkuWGpMnKkwgjVvVsUj0wF3sBnENQ9Ei+4z5chyO6UP2a6xoHnx1C3Sg==","shasum":"eccce3b7ae5c3a5ba5c573197bec7e3669d1975b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2990.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3b0CRA9TVsSAnZWagAAwhcP/RGXyFxuHX+88PV0Ibse\n4NoaaRK8eTK4gdpNGYbAseW9tWCmGHBIRiNJbmBFpQNIIWV6zM6dyNLJaB8t\nCRdZPZiVzH/E8Z8NCi0mtf45vKtfSdMZm0DaNd8WA4gtbuItxtOZr+bTjt1E\nbMkMDCtsKTDp25b+6584uHdlFyPNUTTzRVEnxhra4LAP+7h8SPjvF77lj1sL\nB8FhkaXsw4mrcQS6w5Ghc3fo38TvUG7srV5ZxaeknB65UP7o3kZNLCu9h0T7\nOmF5cDFZeh8u9LYdsXEofOrEPTVTbL5vEQprakcmvg+xXSgXqEoAGTKjUgCY\nNU6Teurf2UVS94w8uSna89CWsO8GqLD+3YKoRRp2c3E9x561Z6tsDqQeVgyw\nQp6O3dKBYTwQncW4DGuzSAfZsQp/54HYf/tKo44Z6Z19Ae0hN6bHrLX7oqUZ\nh7gRx2GwV8h/D7gKCjUV7IlitBepqT4ngZzS+iFIBS9yH1nBg94e25qhOIES\nnabixicEWoCNpQVvqWrDJ8T8gWV+knH37wvQVwOTt7T4cDO9+CZHCeRRSQ3d\nQ23y3/LF62Gckb15oxEziY/AU/q/auTkcn0E2S4WdaffYLAyUkq6DvdqMsSE\nG33AR/w/MgzEi8JB+tngEDOfLpOmuZDy92qu7mCnhTgPYN/rTTjX+Gcn6o4G\nYF/f\r\n=yORl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEroBUyKfFomaFxwkdNVNsls/3Gyyw+Mwe/xctDvNaALAiBkvkgPKORbPlJYBje/oCvZ2shYLhVNQOjiB3fqPCJ9Rw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2990_1588033267669_0.19427808238659416"},"_hasShrinkwrap":false},"8.0.2991":{"name":"meetup-web-components","version":"8.0.2991","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cccddef713a2a643e11d2c238f51218a1f9c9b2f","_id":"meetup-web-components@8.0.2991","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-JBytjKWH+9Iqg0gh0XDqAdhMNjW1caUoiLzddMY2f4/G736dB88ePryDdBJI9t+IddM9AMMdB6DlN4HuSFOOSA==","shasum":"922045319c64569e1fc24dad5da275b9ae24398c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2991.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3cRCRA9TVsSAnZWagAA7EYP/3Hgp4MWm9eFuYyCARxW\nCRq9m4SQhMQdo209uA/0pxtjcOq/TtvmS1j5FBy0KDy09COnvZcRKj0IoDBT\nOTOSTaMW4AumLtL6wIyIOZ7/EbJEAki1WYAVjSVOvAnXeetFaBHkRV2worwb\n3U151sF+unmzLPWA8gHWRjTz6ANUtNm2L+nVwnBmrHAGxhYlDJLVVQaOXMn1\nNGl7FMOEQ/J51Td5K2e+xkC7QdHz3N4PqCznUv1ZGhVF6UyZNcbImSPAHBJS\nf9QpxXQl8rF1O+fcdItXCoWwFBnFoFFEz+C9Kg7MLaQ1/URjM9kF/FGAYoMQ\n/67bkdr6zGf/u8vI+3vvvIF2HyVNq+cif2f3h8P4nQC1bUrNdiRPP8xJ0xfx\nTx4lPv3++gbaLi2GYo/YVDNTYoy2cZNFc6vEqVEg7meOz0k+f9ItwmoZ8deS\nDmQvectsCEOM3PT4pxDtuhEdj4+CYNuljqP9aSQB3ckYMDuNHo/QLRZXrayg\nXGD3H5CuT3Ab3dEnnaAbPEj7bxBDRPyIWIs9nSqLyzLjWsAlzYJVAJ1Lqmg5\nZiAFKqCEz5u22L/iHv1rGzS+F/VMN72GCOGQAa2lU5CBfnPA31ZC/B4aMKYo\nTRRGkqZ9LtvWHEvSNWw7JNI/IP+dCtLK+Z+usxiPE8xybUjz+oSAXRZY4MDd\n66zY\r\n=mG0y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+7piF6K6tfXReKU+iZTuDhOG/anSDgtVsjJ+9QyyI3AiEAqQZKLD1RSLO9s7g8JfT9L7pVmo5MtbVolUZqRsbd8eI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2991_1588033296460_0.17939016771191807"},"_hasShrinkwrap":false},"8.0.2994":{"name":"meetup-web-components","version":"8.0.2994","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8c6b74aae23132629a25f20e6cdecea61c0d6c8e","_id":"meetup-web-components@8.0.2994","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-DQZW99mVQNJFOxEcFv7nLhG2J6olhQ4lWItXKYbQThX0n0oEBkMbmSAzRwxaIdOhPHrSWymdCAd/hfIcafAtHw==","shasum":"7c05290fea9fa0237c14622330aefed204bed26e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2994.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3czCRA9TVsSAnZWagAAZw4P/1XzTzG6zyqyroCbvQ09\n0Pnva6hSm4HUN/CCqi9DTP5R5/le10CJeI03BrW8NqWSibL1vHSj25pqYqNo\n55aOAduFx+1UTpneUxPWIphvPGDQhpCAJfrvnLVhhRp4FAykiXRK0g7RyYRO\nS2tYten6PJBC1sDx+plEbDi8+rB88wMl+6aGoLTMFDQ9sxE94i89qLb4xOO4\n94Y9d58nHivELH0orwfxZ6jeaciIQvqHBxQlw/nyWJ2p0mq3WMzwsz2wlI4A\nPirJSfbZqw9XophLQbFnutqiZ8ZTBnXAjr1Den32wBMM7WiPns+vRXnXXNOi\nblI/qmvTXTTwXGLYeGpMhmfaDi0RmqgVD/abWA9o/++wUQwcJiz2KhCuCvGQ\n+8YiopbmBv5FEN4EzYIvK594PHsWiMPhaUJ8C/GH+t+dUjcLKQh3PuHAbX5U\nXvkCmaqDhW+PLNx2JOZKn69R9hzUOR9DQHD2ciKc9sNNc2v45kY73HYxHmLZ\nHo+b7Bcl3L6ic/h9hqZ/+GTaKXacV/bc3nRp6SA+io2N5tTkFXtfNI6Hf6lF\nY4wOROkly20Tlp+QOuvCmi82H3aRGETpknFbS2tipprsCwVTG2xnLQsyLXcF\nAqf6J1GTdu8l4YYCMdKyX4J0d6EGjAjK9zUq5LYMEXfwI7CRGMy4eopEOJI3\nt9yb\r\n=SRJC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHTxgm9SOxTG5d0uOdaq6de3VrHwQOys+vS/he2GJ3tSAiEAhheig6b9Qu7ZacjsJnixffcD7I/Dum4aN8/nzQZM5qI="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2994_1588033331203_0.23398809794821585"},"_hasShrinkwrap":false},"8.0.2992":{"name":"meetup-web-components","version":"8.0.2992","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"84088484f21ee2595cee9ec88092bf639a26c738","_id":"meetup-web-components@8.0.2992","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-n/V+Jn2E1NZTLgY7m21UGcVudYEl4JctPhUYwxue7kFZ+syhqudI0jMh23V8KTlHsO5prIZpN1B42t8hFx7HZg==","shasum":"d07eef89505aec25c32b34d747bbd92451057047","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2992.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3eFCRA9TVsSAnZWagAApJ8QAJ2oNPYAyNEga3lXQOJI\nVHDrIaO9/I925OpSYx8MhBopuIr24X9KMTMvFPpMlMk29CqKYInDIS2/yqx2\n9SyoU2GVvGNV9aWgvVuC5QLXMOKL2cX2vi6C/Xw8Dt2m58A2wSU2jhpQsFgj\nmqmx64zyGag248GL9RG0u7z6HqYXpEEuaR+kIOeiYBpeMB3yzREyb+sEevwl\n9xzkzMoZk/w2Za8hXJTxLK8nVBPOk0hVQggUSeGpH53d5PoW1Z4yDmXTeXao\n2wTMvpRVCOaYHOP4cwQy44EnZazDoHDXuZzFsa+4jDfoi9axP6g1WljFlF2L\nSDeJJp8fJ9h7O9tY7hLGSDXqAh3tIxTCUVElk5RFL/BiUpIn77boHyGiRewq\nJz9BTX0TIOTVc60k8xpDXOXf3m3pryL0SevW665F3ukw/umZD6Qvussxp8gR\nNhhe+cCk0x+NXLfPvEG4fAB/iIeXHZIpVVnIkmvBhTyuPjDuz/KPLqqNRGSR\nXo6v1jMXESUjnCXDbXL84rJCna8RPga6BjK0ILBQTVsqxl2rx+QD3puk0gQX\nN0lvXFpgNereXA7qGPX+8MHesxlzhh9YqUa0sGmNPUH45g9h9/Wm7kGQAH/B\nzh8OSkAmPdgWFlDfqfEho2S/gHG/Oib+SQu4c6X401GQ4hNs/M3IfPp2pEQE\nsgIL\r\n=jgYM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyBWr6hvV0RcV4lB3UBcWd7AesfVZ5ALGb5D+hvM+HJAIhAPHP+uQomZGljzD5PcFzt8ca+NFrQsJLGyH+BcwIvVWU"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2992_1588033412740_0.4225421881589009"},"_hasShrinkwrap":false},"8.0.2996":{"name":"meetup-web-components","version":"8.0.2996","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"463808730d06a8035dd7e4603d296a81ce4ba326","_id":"meetup-web-components@8.0.2996","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-03A4boCQbrCWhMsGCuwh6GchakdbTBiz0lcHGRwhga4xGPSdsMsUf02RkjIp6/oI2PWP5Gy4eqyWivNokzZmpw==","shasum":"795abb9f4a5d19dadf2ac10b443c4b5670a78969","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2996.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3eeCRA9TVsSAnZWagAAQsYP/izIgYRztnOJaCd42mTG\n2vnQE0bLo4Q2T1hTbLUdZ2M1HbY7tBQ8fvbrRt/Sp1tJVNQakCXAolAU05Ix\nRSq1KedUrHxcCD0Q53VRzeHZiDRgf38wGKvw/mqFQxmdnpimtR7gmKzDSNw8\naXQyQ1bAmAV8EmWqH2pDc4oJx3uHzlSTD1jiQcGfX3xoJLNCRnRDNVDhapEt\n1mB3A9B6aKflpo3TPkwpPaVxnVg78cImVkimtb5xNSJe0NYuoealFlzi7+UE\nixSHNpFBVpqRD4Yy1NWZCAZJMtDsAD2BHz7QDMTTYhC7JjKyiHmt9O+mblDn\ncD/d9Lu/0TUTF0UOS4yv4lw5AOO6bmVDogUqierLT2b5/eeIS+QZEH3cRz9e\nvbEM52uxhwR8uiqMvuuKE/aqpkRHABN+jbgzCzbBYjQFSUuttT00uDEfIOAn\nHzZvsV/8skCIo8KFrR0Lro4MlL71s0XNJgU+4EduMWUB5YK3/CRBEpn0F08C\nEbsQCdz1T5Oca/6X5xTnWqu9cnJqedpq0y3FJRMCw+5MAK6Fvlo8+AIS3vlL\nSMJVhyNRmy2GDMwlBwLkomudPpDwUulvHLcu1oAOc7hGRMzWULtlFtXADaPL\nmV8LTWt/kAtwWSNhnFkxrbFdeAEUcZKbYRPIQdaREweReskAOOSXsy07xUee\nOl9J\r\n=8R3x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEr+pvoLhfe5kxGgvAL82gyEXnqnSqqdTyB93FcxVeXgAiEAjc1deSt9bQRGPb+/CTKIDTDu+N6wuaEtWs6qQ0Gq09Q="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2996_1588033437765_0.08289203324568728"},"_hasShrinkwrap":false},"8.0.2995":{"name":"meetup-web-components","version":"8.0.2995","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f4e82e8cb4e47ac51d952201f6f97a2fce1fe2ff","_id":"meetup-web-components@8.0.2995","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xO0dSEMQ6flZNU0kBRM7zlQFNhOwyYLsyd/yGLTHm/m+ujpsNzK5LlqiaxJVfNNeIcbiDlst0mipNo6FRtn9Ug==","shasum":"6826fdf439016b34898c32e65d98591785bfcef3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2995.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3fsCRA9TVsSAnZWagAA7iIP/iQtC/7u9+YK4p5bsg8o\ndOcdC0/IFVu1PssRJVtbaEyqj+qpKy2KJwRp6PgHbAr8cpISlScFnlFUazDx\nCayzib3sA8hMYIfnVN73jngivdwDfcIJfGme52sYCYH7K4if/cDaJDyTnzzs\nzsUQ1Z98bD7K2lAQ+ZA75abTcdxgOaLELQCmzUAU1Bsg4NoyKkAJdB6HschX\nLb/0x2Yq3BvwMMAQgUqTj7tyrK6BnttGdsKJjclXb2X6QcZB5md1CwNtAzgT\n164hrHnFcIAKWnPdv2O3+EiA5tj2DD8LIU5nxsyz7Jm3cGfVoz7NofLM4Y7+\nEVTpNHwf+oZRB+NUjhDsZj9L5PMAMPvqH2EWa2K4c/VCTyEgmYe8cO2hNWFY\nBf2zxsVJ/qOUh3cYFe0ylseQ82QBbZfdj8wQRUZg/e0bjEpvcGeLzpuir4Jh\nR8iOgI4AJ8Cp0LBi/SC4oo7ybGPnpQRZzuSTSSPkdlQD0uC4g21T5B//8MXV\nCl5A0tgpZPKpukJ4ze6YbKkXgHdoBDHktZOLUUqZQV827fBakQ9lSs1tabGz\nc7sdRfZwXATgmTewdB51v8JNyg49Eudb/ditwwT//PocK1iEtce7qyIb9R7a\nUKZkN7vm92LF4x+p5KcqD7DBe+hVqQ558YWXNZYri4ohzxVnwTqCsnzE+MNf\nF1Yl\r\n=PtQC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwD6Eg3iIiAsUMNnRl2IXvt6LaG/oSTfl/SyV5/ABrvAIgSZAssNke8MczywA/HyS7Mvu9yimvU4K9MnT+YfzzBAg="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2995_1588033515864_0.6000253068268562"},"_hasShrinkwrap":false},"8.0.2997":{"name":"meetup-web-components","version":"8.0.2997","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b19c690bf5f4f9744333bbf33e819fb12163995b","_id":"meetup-web-components@8.0.2997","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PFr5blKQxiUZlJV1nUQfx/kVIUxorHN3eQ1ydaF57Pd/zTL+wTp/023GIfuuTTwCS3M9jEjCbFzXQHjgJroNZw==","shasum":"f0d8045eba0593f3f1b1a3a21bdd5d17d61f4741","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2997.tgz","fileCount":613,"unpackedSize":3073478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3nUCRA9TVsSAnZWagAAf2wP/jstP/StWo2hwWp7KqRi\nSRyP0HfXw+pjteXx3/IalhjMGG9hSPpQLi1VZEXxr9lZkrHlb40ZtB8wtrZt\nM11T+gJicssAt5Z+aCV4YZpfAAGhKQYnkiucR0AF2vsLQ7DQReVoan33bAVk\nnjHvWVZgOTF7+CVDoPKnUg657KS42CC08hLG10QQaPVuOiV11ULgz1k6FIDn\nzFhWEsKAEv5s1WQT0CxF55HhQWGU3Rh5zHFoQJ8wHB652Sx2a++WH/7J1vRv\nJO3v7l7stXSRpFcWw6RCOxYHOdFmtfeizbidbUdRW3JGHSW2GuWgBM92SuoN\nN0PvE3+hlBescuRI/KfMVG16eHf386M9crI78QZLXadw+3NxJg88jLE9ScWX\nq8V+wNlYsnhXDZ/KfYnoRdxy3WTQFVGxeH4jPVv8Ql8GcxcwgSa4ycHSncnS\nLkc+Oxa16WvM/0KkhHYlFKThe1msJqBHL8wcJkwMIAslg/kIO0GiOyiyiM1s\nGVKUK2TWexngWjXElfEanLnCM9qk8MgLzx3ceNL4hWJXDfW51NLM/FifzmLe\nsiTLJU3Lf1if4vnqtK75Dy2wGMKT31OboQkBgT+bMkxM45RoTCWQhQwvJtU3\n3lAK8erR5ICidrCgbP3//rbZHAJq4I80QOvwFMwXnwJN8eRtrKoRA07f65zV\n6g9H\r\n=eYro\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCI1nMm7VWuXPxzZwMkch1LwrhLrCerXAgHyRt4JKrFMgIhALsubIzV6hF6pLxoCVYlXtuz3EsrYNYGTAabJNgThrIm"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2997_1588034003526_0.5168442883784932"},"_hasShrinkwrap":false},"8.0.2998":{"name":"meetup-web-components","version":"8.0.2998","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e12fb11c14edb017a563e8f6cd6c7d4df6c39408","_id":"meetup-web-components@8.0.2998","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-iAAB7Ajfl2o29Ilgvj86HQu4G5987YyikkpNza4jGewCrgzDZjFTzn3HgaW2kB9uIRhGZDRxaYuhWglRCL8r5A==","shasum":"be7b3517eb275abd47b947a5fd32f30b449bb1a8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2998.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqDq3CRA9TVsSAnZWagAA4DgQAIdtnI6KLB2Rq3s+AAHq\nKvi8e1qH5D+N70rpU1D8ZqWkloyDIcSP5OUXEBgzklTSCTYUJLJYtCPEiElF\nHHgZPCgB252xOyILThMuXF123Y+QFYl8ecPqhOetg/uHnP1g9VXg0ibu3YDc\n+AjOD4IuVcLxocaYTgnztqNmZU3dJldjYIZTF15Fn31lp06FHv0k9NyOUsAE\n7MnGvbo3ThQlEjvkeCZcppHnF4mI2sFVCNWqsDoYzzcylBSLcYlR6aumZj/6\n3ZFNu0HRdMSQWJHKnHeJxqcZkH2XsWUcV/2fClV5tQ9kKakjmE0DdlUUyTYg\nF5lMZ4OzholynHgdAGIbfwzGEalCPpuxZwfGfxH3JnaXW0ofqOHR8Uyx6bUV\nUqFDRqLVjmemglRaJxaL9bCuzH9OO8Yh6+H3Bmi42ZEDoHDHvl7R+YQVR/1H\neDSvLaUQi4RysBMsy+qNNABjhxXhPCph2SIQFEP0jv7zqyAjQjiG03wbrtzq\nOXkijYkpXSDIjKLXGci5u+4vlcj7Xt19psNeAJrJlTJdMppQaZas1HdcIsKj\nxCdrX6twqG+P3LXuWqd/o9lTwk4B19DZLlktK3nxffDHmWtPLhUytrJd/wxi\n60H2kNFsko27Z01Y/1oZqifTsri6tlkN34FCDO7XxfJjFwY1eAKnKzvtUgmJ\nl9jk\r\n=f6dF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbD8l3sbDKBhfOuKrpCJAdjIMwEzS99cVyOySogJ4OLQIgSIqMgU8f2wePP6Be629N3ChJy9SZzJNK3JLtEbHyyC0="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2998_1588083382561_0.4184232492402873"},"_hasShrinkwrap":false},"8.0.2999-beta":{"name":"meetup-web-components","version":"8.0.2999-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c4bb8537ecb796022aa18d575797f6b9a52853f9","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.2999-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Sqeo83cgUSNXhf7IFrn7zzQQM0fu9UE2yyNYlmr0g3PBg7GFSoJVlSI+D/fHi8y6RvdFrU/FkBWbTtTDyjAv6A==","shasum":"c1de689ef6d9577384c50b3b84087c1787b5a0b1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.2999-beta.tgz","fileCount":613,"unpackedSize":3073548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqg1KCRA9TVsSAnZWagAATkQQAJzJVhnoxo9lrb+jfhkE\n+6J7vGC/EJSTLsyTYsM68gzelVWe+Rlf+Gp7LCSRWnbh1/cgbIOqvofbZdBj\nQ0tDQ6Y8orRbrnVpMU+/VSK6tXY9Uyut74QQxcU6qfFrYXxnuisznoVi880Q\nVaL9axQRxaUDjZznj8d0FxPMGf+8jRjYvdHtb1HWcWrMoXZ9lxQwkpm+whnl\nqGpkga6i/p0n/wjIMCtve5KPDQsUUXOL4AH1mC9gjBgKi5ZbHwDy0H095Xo5\nltOEHfaMUCAqYUtVijotQ2JHkjNlQmqm36YqaqXLkeyNStiPZdqW8B9QaIUx\nnNQUIFYakejI5OTRecgxSlXQaTYaABPDAoT1bPbj//6UOgdgF7vWwi7W7Y4+\nr56DnZHnJCbbY5fneHLWOU/sCs0+ZavU/HKUuSNK1UXTn9tdcRAlAYp5Uhtt\nAd6to8JJ9uL3IEwOvQAtRdjZ929qYpwsdUGPUFf6JV8dYulJ0JeStqdYlfxt\nHy5RVZTzXtcgG20x2Uore8EDLRY+b6eZk3sBz+qAFhiRBJZCVFnDBe44NL0g\nsQPmXxHVCgRdMDzmKmAy1LmFzD02ARhVcFTHDjge6jOIjWO2MUgwuKRQLHbQ\nSBYGdU5S7ByQHiyJXV/wQKNR1vT34O+cvLy18UuLpBaESSiQb/wzlNmejA9S\nYazh\r\n=7yt0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDexVRHPBzHupQqkX0PZmj8tK54Zeaia1/8BGhs+sQJwIhAKgIqt16jpZrSaaZuOq0hQaotTyczVP3skwyaAVDF7Qb"}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.2999-beta_1588202825405_0.0843033488708198"},"_hasShrinkwrap":false},"8.0.3000-beta":{"name":"meetup-web-components","version":"8.0.3000-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6a42b2e78dbe57d05296189eb0d1fd5f67a31e28","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3000-beta","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4AugQnKPj3xAHIx9U7u//+E6Z8SFnH8DUeiVn4o5ZfrP7DsSsNdro1Z0q+LS12CnlGIMz5r8EcqVNa40j8OXhA==","shasum":"9242ffb0cac830acb8ad4866a8181729464d741a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3000-beta.tgz","fileCount":613,"unpackedSize":3073548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesXeBCRA9TVsSAnZWagAAxCkP/A0R01QjJD1MJ7eakqeL\nrI9buFhekjRPKbUlTgSSvUYF+Wlbo9gFliUgmyKGvkWpQ1p8SNcrWoE4lR9f\njTR+vRQQtuZsHN0WT3jscP9yu0In9OYF+YTFlM9ovD1QVlIVamHI7HKsY09U\nve/UoET06hywB22Q2CrP0Oc3c+YhvXP5ns2UURNO60lZJwtjlf0UPYKkH62l\nG58oHTn2JhrL4MvSbId/ez7CLfR8fnYcZuW3RBOFnDx+7Tl9Y6s0sAJm+xMV\nGj1brjsTTfpto8nR+dFkgy6NNe7JmUzSxTjJ82ZPciio1wYCQYdw1BjEgCXt\n5EDgRpywnmcfRa//OcAmb2zH9SXdgrjt3HJCCSFN28ZzlZcA3HLcxh8+2AAE\nGQY2KFF1SN4NEMJqR2fSm3+WWwa9EtR5V4K7HCqWJD7w9JA6hDE+ygFB3c+E\n2ZbXpJ6UhCSfwy/a4RTYZpxTeO18uYTB/FJ3ZjtufHXRr/6210yPQP62aivH\nLta0kKp87zHTSXC2trqLpTkDcBOo+UlAjxYJaUX8NNs5HqmGt9AHvMlTYkxh\nolYNOeNO7KymltMVNy34/CLJIHwl1mlT9J0kVNrh8BNe91fGYMTR0PdXchfG\nfld31mgoU4shA/YNckSrc5Kx+imaBz5C+3yxWijcVE0bgACI98ostGW5DOE5\n9Jn5\r\n=06p4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+VDBWFLWvCsIpSdEqN4dZSxHQK5/9obwJ4Nwm8oj1yQIgMEjeaEEYpdZ+o0YSnV0D4muel3uflPdxboBQtKVaFiw="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3000-beta_1588688769336_0.11748798518333436"},"_hasShrinkwrap":false},"8.0.3002-beta":{"name":"meetup-web-components","version":"8.0.3002-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.20.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"250d6fd5b6bb39bcb294560b0ed656c4f6dac821","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3002-beta","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-3TwVhz6yPxcyS9HO2Coz6m14mL8C6mBsiKWFoHso7GY9OG2PE3EWvrz73g5XQb3NgQ6TS4gTwMFD3pPM3s9sUw==","shasum":"0a24b17be223a866838a595adfdf9ddfe3083101","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3002-beta.tgz","fileCount":613,"unpackedSize":3073533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewxerCRA9TVsSAnZWagAAC54P/jN+NChV1C063P8I7ExY\nc9tSUzzpPi8feYmnLg7KkWL4BWkpJbCH/yQFC7GXHt1hoVM+QXD7XLw7Ijqz\n3bAIp0/PunmHMzBCy5Sg29ibj2nzzY5k0m77xN/j8tfjTBD624wnfzky3xnc\np96ZV+00+6YwdWa7iyO/SDd0WRvlD6Fo2+JsYPxvTJq7rvFqvrWkp1fJZ/1s\nE9vnDzzhST1XUJ8M8frytZX8suKz/sHCAF5tbFpgY6fpGcLyGN/6rm2NjJsG\nNhGwMaYH1QA3qWjKOyA6Rbg8qHjcZ7ot45izW0MtPkcauLYjkZ+/P/FhSbrI\nEg1QZrww/imHDOiNsCW435UjGZxLhT2RnOgtyJPmUKmJgHahwjfu0/C7nIwY\n1dnGSBezBVRzeg/Q6CGhvsC5VJTY4mtNdo6zeLpFA5Y6HHIaJYM8e8XA+Aya\nHlR2CX4KazMI6Pgi57cdl28gqoR2cZDW9RWGcwpIaNws6yfZOtL6iBu+CWxC\nFRUXpB4yqG9hh3v4OkUhUTwbXWbpm2LmJcevstwnCQpncAd0StWDxBNH+d4S\n/zsg2K8RxaYm5AHmDG23GLgXg1UA5FQatYgwElXr6txQBLzKkaH28pzRGayx\nwR3UdHe0PMCJrTlx6k0uYu7Faqj8ns5+YMcmGELPIVGPckXu4cd2ty29/pDL\nN3uY\r\n=amay\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARE6Ui5KRiMNHsjIg6wr+g9AsDsSYNzQmQYDvsFT8REAiAQuX6E2FxUy+wC9vCSWyWx5fhpAtjebv5hTl+hysdOkg=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3002-beta_1589843882703_0.27282572541789984"},"_hasShrinkwrap":false},"8.0.3001":{"name":"meetup-web-components","version":"8.0.3001","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.16.3","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c6eb0d035e7aef93988c838a33dccabae0ff7b0e","_id":"meetup-web-components@8.0.3001","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mB59B2smg9OCZvxgYiNHN7AkLh3T6gujhn4XhLNVOjkb0pUzfGLm1MfHbNfUH89SlHbOEwTxPdUmRPF/xV50Yw==","shasum":"10fd6c2be55e9b790412be30ebb71cf6670abb9d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3001.tgz","fileCount":613,"unpackedSize":3073543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewxixCRA9TVsSAnZWagAAj08P+wfEkEvtbnLfoZfVme18\nCQwVjKPiczAgpKf7ZwphDYzVARBLR2vjqQPiPKG7VkdKTlKhp9MIITcj2Uak\n6Al/wgsnVaZ1R094k3iYmu75IRkXjHhO8yl0n5a/IhFKZUsuAD9lsI6L7qei\nKbdLhEuSjppTQxJOkYuzB1YlN8dLH2uhmQ4kevlmpW9/L6iaDnZW0UPvYDgb\nnBsIO9hMAh91BjzHC1jujpQ6CssSU7kYWGBMZdD9DIYtFwxvL1NCt6yCebDZ\n5WRe0vEz5P+I5qT4kz+ZCziaraFE2iXzzCvViImzP6Iy7gghjFRlu11lTdWA\nMcwGuzD4baXhRHBEG+/YX2ZYPtch8f8YRJ5MswuHj8C26cOiv6CkY2x7f2z+\nkF26CYqW6Ilz9KpxVKZ1deP0Qe4yz5LlWjkNQPRHEvUQ6fz7Gb6IIspVpME8\noiW3DfyMS+l626tFeGHG3lmF0O+pbdgp+icJtYrZrIXgxNYn4EdFfB84Uk9M\n/zOM52rddV4wvWCnLUGc65DSD3eCzDBg07pSWW5QvGm7ERd6kb1W2m5AP34q\n1hS1FwmwTp3GPjZsymxm0GFv1XigRNLoS6TlgIpJd5pmYodw1L9Ctbdx0omA\nCnFfV3iyjV/zNyvEg2QW6kYhlC8j5ZtuP94bQqUdp65kIj8/60gcYAd/q+Al\nahVI\r\n=I6Tt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+EdzN/dH7s++VnG0l/D+gFh62TwTCGAmzURCIXfZQPQIgEnz6ZYgeI2RrCZpsv59occ9J2ayWf0MNuB0yEP2I6fQ="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3001_1589844145269_0.7226936539284072"},"_hasShrinkwrap":false},"8.0.3003":{"name":"meetup-web-components","version":"8.0.3003","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.20.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5901b22d460973e47e2b5726053ba5fa8ca3e596","_id":"meetup-web-components@8.0.3003","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QWp74U/O5GI6VmrGggDJ3XHgWOeCsPsNAqcKk4je9VL3NBbZg/KBCzZifBwpaM2jYr990qY7ugj4EJ9ZAcXTeQ==","shasum":"657abc48a254ebc5aef5a4ef9701deb1c64452ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3003.tgz","fileCount":613,"unpackedSize":3073528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewxlGCRA9TVsSAnZWagAA5a4P/39X0s6DLsmUyzfszR/8\ngOJnkyAFtpavnwMzgb4+umRO/GHk76zloKpy5Hi6+uGDd5Qn8HqyzKiLg+oj\nrp7a9YKwV7rwO4ktrv8lIy50kaLvf5oSqjOwZN7laEQdFyqN3Ah051P9eux2\nwkwr/LoobrgxKjjZiel2K+YPpd5HCJ04AVWBdw07LcmQMwWrVJmcH38E8VUq\n+N1nF4Zz9QKFdwaMheNy0YDsIuT6BuG2GH95ZfubGeZyYSR/R6JVI3lUsLNs\nEXcLOIj5jv45J4NDGtdyI3zE1F94BTHEEjK3LZ+l66kPDtjt+/chURAdqFA4\nRXtXzVT5zoxdeCsXQ7rPUFA/QS4nUOEXlo1gQGcfunvI4f0Vr9PQopzjIEuw\ndHNgK6qaZQhqGGOgUEwAEAXlnMg4wZFgVAouw/DxgPzLiwCN5D2DrQtLbCiu\nnFnlPmMlt9CTsW5Qdlzq35SA9p3fv1z3iLKWOfhMgMXwuzb4zNWDGRh6Lq6s\nba9/KbRQhDDLAheZObyTl0wN77NS5l7A1zDfQUqn0QR8oDv/NoIAbHA2cEDK\n67lbViZZQxBMhXoe50m9+2u3qX+m6xhcwoVY2nYH/hqbTOe3tXU+ziX8gsYe\n0H5Att4d0jhZdVAeHaa+iUvpHiEquGXhxouVH4erQwH8KeOwtgDQJwk2ebBr\nE0P7\r\n=qgGP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE5lApfxVHchnspLkQn7D6k/+ZHbALoA8h/ElPQPQFVRAiEA2zbCBtnKDSZ1PFbKHNU6phhw93mZc7ELB3EX5Y+i8hk="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3003_1589844293556_0.41611009609880845"},"_hasShrinkwrap":false},"8.0.3004-beta":{"name":"meetup-web-components","version":"8.0.3004-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.20.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"218f3edc42ac280b07002759255e6c6cbf709d91","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3004-beta","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Vfv/BsDigNExNsER8c4or2ex5yxeCKeKWR3vHiU9OLLDIF5oQrGtT10nkN9prwytvygHPC6xHY9mIeQjYZ+OcA==","shasum":"56316eade389323d847c461802a3fca28cf703ce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3004-beta.tgz","fileCount":613,"unpackedSize":3073533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2qZzCRA9TVsSAnZWagAAIvUP/3q2UhGU5zV8gUC+kElj\nX11rjP5Yuso8g1Mbk589iaady3vnuO8WwCSoyQ4BZTVmTU5VafdoVfNIBUcp\nnRZfTOfg0FtNsDTDAbCEXiCHhmeimYudl8HLBnbCI9kuLbv5+1c1W7IxKPwz\nupaxRZPPk9hlkR7T6w4rNGG8LB9uqdJKM2xJcM2nAyqutZk/qSTjNp77C+Gx\nmc7vooCqYPEmvwITa8bT+/kboOwOLS3yNYczVRt9HwSzgJ54xb+luYyJ9wIL\nIu9OGi3e89XfgCJPD0ocz7nBLvVnmWp9fqasjdv2UbGGwv6ExYbpyfYI5PMN\nAqXyi4SjZb/GZD5DMJO9Ipb+APd4p1B6bSou0YUqGlhF1kPojdu0tTQX+mC5\nPCjBX5VLW5HkFwu1pg/vTU9O9SuPTQkGwVOfRfpwiHqRDAZOvOU7qJrxefth\nyFRQHdVzZNQDJLBRtpWKVBhYhwFR02/FS1XD2gLDQKmozALjFws4OBFoaL9O\nDZUQFs/LIt6CGj2yRk3eW4ieqh2URUcApQIKbPdKSCxpwPS6ertf43KMl3/F\n0TnOz0FzbOuxJNAJiwSFLDtDB2/AoU/dy7EGYJ4mUTbn99nbFQivXHnAv377\nK5HF2k6yDL6Q8c8ujkW1DeefyphkZ4owtPDYZOrouz9C0B6jcFWsFXISmOkH\nHV1G\r\n=eWDk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH0lSifs+46XhbPbxWrmG/D46aVy85NLwq5XyNQcdE/ECIQCoC7Q7BhkcjH6kZda5BnhrXNjnDIN0hxsBt/F6aqbB/w=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3004-beta_1591387762398_0.6280617806575735"},"_hasShrinkwrap":false},"8.0.3005-beta":{"name":"meetup-web-components","version":"8.0.3005-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.20.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0f8d15ada4d171c9522ace07138e6533393d08a5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3005-beta","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-j/b9Np0mWVAzeF9IaZTI+t/arNuYao2/H+PB1qDOP2X+N+4aJXwnWn0Jm7YZAf7wUD0Y8GXb7IvR8Lk8L/d+hA==","shasum":"3af348129268f951eada64a8a55e8dd6c1766b64","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3005-beta.tgz","fileCount":613,"unpackedSize":3073533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIe3CCRA9TVsSAnZWagAAgzUQAJI3a+ghrFFI/ooZ2C1X\nRnQeYP5x3jectDJXRqeAzogJ2/5KTQSwQN3Zo882SqP7s+46loowFKsNdIDi\n5h9zd3qhFZhB5Vf+07Qu8YLKVZH9VUntkawuA82bCXAtOo4G/z4HH+FUV6u7\neoqKHS71YQuOQXXWZcv9zvvYhNQgmYYDTXhyGtF78JABZI+P9JpO/73E4Wdc\nqIiYU3wQlncEn7nU2A1emRmH/rd/uQ1LzDQohRCqRISQArXwhgiTgusZmi9J\nNTO/MRVlMr8jUos96utO4KECNo6nKL5acKm6iDog+BGRAfVIF0RMlYsoW4N5\ny2AvqruS+mvDR8yDPiNt2mKiXJ5HYZxDc6NR9dLE7IQYcITQGFD3L1xbflJy\n40yAqWZMjvxtiE/cB9P1Kbpp+MnULEgCquyz6NCAxflrsbtrcgQuf1aDgeVI\nXJDMQAvpoRML0vAZeGSbToons0Em8Yf+cjRVkIN6BMfpFHrmVgwJfM/Ah9n/\nvzFmF640XOxUBUfuYGTlQcONnllBqczWAVOLLPG5nzVfojvNoIHPyFk34gIL\nRJqmxgx3zMq06sTHJ81L/glVUgAij0CTkMSayxF71zDW2/0mjVUM10FiyaeY\n21XlD71alCn48gl2gxTKy7YfEpUI3OxNVhZkNMjtPwFAq/heBrjCfsBZ97gq\nNSsH\r\n=lOd3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFvmwkyzKj6nd3zDEY6hgs1hEuIn5yLTAWSz9lE4nq1pAiAet4uItqWbZBZfizEVVqpPEcj1j/zZS1h04RT6Unb40g=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3005-beta_1596059074200_0.39579997230653774"},"_hasShrinkwrap":false},"8.0.3006-beta":{"name":"meetup-web-components","version":"8.0.3006-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.20.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.13.1","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cc90909871484b669f2fc306d275fb72a0239c54","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3006-beta","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NVypZSeLiurC6K9QKOMEn4RmIvwSFzQ3y+GclwO6z9+8a+6khowyUcARsaN7F33uYVxS7m5GMrJ1I4CwXfCvLA==","shasum":"09ae3b46768a4042523cc1d6d036c9d3a9ad7c09","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3006-beta.tgz","fileCount":613,"unpackedSize":3073533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUggkCRA9TVsSAnZWagAA4q0P/1CxllIWLTWlPLUFzkr7\nyCTS+/dQeedqELSuRs0UB3LeJ78HdAYjBu2CeNyxGfpkkimS/dQ065BOGEbu\nSA+ozglFGQDmxcSaexuzkFCLdFXyLSfGk90lYBfXqSDNlq7QCfokqD9vHo5Q\nwzTzXkZhnk+v/TUgaHL36axgtGr4aGzpXkqa8PXk5/lQGZDXe9+JtEwFx5Ei\ngbgs6VBjJiQpcDOtpnxVV49u+31DeW8UBm9WXEIt5cqyKNRmGswdM0V6ElRm\n6kOltcXZV3hwNnM7YMhiUaw/UX5Q/QTD5vxqLdUgD3juuG2qG25o0jKzw+uO\n4nsdtxJc58F7mETLKdwz0LnFNQoH5CH5bpA1l3H4hXbsBvRg5UwwN+mUmskY\ntE5NKP1+Dyg6GTTvTjk0Y0YNI4InBKaq9FHN5LbBZ45g5iBXOhGC3pnc142M\njsTC1vw4JTH5V/s7MPpDwe5XOVR1Uwp6sXZHcE8agrBVS2GSneBme4hg5h5R\npRG8mtV6v/ji6m8sJuxvNUf64cn2VvyFzBJmkuxHqtfysw7+1ERxGoKd9Nls\nXlsv3jRVwTRyvaScb25q8U/xO7bEFygcj3m1MzZGRp7DFjHW2EYZnKwgSjyR\nj8JlEtzp9+cNr7R61VWyITKOYhnrXccy5QYdyma7DHVTDpkjB8XNjXqCRERj\nXQ+H\r\n=D6mj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFyLeBuvGzAulO4kG+ye67pPJ7PIfhmcmytPpebAL4EWAiAM9CpmK+gL7mtXXTV6m8xpzgVZSuXoZTrtPUkO9ihsRw=="}]},"maintainers":[{"email":"web-platform-bot@meetup.com","name":"meetupbot"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3006-beta_1599211555894_0.2528406854478489"},"_hasShrinkwrap":false},"8.0.3007-beta":{"name":"meetup-web-components","version":"8.0.3007-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"39410fd97af14a3db2807cb9c2ae8f6a5617d1b5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3007-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-J+h0PyDNnGt9SXwcyDwWAqia961UQIOfD+hBC0CIz7quuDpimipAD5NaJz1t/97Qs7b3I81LcwBFBtR02jhwzw==","shasum":"ec776dd26ecbc75a3a6eb627734287302d3affd5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3007-beta.tgz","fileCount":613,"unpackedSize":3073533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdKOZCRA9TVsSAnZWagAAaLAQAINDXEpI6mgDofP/JcLP\nZDbqglpTypNxp34XJsX2N4m0fFEbJs+rzlfNCj/rDi2r+uFNNrIKWlLKI6RQ\nPWQsn5P32L8BENfQ0D1+1px61toygn6EbstOakAHK62CqR8zvxBPWLOCwArY\nhnk7pU4eKL0I+WAkLzi3AAY8YKJznUpSvX4kvi0EppM6wff8XRGn/1kU891T\nRCLe6q5+O7oyVOFPA5+SF+qY9PmpEH8FAkRz3I5LTYJu85mYWcKBi4AUms+u\nyuedZGd0bqxOfIG8OBW78o06SpzOokbGcqxvg0g+dmt0xLCQHMXOI1IWmw+u\n5+lFXQHa51tNrKDgOjsiiM15bfg+F8uuHvtuK1oXqVlit9X5oNp75hvtMZPT\n7RE0lXQs4FWm1mqpRG69nq4OTaNisC3a0Wf6XFia0mmcVfUK7I1Z9mLChlLQ\nJezGp0XsFVsa1ZBBM9sXbiP6lyftofLdz1ztvTZaOqNVY9qqMeOWItbPsBaP\naldPcrNCM/CoONl8QbRRyyShLi/l7AHExz5uBU0pNUuzUEL//k2uaIHlA1pB\nIjTJRr5gjh2cKzEEI9luBIDnV8mS3Y1BW32902b680BNpEdsB1BpQLvUAdZT\n/8JutGNPPV8+D67vs2lJIO8frI8U5zcnhHN2AZAjz8XhICg4aA7ygjHYVNYN\nUSKS\r\n=UYeY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDW0tz+j4Xfujrk+hJxDNkc//EiYnAyHdyTT+EvaPW//AiEAw0k1GGo8y5YX4/WNcQj1kUt1TViECpzc+5Jl0LpB/Dk="}]},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3007-beta_1601479576475_0.2994761918004012"},"_hasShrinkwrap":false},"8.0.3008":{"name":"meetup-web-components","version":"8.0.3008","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cdbd637f05c881de100fa040c023fdac76de2831","_id":"meetup-web-components@8.0.3008","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SMGtCzRE5ridoSH1rQf9zw2+Tr7c/j6NbonqOicQk2ZVBfZ5YIfd3Wls0N4ElkWNy2o6uBoC6v8m2rE2SPRGTQ==","shasum":"f50c62a55e2e2f9121879b94f79871564e4176b1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3008.tgz","fileCount":613,"unpackedSize":3073528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdLONCRA9TVsSAnZWagAALdsQAKS2qAOhtUPPY2YtIABu\nLw6/ya+S2jmf9xbuHPr52ZZhU7ticeW834QXs12u5beHKoKZS0XsceLInxRm\n1Vk/Re2OY1Mya4SAQ++6NXU0ErTvEoRXoqsvsX549O46/TNffdHisaj37JXq\nn67roajGyHTG9prkQ6qv96xkPOquKgFvwFQ/Un/zczCQIwrB1+C5uetfQy6C\n4bxjCjtzA/Prqm03cgzAXBb5RhHVo7HX+UC8Nip1gghE/Ims3oneF0qKK0n+\nSfdFWTkM21kLz7soKsKq+5IHOnwj4Mt26mI+oFDRk0c2in8waiyJUKuDGb4b\n0yELzrfXOEDpcTnUROaUmnYDdabl8DAv77vUvHWu1B/whlucidmlbiFh8yvK\npA/lUL5R54PDhgrGGukzH1k1J9HJALDyEsQ1T49+OZ6agvyOleWdfI1HDXb9\nNLnmbUlVyWdkd1UHjFt0qvB9QsDxOwBmLBr8lBeTpv9kJaqfbhLmat/1DdcO\nmWEYeEf62ZvnT57hVkanO59k9b9jqvDFzV2zdbSSC7rTqGo9+Dx+X45y2JCk\nJeRRkFxKQpfdVzHrwreGhgUkoECW5v91u2S3Ero22op2qAOZbYx5/jyE3809\nbimEKAMG3/u/04YiaNQ/ekiCQf/rqROlyC6aD22MC50NNzpS6LWG06VGLax2\ndSQm\r\n=rUJ7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYKWoKecES84wGbk+jr3UILghJvY2c4nRvuDNyrt3F5AiEA3y6Gds8FR0HIOkrK3zLjyFbK+N+wkBIhfM8iUUMj5lY="}]},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3008_1601483660547_0.5779359347429902"},"_hasShrinkwrap":false},"8.0.3010":{"name":"meetup-web-components","version":"8.0.3010","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8e498df80e03c55ccf5dd0ac0a82361a343ee922","_id":"meetup-web-components@8.0.3010","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bue8Xi0Eo7T5foJ+gAGXmc+kFI4t4StwHYmCU3fCBEOtVUvcJsliebzbk1zLVBK8/YsDkfDqpfxvAWo0JQEKIg==","shasum":"b956fb0f7345527e58fee1d526dd0d14242697a5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3010.tgz","fileCount":613,"unpackedSize":3073661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdMjgCRA9TVsSAnZWagAAzVEP/RiTINP00ur2PBTXntAg\nSW0XfAYnWe/ca+gD2Pno0uU+dIYVRZTavp5Ukokbq8+8EKX7cO8pTZXVC2Fu\n85sZ+Ee4rPE83/GJXH6dWGdWQnRloJ+XqA3c+Ru9KHqiVwOyi7Hj6iuk5VtJ\nxyOguTXPMypKax0RH/BTmc3Ac5OJOP2F6H8tURz0cSYDiV7KpbepPnt16/Qb\nWD5qvYSRRaG/0cyRFWEci38Ch8ggFl3FHzaKGxkA+L/oUY05OYF6t9UFCnKL\nyVrGcaE4xMd0vsia/Aj8M+UOfa0bSjrOwcj4OE1KHjImW1i8IEZJgUFghTV4\nUpbFvRG4pahC/4QLogCA2ErUDUG7ikyP5fFa91HQm2wVaOJZCnBOZOVuGnZR\nycpLGztVqTpnGlS0oohECH1rUyAGiIILoFC0B8re95YDka4In/cB46a+k94V\n0F5rFIO67QSFXzKHO616IvrIjW2733Q0QLrwfSg7k77sAHDs6L5PYo2Gs9T1\n0lQB7/gNApWn43Rv8lBDUXW8YTnpeWohdTupEN5wG4mzn5GnsK5UBik+0DZs\nqgjs2NZzydIbNayDFpFUmlx6FK9Ln0H3dCjr/jmWgYKpwT0SWlIEH8OzLW4e\n0iVUzV7OLbsNPu1kM+TKyy8eAgkXwWo2avzaqHsJt9QKnGsaesucD/s8grwJ\nUKnW\r\n=QWOh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIClopumDknXMdFQ2a5EDEOTx+Gi5wrmjgIrfR3K94rGIAiEAqS9CSq0kJvmoek3gBmk/LWf1V6pOq+LKaAx7gzseiwA="}]},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3010_1601489119635_0.29128904756819196"},"_hasShrinkwrap":false},"8.0.3011-beta":{"name":"meetup-web-components","version":"8.0.3011-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1fd5984482f495818ecb519ee2ce42d95199f4bf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3011-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UiB9ua/CSzFLQw789yeY/dIMb4ZDTuG7HUBYCakJMz0weRhHgGV54VqRWvHR9R51pkYYH+C1BdhWWXYf6tHjqw==","shasum":"620b45f2ef4e9ab3cb4c5756a275260ba2ec1298","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3011-beta.tgz","fileCount":613,"unpackedSize":3073666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdMoZCRA9TVsSAnZWagAAL9wP/j+/0TqXz5dqVmikJkZ4\niG+3d5OLk68gstH6clrb9rIkeIFhakOjl/V7gOkx6T2jgRQVbJeyaUFT/xhw\n2/PvbTWqQu0xIF9TmtOMrui5QjotnLJVj6BSKEEwnhUGNBxpa0lXQmL31+4C\nL0kHmf3TDHesw/vEI5AnKNyDR7zCgnGT0CJu6i4ZPxPwQqrUrqVK/2JG5Pxv\nnXrubQSwjunZBpJ7OZ76oHhc7GahV7/75bgKqQFaj0ExkIZfo8GeNn/zcibE\nyNAqv6dDEWSZYE06QWxRKrBuPfrgUwjSdxrHIEX+QpDsSqhZ5TJeQYA0kMkT\ngjF2UrF728Ogwn/Dsg60oPA77HsdCuQ6mCfaTma7adVT5//ccOUe8lShzoSK\ne22l914B7rCSrfIpMsgVRs0SYd/qOh52jaDw1nVFLNYJLOTXd8JW+skNVeuq\ntI/+xzKw5MaQdbZ7eG8HVV26CkDN6rzHm/fRPbRfFQ00G9zTDwFZu+Ah/dp4\nMB+TvT8XfI/Mlul0noGcJd0Yeh47+TIgEUzat+y9SraLnnbkyN/Jg7fqmjGD\nrjROAWJmwPMDzT3hmdPy9E41qrJ/CgPCY+FDpcUguQcozfM3YW6dKKPPPK9o\nM12OHo0XMvbEXV9PstDxC3zWKORUVZ6AvoE038DBHFUAFmw2Ics1ylQA788L\n1l5J\r\n=UjT2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDv3kBiqVJZS8w8yCkAHb4iMKppcGG8iLaoBQikp6eFMAIhALs5FOQCfUD0eoGIS5QmEon/NokNGRm5meWtQ3eOGJcM"}]},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3011-beta_1601489433289_0.13942871467079954"},"_hasShrinkwrap":false},"8.0.3012":{"name":"meetup-web-components","version":"8.0.3012","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6546a818160fdded9b4c566da79e1f3abc5dc3eb","_id":"meetup-web-components@8.0.3012","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HswB37z2A9rRWdeRhrZIyq1V2Ohb+1wFdh6z5T2N/Lo7rboxdfaVj/Ri/1xDDVrvyg85beHNsL6h37n+0zRUcg==","shasum":"f790d43261ba51f466bfe86631adf745dd36f92c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3012.tgz","fileCount":613,"unpackedSize":3073660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdPWwCRA9TVsSAnZWagAAgzIP/A9ob/nWs5ps6q+zA04q\n1D/3OK467n0zw1wADRlvNde5Ya5YMe80eomxiRxaKDAOMIBJk4BJhV69sJZI\nW56BoMBW5gARqRZGgSpKjsFt96GMTkUhKby4XkQqMl9nblHPGqxWqwgYCOPr\nsj9yv3lsg+7XAzHJjWs9cGOBgWfpr4QnOLjiaTOlh5L7F4/YWSZ/aH5djLBL\nDV9PgcFTgI2pqMgvpO+i9zJP4kQKu9wdK4xluxPy4Y6uxWDRQIaYiuEenp2e\nZFNvhd9UrJd7k5XC2/NrwE2OqAjORbwXEUn3Lj/sWhRGhPc/SGJM6526m0/5\nkri9aCvI+psjzmnQ81m4KgLzj+oQ0DEeL9x2Y1pMsDsrloS/ErJ7lHNYVD5e\naYC3b1DQ/WhhVnwZ95BDrrt8w7JPyY8axo0GPVXHUEzGnbSbY47RqlBLU0GX\nJc8nLTWCHS39E8iMYmaut0HsV/Q75Mp+AV9L/vlxCgs0RuWhvvJSKKKFxSxi\nK399KlF3uuM0Ec4Wj8F5aJomoBK2H5+yq219L0Hol0y7uRv6t/IqIqedo0TF\n71FNF2erU4v3E6HTQoOu6jSxTn1aeZOpyCga9kPunXQv/HwxIA/n3wrvQgye\nQakQH8sAC18g6xmnR6ssvcH07gBjCFsCOvVCRcIOp/vr3hWu/2SGRfACpyLc\nwHar\r\n=vZNZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDh1WZFxt10dvt2jDE6Epw3BMu0RSXHNfxsN1CB4zqBGAiEApidGifd30lE5w6dVnKUKnMzDXqp4iSLrbFwMSHolMeY="}]},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3012_1601500591397_0.8529898990177638"},"_hasShrinkwrap":false},"8.0.3013-beta":{"name":"meetup-web-components","version":"8.0.3013-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.14.1","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"20b2335aa81f43a2c01f382f775b00347112cb0a","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3013-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sOV3rOGxq0Nr4z/BuwveyyJOyfZI8hrFVcUwrt9yzHiP8hnFTbvC0ybYmtJQVlS31kwS72IaQL1ak2A7Xrb3tA==","shasum":"1e24fde4f7a2701a1fd3c281b5caa4164bf955d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3013-beta.tgz","fileCount":613,"unpackedSize":3073665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdPzSCRA9TVsSAnZWagAAkQ8P/2z+8plYV/fLBDgWmkYJ\nlr0ioJGI/s14BnyTgBB8f8qyR6XdIzTE/gshDJQ6cb7LT4CZw/54miGpAr3J\n+sLj9/K7Qr+LmiSHwqtuTUhxNxXUxvM4+cHzahYNoSYDhmtC+luYvNb7XVXK\nypKtc4/uhZ60SiPtz7K6mgv8eB4EFhklnt/iK6DstTsEUaQbA3fsY8YFoTc5\nk3a4z6pvO8edYu/GIB3R8PeBGoFdQTz1X/UGKw6jyLdFoW6SoFQjLPurJ53a\nwy+xRVh2w+bWPeuNWqFSK+z+1i11IFhW4BWPl5Lnj6uCSk5EVClZLULgQAIP\njpQ4qEE57+yafev/0oLC59Rm8cc+WHrmi4gqj3vUkOybmaxHuergK9RykGvi\nwtt33N7Z/WMR1WJYM9+z7eC11kknE2ddH6/CWodtNTWL1jidUVYbvQClC7Us\nOTj8J8DY06wMK5nIIaOLKxo4bnZdet++23FDQ4fXT7Hqjblo85DKRMaMyfQG\nMw7hS+LDEac6RyUgr3xAIZ1sE6ytJnOlO7tYZ6t9Ncw9vDp6KPtrK5D95cib\n8baN1h13QGsjPrMZJ8Rq0ZF0Sj2ywNSI+cwq4J+OKLOKkeBsXgGPd6aGL9Ti\nvoPRUsYeoVhDx8xUG9Egv86ygSzt0RsBktd3O9YuaZQjDBLcick6BDVsFEZY\nhhcD\r\n=nReh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAyGqNkzsRsyAFWeeKefCOD/UVEz4AMWDFMxVGEngAjgIhAPvQBjh46KKKToJuuVzUv3QJ24D3xcLahPuvjbl/9F9S"}]},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3013-beta_1601502417947_0.6152588051118641"},"_hasShrinkwrap":false},"8.0.3014-beta":{"name":"meetup-web-components","version":"8.0.3014-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5da00e6bffb20523ab567b86da12c9bfb3116219","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3014-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1lf7a4onvYpmkY9+S5oJ9CTf+JZrolOWjyOgVYzn0iCNhiTOKGzRFGurJkOw4+dD3z87SbrXcDchfyXmsAXeIA==","shasum":"a8f12c7e42c0c29756f62feee8e44ac8cc97868d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3014-beta.tgz","fileCount":613,"unpackedSize":3073665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0vtUCRA9TVsSAnZWagAALGMP/0A0nGb87kAB6J1RewfZ\nPBs4qsa+iUPm55UYN+To9D8BjNjXzwpIIG8k7sJbNYwhFn+jtcgNdI8fHOP3\nEbfCy9erDiUVZUiTdphlsPG0WsqAOSltY5fWbHMXZwYe1UShiPub4kA8i9mM\n9ZgHWGgNkMjfFioY6ldlnwKv5YOKMEMmmHlY+44UDWkDMZR4fkYhGKPH+ng6\n3CEgYgfKZFcmX+Da0Ahkk824OBcbdTGZzztibh4ra9yT3JP4K9SP481qBEzN\nq0trZnrOXT/hMsqn+x8KWJJDhbtdarGDQSmGBhTC/26W499Xxu7OM+I+9vYF\nsne4wtlmtJceVp+cFAZmp7qkgYhvFcNZIbwIQESXOW7JkgQTqB0x4lg47wgc\ne4aG5BAMh5Pfl/JFOsD5w1jihpc+G8Uw2hs1xxwmXW3nODffDv3VEUsyjwBw\nqoK6FLCw64zhgyDTH5M00d/GiaghcQNHrPnlnNvlfabXjUVdJV21pHDZlwDD\n0D48FveYqH9rSeZh1GK+Xej0TJZN99/kcSfk2zDkF5prJybFwtaxKusoPD8+\nOo7YU9bymaGnWsRNaAkGzao+TU0fVja6nB7TruJ1EDBw708nKXnc8A7Te0xV\nWmBtKzyc1Zm5uJz9I5NiIjVys1MMLcOAU69tBv0eFBeydGpTaidFscqbeRrp\nJdRS\r\n=jSxc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZZ0ZM+fjx5jkYV4Y23TtHfzoWnYcKD4q1tCTHHzD1+AiEAxDYw9R0qvnbpscTCaMdzpsjzuW6cmoohej7nsGrpd6M="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3014-beta_1607662419704_0.3592110949781062"},"_hasShrinkwrap":false},"8.0.3018-beta":{"name":"meetup-web-components","version":"8.0.3018-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3487e1965085e6fc354d42ad56efc9b10633c131","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3018-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rCt8OXP3FzYqsOryTHgfzyBoDf9QM3aU47CLc2mo7SOaBGdRLT9aVaLxkcpl2sslxb94OQ7yn3uvbSZv1fWzDA==","shasum":"1a0a5283e7f1fce2826dbb6cc080ad992b8dbbba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3018-beta.tgz","fileCount":613,"unpackedSize":3089530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIq3nCRA9TVsSAnZWagAAssEP/26JHkO8zha527jZ188f\nW4sVsdTNvAzchkr83HQHSnT7nXFDUkawnlDPJCwL54hD2KRl9kpwwZGaWaYF\n7gBNQGpywFPSvzoQRasgkSlt5WJaNpkQhDAUoguSUD0qKD6rnJCTE5hB30o/\nPNSJueDTDZ1LgbKnOBUqYl5VeefbA64GuI8CI4vpfTHzMt58SUxAj5cnJwPd\n7vXxbSAxKoP0zLvXooRVN6jipZCqzHSX39MjNAme7fuTtgubHzUnNqWdBMvI\nHsRIhlkiGy5HRYDWIT8tMm5oAGgO2v60LI/kFDXFsmQQtG44m8aNz4PL97mc\n5wW7+sTuZ0TwhxoiDmnNYDHZl4SGXUXouf5WP+unTPDE7B//tUVVKLdfKVel\nTMRfQbP29YpiryjlrmW91Y8sN53qYr337TjO66GV4ODLqCLBryF4vyk7cyDo\nmAzvDEatzFRr1hMCtJDcB0XZ8+aS5uVIEH6H2tqb+N9y9HhSTKcVCRgWpS5t\nn+4J4bygtSKUmAI35nDuM8DonuPyX/n+sHsRMtoG8SvQrvaOnadF/ewZuZC2\nWeqZapFGOI4O4gNBsx26wuZO3MCD1pMzWVFJFoupU3+mP4Udz51q+HubQp73\nNpeWAVb6ff6kq5Lud5B5fuo8t41S6T3wc9GAKiUwH97AfFn53e0qrqUy+YpG\nNvBQ\r\n=XESI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEuzZe7XqcS5hjoahxiRE6RqPr7hJGKV79H2diIW4OydAiEA1kISyPh9Jc/sgWCXxkakT0PmagSvf8LF3cUIW1zDs+0="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3018-beta_1612885478351_0.38072971388683374"},"_hasShrinkwrap":false},"8.0.3019-beta":{"name":"meetup-web-components","version":"8.0.3019-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"31a17881c44e9edc9e480520fae683c1c1002ab6","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3019-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-etbhAbEuJR8dzXD/OoPJfa5UB5QvduY2XwHjsV6TE4A2kEiJMHDHdl3/DQ4NMfJmZ4tBXi/ttqjtbzf+n8r9Sg==","shasum":"ce9599915f2fc968056fd4820ca271ad6b3c1fc4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3019-beta.tgz","fileCount":613,"unpackedSize":3089521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgItAfCRA9TVsSAnZWagAAhaAQAIBwdd+eNTWWpkjeBB7i\nA0ASj24ElnFoGfLc+Ws9qkD/AcThlBQ2k03nhXaRyPdnyDrEAro2BbNz9vpS\nGr/c5h1dK/4TkOoS7mDgN635/+YBz+dzuu2ZqVWKxqdKrIKz1aiCb3xjxWom\nrLyTSBcRRnZhCWuGmFbIOmtBQP8Ao3RGZO+d/oyAH9MmeqjTHatEj+4vVzO2\nycv3a1tTXXrzTwe1ftWc2G+j8GwNLW+HUm8FpJK/GNdpPXsf6Bws4ZnVx3ip\nes3CjKygx6+uApj0+xeEW4YIn7ccdHotR2IRRlmG42EiBEHsyH79MRUldGi4\nxGk4z84dOAG1gz8HKrIW5xrL3idMmOo7f2GNh8bEXE8qaH/zkRs28g4fuhy8\nUX5dxPIrldsB2rqQmap6FYlXAr79OOFdrMADU/bnP0ud/3V4HHiws7gRAhJ2\nV3NeD0wyZ0tLHTIlK3H1rnCgpbef61Nebbx1HegyOexY+6E9EI+8Ad7b32MB\noyGYyqOrAxO3NOJsa2zNSUX3KpCfz68v+oweBbEp+tzy+K2MCqziFcdf8hio\n6y06JivgGYtkNJZvt7cwUVDKKdqJiAgktqsSu3N7umBu/3LDZoOa2vCyZcxF\nCwN/VG0esb80ccP5qGCb6QD9eyTEshwWCgRAbCe4xf06qJgFjtLaZYAZk9uv\nxqWM\r\n=hVkg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHrjqCK50F/GC8Y2ljwhiP2sWG4UvgwvEH/qorjgkFhUAiEAkFXPOhrfUs+GItNvKDze9kIAlhyV07OkMvY46GTIvQQ="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3019-beta_1612894239157_0.23619700766158025"},"_hasShrinkwrap":false},"8.0.3020":{"name":"meetup-web-components","version":"8.0.3020","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"da6ce85dbc83908a12a33de023ebaf95003a2915","_id":"meetup-web-components@8.0.3020","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Su+UTYnlRAqdCEkXThH6u8rspohWdPJLbf4HzVeA+aGdyWRnL0EoRXZwXGWvMFHXjXSMdZdb9CevjtZ7akIlJw==","shasum":"589f1f36f05c60076c94fb0f5b347ab84eb3479f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3020.tgz","fileCount":613,"unpackedSize":3089516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI5fiCRA9TVsSAnZWagAA4d4P/0zTEXAOOu5wwmp0g3hj\nOu0rPPvCxF2oNfLo/YvnUVhex9Xfx08P4BEbDUiNygOEMDzQRCztAdn0gVIX\nW8s6S3YLBk5hq5tqQBuGSaFwlhiIcG/D+u3a8cCQBh5d8M/KyVpD6nGROMx3\nbI5kM9kWsvry6qHWqmcgDPBZf34Y2SA3IQ0jWrYR5nnQ/gIKCcXmgug/cRBh\nwuGaY0ojlPsUAzEXWWKOQfPoUFiXRj3h2PnZMMnGEJyxa9yChm111OsDN3zX\nqw374sr7vq7jZzY4fIYhV3HGw91pqtbFR247YHQBgYvlWSlvWLsRL5Ndsggi\n2T9RQid1qyqdXzQAiQHwLk6ypiblzCqVWQPVA93qVM+hzyoXhZkEZwrm+KZB\nRpn1VKJfYl3L1148Z8fhJkp02FgTWysIaDY5Xx37gjcoc4NLMkV/R2MuIj5k\nrVqix6cKylgcUrtAbciXC5B3lOuIMqxFr0STnJyEg2AAFCHt0tbbN+nKjDjX\nrurBjjLVetB1ZHpJh2QdeH2g+kZ+LXJj5ezT2bdb0fGBIU6IpSF1BXbn/T4M\n9sTKtsnsv49fpUVRL9QdipVQFg8BNv9pUpzpWND/oCPGtpgCyDzoqlQHiC8k\n71i+5qrlO+c/nT/UrPfoHIO4IftbCMxpk0TgT4YdSgYo6kYLWVga1gLrq6mT\nuwG8\r\n=Q7H3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBUyKqCTL7n3JVPZPQT1rbtTMPOyIEWhFLMeyBKs8ZvyAiEAxtcrH1z45bMUd1RwrKDvT/C/n16gWXMXtuFQimVy7iY="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3020_1612945378177_0.342603961897082"},"_hasShrinkwrap":false},"8.0.3021-beta":{"name":"meetup-web-components","version":"8.0.3021-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7c17d2194cd31b7ba6590c79a142042b4dded241","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3021-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-36986EPzqadAg7awsYC36olDbPzmH/SXcRf4HYNe4ZsKfaj92f3ALDjlFUcbycH6whpCtTxKHWiju3gk0l/Gmw==","shasum":"3dfab20e0b50eec2d540dc5b3cce4102d78b331e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3021-beta.tgz","fileCount":613,"unpackedSize":3089521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI5msCRA9TVsSAnZWagAAZNMP/09ro9I2OIfpp0Quverm\nsoK/4N0SaLoNyFCNbonquC2MIm7pKjNrCDzvlqCBXc8DJCkGSqgdl5fHxCk8\nc2SZLJmxdxkLppDFBUWTTGUKrrQi67Xf71AHCOK5osW6YL0w97h34gU68YHh\npcgnGe6hwCMY3zhTaIXawrMT4NLZvQf10haGWf4l4z29lnRHtCwPNhWPT2kI\nrK6nSK7QzHbdbEr0C9RRFrPwvvVVXx6ibq/RX+sC0xF1iSMh+WxC+fe1d9G3\nlXNWFKMP9EDyzG3lI6NbRbXFjHJQMfbTevATeTS6v0N69WrevBggiAX2b6jl\nVav4p+jVkQe8JRTjzSgRpIYvH+v/NYZSnM8eV0Kkor5Y/2M5cA+N+h5sVTEy\n0veXje3VvluNQzmGC+8TsF8xlMlB6G4bTyP7WotbX0kRhoqZkOck8oiFsTvC\nzYDe7OEIaPqkJ/ah8cTt24Ww7erljFTlPO31SwinAeji/pmEenXkLiVd6Mtb\nJBMrU06fKj3xU20iG20zz5L7PeiRCgitjbq0Uc0FFuRxyIoaR3y7+dQwewgE\npBTpzWIoIll/xNYf+IN+oOQ0v1D6XXroUJHjMmMxCQ5qlp1QTJ+utD0mbWA2\nc2mVnvMv7lT+3Xy0ALq+VhN1OOYZfOcmnDsm/FY0Ps3V9JiD+awKlDeqdxcq\nsiJh\r\n=8Bvz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCATEya7bSqnZE6VtLbOUd+8eSpZfmpBWaDN0fPM5LAfAIgIyfrWoh9+xR6EdtVLlupjq9xg8XVgXvQe723J1n8+fY="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3021-beta_1612945835986_0.3193122438011209"},"_hasShrinkwrap":false},"8.0.3023-beta":{"name":"meetup-web-components","version":"8.0.3023-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1a70f50454ace03c7f662f5bdac4f547a42dd069","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3023-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tQXIMbfQRQv2Q/B0VW/jGXtFFGSAury7XWc46EcqY04q1B0gglZ/w3uArQEz1OWyJCVPeWZDFEbeeJjtnzohsA==","shasum":"4921b3d71560a494d98fcec0780573fade59a3ec","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3023-beta.tgz","fileCount":613,"unpackedSize":3105880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI9tRCRA9TVsSAnZWagAAl9QP/j8xAkYvEZY6LKSNpEb0\nvBEvibDEmaaXwTyKAGcMJj7XFEDfxvAEJFBhRZ+wmUzl1ZJ2xK4nDbAab32M\nHT1ZIgejzdU4OKFKeRRATI112ms1w2hSKgWTQO7zOPX94u29FiDv4JbCUA7f\nrnWV+DRMYrdTpY80JTRhF0tAOKG91j6+aORox/SSPtjGTpL3Di5I/VFS00+9\n4vDx4y9/4kz4ypeoa+pYZGeGbXw3kwTeWC1Hwuq8lwknzFm3C3Hfli7VF4f5\nIAMwRcPfsPoazXfp/E2a8/OGyhd1H9vxqgVPO6A/sqQfgfqRCUPyDrTajoaB\nlYw1wc/Bw4xDPg54DN28q+qz8NgAx6ppUUFr3tDrLznqvyFo5eYifkxzVbMc\nLO091RKbmeYH0KzGOthNPolY7GOsTHdQuaPsp420o1eaHPRX9xU0L6l+rZNx\nlZ3CRTwg/Ey6be/oRTqwk+fgo5MyI4I/BKOK88J4yaNTR9Erxs1X1HfgJR0M\nkbRgWdp1kkqKPWeNJA72RFK/DHHIO3TgJkFXWQ0iImA7desUDiHoy7TEivoZ\nYEI26Rsao+Q+YFcB4y5kkSwmjbiBuR2bzc5iJDuuiA7kizVd2//JuBU37nD6\nl4/R6GqPodwf/o+83l0/J3/DiWxszBZxLGojdgjpaNR8T59MOSB62kIwSmX6\n73tQ\r\n=yqlp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEY0Hwu3LxzqjWfgT8PhqG9ml+4Uh9uefXRGtNWBk3YEAiEA0Vt2nsooZQy0O2S+PHKYNCpoZYAU03Syth9xWpijjd0="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3023-beta_1612962640950_0.6967350226497211"},"_hasShrinkwrap":false},"8.0.3024":{"name":"meetup-web-components","version":"8.0.3024","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"150bc689e25f8ef2ffefb81a4d502534a68c9038","_id":"meetup-web-components@8.0.3024","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-x+FULzPPphZTKBLD2P3pYFQL+Im3zhh8VD8ONDSL5CoJ7fCk/UntHdgNR3tHUYTKJ39oxpl3USRrH1z4jMPHXA==","shasum":"c0224a0b14ee1864ef50e0ec3347f7e0e2a1b98f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3024.tgz","fileCount":613,"unpackedSize":3105875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJAM7CRA9TVsSAnZWagAAXvwQAJvW5momv0dtGPpHAUKr\nATftd90oCH+MTFGbcIcbhrWrQxbGxzlemntFj1mLyboxP2mRtQQoK4AdiMmZ\nDhEXVni4tdtzT2w8wapzlqBquBeG4d8krxHDHLs+GzY35V+TBRzwhHJXqT4I\n86YQNQvPH0fbtNoR4JULMrWyhSnYM+qpcVQ2sX28EAoUCXhZBOVNJ7i7+bPc\n+PA/JI4gS6RV/5abJk4sdWoN7qXcYL+eg1dm1l67fv2zgoSShGDBhlNKp4+T\npQDOMIKucM2sTHqsx8klgn3jkYaVEYNSRATNNmoiyrksGW6//sS0II3Ixfsd\nalgJSo1Tzpcaok/Ykfhvg5V5Jvsg+ksY+ZdScWI9lzzyWL5MlYoJAi4bf+Ui\nbqmRI2Ym8mf1NzxbIPTkNsThtk+KEbBqwFaqjFpbNSidtmWth4yUqA+vlglX\nJCLoIgU1pv+9VZB8ECgTOR1lQf/Rs7lK3o1dsSBUeTdGdsrvR0Dxucg75Boq\nqo5S89UCDDTvXKGCvCDHpJCKa+sAuQM6j882yDrI6N0I7OStkpw0H4ryIxmy\n+X0P7YEjvp79JrTP8IGXGARu12o+/UFtjh3/y/upiQWc40t6qG0sowOSXyaO\ntrZfvUwuO8C7cZsnfnLbmfEclrcVOm3YzaWR558/ftDUNAwdSDzJymo0OonH\nj/lQ\r\n=XtY5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICH41KSCIDOwF6hg8xB0FFpyqWkY895RDiPly74TCpSxAiEAo1manPE179eNmlucjIW6q3/Qb29XEYWCXHQWddZdkwU="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3024_1612972858867_0.04280857161315721"},"_hasShrinkwrap":false},"8.0.3025-beta":{"name":"meetup-web-components","version":"8.0.3025-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1418c1758f8ee99fe17814302d8fa0b0599657cf","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3025-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ztqRd9eYddz8+e/MVEUZ5eUIQMzG+kcBlsIbPH9qw9f9VJnd2VZrQe5xrtauOJngeUNAKmyxnxsQ5vd+UK3XEw==","shasum":"bbf0e0c214960919e43a03065707b9d6cffa2577","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3025-beta.tgz","fileCount":613,"unpackedSize":3108739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJpi4CRA9TVsSAnZWagAAejsP/i6OUnlOJ1FAE/HAukUc\nun2/Di1PnG49D3cy2ktuCayxgzXhVZQL1P5nwUQbhPpRr2guYIMQcosESGEf\nwDVe/p/s5CMtxi9sgtbLdAC+CgJi/wXQSONwKu+cujXXp37GSWf3z14Rdxbj\nZxAgQ9l0EsM3XDGGND7/u7/NnHy6bA4ZBkE0DvE3hhAudzX7Knc7wswTd34Y\n8kXY1P4ngcwXRXkdr/1PnKImEPsMRyccuE8dUBs0WW6HjYjqB+CLg2SUWG6j\nPWaWcOnqgKf7bxrJFiP0+3wqma/eqfTHSluTn1bnVJFpXnIF4niyxptQegF8\nnfAjon4aoDC+WDSb/nWptuWqPybDBXHXDLqPXU2HRRMZLAVhMwHaAYTrwCna\nhp999T3r+HZ2gC3wlkEgRJ2/Hrh7Px1aUbtiHReKIaYCxmObXvbRgVhyIxPt\nPfxHlGaNn/kmHfAARZLSMdc6LgQwOEWq2lDSLglJ2mU+9+i/I6JDA7HgMSGL\n2wdWh722T6+GjhIdxr4aQGtjwlEX9w2rJA70KOZh+ZtaY06SgThAiJYSgO7U\nAaCT2BAxz0e7+JzmR2qOdV4xeQLKfjD1wR/ANRxBRSUhQWIHuPTMyQPYIhv5\nJnPFuhTVFP6t/EmfHOQ//5KT3Rd91nfepibbr9+DJHAu5+5WJRe6cEAjOyYz\n1L7H\r\n=eh11\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICq7AX6+//TpS/54aYzf+UkfJ68wNTRrxLCE28awcmb9AiEA344MW/BaZifDD0YOeyPq2cKeE2qc23tdWW+IFO5Wp+A="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3025-beta_1613142200063_0.12214778171215657"},"_hasShrinkwrap":false},"8.0.3026-beta":{"name":"meetup-web-components","version":"8.0.3026-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f0a310da2e0cbb785fa95b6e363ddcf442bb97be","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3026-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ya/3xz7YzZi2LUQqcDcLF9JUc7hB8+nSERr/u8qVZN5mVfKFPuUkGAi0hvHRSZQA6d34IqLNq+KqgvNZL5tyjw==","shasum":"ebab743416d1afaa00ac2a29ea5f152c234d9c0c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3026-beta.tgz","fileCount":613,"unpackedSize":3108860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJrM9CRA9TVsSAnZWagAA/oYQAJ6mDJBLyMFDrYk0gFIK\nF9lx/GCilkZxHevb2DP/TxOA9OKolshpgZZPIMGJlRAH+BDb1s+MouP/N2n5\nhj3uXo6+LJV3Ls7q+QhlpTyV+osujISZ3/Ppm9bU0tPYCx++ozqUBx3M5Ijd\nVaBxAo0v9zxleKtG7hS19RmunEaPULnO4TzplFZ0Umd0Aq77n8Zc7uo6pjDh\naczHgC/6kmmmEANM5cKJ7EVtTGAYUp+7V47iwfXCf9QNqX5X/WGAPH6mkzLS\n8ThbdopvQZcz//oEuh+z8tGt7IsPJJJL62Ou5ZasCiwjKPRSJ/wc3/iLoPYA\nYvUvCw+2u+LMrWFAwySP+Pdogvrf/wepLm2DV037odovUL885oO51MRxI2g3\nOKTDO/npLtVr1Mn1LPQmYHRBZ16X2TX+De15XQ2PGy2k+EpcbBOFHycrwqQh\ntmXmmqmgA/DRKRxgIbwXpp34kCiFVPYaFMjHHnVY1Jm+OUxhW7zv4hCQLPvy\nDlxYOCxgjYMt/lvbud7Xz5QXsQ/yfQu73wiTaoA+DYkXdjbpHG4ikSNLqnoN\nBMTopgot9tNfxUVRuDfrtcMaHu04GKbxsyezdM50wXNli0iMkvoefw/OAIAT\nJRQp6XYn8P/q7iAkdsUPucZF5wKInuk/ozlOZhfbpdzd3BNrB9/5hyGmEyHu\n0PkD\r\n=K+nL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5AApAMrUtfYSATBK1TVHX1IP6pUKFat6eZd6hqpTWRAiAF1pIsCektCtMwVmQg6o+gqw+jLH5faKQ0PTSiLmimdQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3026-beta_1613148988653_0.4401197795565892"},"_hasShrinkwrap":false},"8.0.3027-beta":{"name":"meetup-web-components","version":"8.0.3027-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"730b4d1721e92e084a06d48a617cf6d46863696b","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3027-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-62Rm66Qqo2/vFQ1gGN7BJ9jzy05kMuDIAFMaMn30sHz7H7hAWq/J4uULMQrj19cV88mTAIYzsbh7RBI2Ygiqgw==","shasum":"58da18296b47e315707bcd0ea95d9e678736b123","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3027-beta.tgz","fileCount":613,"unpackedSize":3108860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJrOiCRA9TVsSAnZWagAAh+AP/19eOooHFbowEZthaTEd\nEu1L7W8rn6pN+TtWumL6QNhFC160hPM8uRzsMfmRGLGO3/itBhuVoeSaJ9Ya\nKWb0fimlb2faqjC1C0A7Q+TPwM+gIsAEHjWM17njaxZJdfUHF5vwPwslBRHR\nxuVsEroDGeXjTq0WzjNLlJiFSfuLZkD2KWkjMhlyG91kPwtwNoQjJz6rthYE\n496dNzRQqemkyy7DzQ6N0pAykxi4FcI/GoD/9qt+7dUGNqE3nZO4XkSTVHEo\ny3jcrIO8luzpCl4iWFBftxczqmh5DgH/HrY3ZKboIeMEc5ZoyFOHzshEzO6M\n7WwG0B6cyh22OppVXMVbLZS5v71nvTLr/hfIyGDWYDrjEnrQ7L5m/5UcbrjU\nMTBPYvhp6B8j7qJI2iFgbu6DXpnlgl0ufvhwXQVcp/BdwUGGXrQ2oOtfLhYW\nQRY7KEFK/NLv3rQg46t82pA96QabXgFjsfS6yxTCv/lu2fqCufweisLnhEAR\nZ5GTnKvTB7U9oT43oM4JwOSWhDgIvqBzyRTPaKz0xrJKslER6TbQteEEK0U6\ngefXaf0GuHTw3O9l3IeY2EbFrQAHKMQx/n4qzoVWEFC3W9xubjm4Au3vtgEn\nJtOj0Sq5ydJCLFDKFf16mQYNW19aUhQGhcpWlNlmMtjwvLr/p02eEEIXwFq9\nmVZX\r\n=YakJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHW4hnJsbeC5jA74Sv1vuqE9ATB3zQPr7z4EgMPHcc6wIhAJZ80sDwnhkO8CACoWsnoTUtmVlXo7aSRNOU+hp2wIn4"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3027-beta_1613149089441_0.39168547409480237"},"_hasShrinkwrap":false},"8.0.3028":{"name":"meetup-web-components","version":"8.0.3028","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ebbe0a4f201fd7d6de7bad7c7a5d3085c059b24d","_id":"meetup-web-components@8.0.3028","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nYbpqs87ugln+4lXjZcJ6jxyI7XnHh7mygnXk1HzuGSTfx7R0+pdbxrSvGjawtBjBxjW5fg7psFlWAMF/0FigQ==","shasum":"7e4fa8dc5c28c394ba32f0026b307e42b98bd3f1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3028.tgz","fileCount":613,"unpackedSize":3108855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKiqACRA9TVsSAnZWagAAKcEQAIrytByu6w0OiPdtx+16\n7ljtnb4c+CNuflhHelpKwtbUkLqS2lXHxBFxOYN81nr6mlLONrj4T0Oj0H8B\nGf12pDdK3+yBJvKCeFqXraF44QTLXWp1MeGiqUl9XZdQu44d71R7iZeId9aX\naKKUmoaNPsviHpCx6zqJgOHDUPVx4DkTsVOioE+85LhL/8O1QDkj7VevBGG6\nvNTDiF1d0OZfL8/NUHmw4Fq8cokTFEjuCEJYsseW2jxge+cUN4okC0Lr3UFB\ntIkps1fxeKWKiStCsZ4bM5Tzk9p0e0GP9SUC5CmNz0rX9HK4CoJnNRZAme8H\nt8YebCTR+hScto82fa0dVvY4tsnctbMP+tQ2NzjLJdishpG/p3X4+3d0QZ49\npDAxoKGyDvnyZ/F6QWpafcy23Ag8k1TpyiumE4FsOgtXKUFioSlu99zpUfOS\n+SXM95YUdCHkLCdOLAW8mQ9d4M2epuVkKgqB3CaJEZ1erovua2LpQ8hiWHht\noPSZqagck2im2BacyTwnE0zbKTXof/ykfaVLUUANKqEE1yyGU1UbIdfZVXBk\n8KbxfHj/dUVDrrDMvKRrX6UZ3//ttFOGeWjaNxZwoDMhTg0ClDUrjQ/n6uU6\nytQH8eEg2/nq9qEwNLGkJop1BpoWSqvO7GdpPggjtakIiFU73Ud7rlBm8wxB\nK0J+\r\n=n3gE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzEFGv+SaBCBficDpoFSNEK1WMbHBrESVYk5tEpTK1zgIhAOuxl7NGb5XJIeT7J0V80v1deRSoPSi3AkmX54Ud4Aoq"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3028_1613376128261_0.15966296590552465"},"_hasShrinkwrap":false},"8.0.3029-beta":{"name":"meetup-web-components","version":"8.0.3029-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"97b01629f242c296003f2639c2efc979487aac4d","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3029-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rcPddXhr+0JbhwoxxiDEBeO6fp2SJzK7qW27BYtBQlyZhosvOrEpRxAk1tLCh8KcFjs+xzK38Rw28Qxj14MhMQ==","shasum":"c4e2de5cb26ff7f1b8cbd8c172482438973c6bbb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3029-beta.tgz","fileCount":613,"unpackedSize":3108860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRtJrCRA9TVsSAnZWagAA7P8P/2idrdTSSIB5c3mF2wkN\nUj4uMDSbj4T5sloG5I8D0dmrzfEUKgqylP0cU+L2IxZwoj5HiRtsWakCO6ON\nywSATxYvJ1PDjO/XFkTWXVZQnybkxk3J78Qen8a6yYIaVYlNWJgZBEdzvkIR\nxCZeS/Awrw+xZNoVeTDYGhea0isuny1JNYnaG1MC8aUD38emTm3mI28172aF\n55bphW/DXlBMfxYhTu7+SWSgWrMSmfZ6aF0Qxs+lplwEWbgpzr9750d0Qp/0\nT+FfQPKE+NMXaMQJxw08jPryc5N+ZpYHCmeVfhFkD+7bHh8Q985Nfl22OzqF\nRpT6bvR0O9Xz3gvArq8+561Jr2EyVLLzs169v5t0xfhPmZoY9IpA6r+wAVup\nc9Y2ngtAUZuTXcJOB1r7+RVU85r12xJy05I4IhtMAVniNSJDhP0N6ZVHvF5M\nSNaKSvVzDMnLXyL/aiJKvJJbvgzgrvrliQzEkYfcF3gwmKHTyrGgw+E5TwjU\nLXxWMttPDZu7MO5nwhQa02UwTBu9oYYX0rNgnhn7bV0zY8ZEtPkRQNpOGG+5\nxd1tP8te4K8rADFdZmVy8/CwQ9gmNEC9RXMdMDSZtuCa0M/BpjCup3zK3ftJ\nXv2RbIxU9cLqkQ0FWp2P8IJ2jo11Rd2woe+vpteuETrYXrlJnASa2T7+bxUK\nzdTJ\r\n=PE/s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBgGcV2b3qm92MRRtdx0M12evAZtdZOjmDybqz2xfs/IAiEA4khufPpeW7ns3Nn9rApVxgnVbpVQUN+Eb40M3+fc5ak="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3029-beta_1615254123204_0.5371676413628252"},"_hasShrinkwrap":false},"8.0.3032-beta":{"name":"meetup-web-components","version":"8.0.3032-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.22.0","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.16.0","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"375d434d3db6c81d6a7d35dc2d3c6fe1f64230e7","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3032-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-i7COWiYzCY6gmOvO0Mc0vJiwdP93+ObDcCWI/uDldkGtTH9MTGEq3hYuc0aV6NjHh2fWC+8lKAsNk1I2gAkZPg==","shasum":"cf2c8bc4d77ec62e37bfb81f12df2b1a967e595b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3032-beta.tgz","fileCount":605,"unpackedSize":3027914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgS5q/CRA9TVsSAnZWagAAnSMP/1V8aWvk6cV6lTeE0+M1\n5fNhUMf3YwmhfxQuLc/XMv3olixOqmamfS3yaTOK+AfbpXpYkQ6spfvki8F2\nX5urONVgOgiMJDgq62Th1C5vM4tSOWEANyPOXxnZirQFGyCoIK0Rv44RUsc9\n1e6CCCXyZv5dVzw/wzTXEyIBYiK3iVyH0/JiTxSDJND5UutKYSaQgiHiPEkf\nBAbtngYXfyNkEUD+SslUKPGm+mwdPf/1GcF3JuUTozn7D4a3U6X3PIhv2vXn\nQsGA2qk6T/cn/Bct/rvlFqb/0p3plvb9CB00lj8pMMWFnYQSPc2/TA1YqVhP\nRlfKRszXii36fIAWe2izdogdgB86k7iKM9EgRw1b5cBeGUE4ZjmJAFmWzyFw\nlfGyfXKAc1RfM3tGGrokFnKcWHk70KeVstKr6952+RJ50ZozLOhOj2wqA4rA\n+vohXl4kXU9qO5r+5H+ra5Zx17rv/UJnGmacsEkQ4Jwr2SE1BzvkADczkwa9\nxqNKBFYw7t3c9EKJhQP8v0hOQR1CDYfHjbLs4tVpbLFU7TeSusowmlYGcgdK\n3QcubaaMOkZbsLLo/9PztBsvL0mXuQBl346eoHuoD/ota0ctzoCbojS46pic\nlAYGpB+LO+2okwks8i5FKvQN1mfeKuri159U/vXfoCbZBvnnqZDusB5V5frF\nryf2\r\n=d0Iu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHhZhBVDLRnluxqXKyNBoaJ5nmjbVsYMMrnBQsBzUHN0AiEA8po7kG7aTHhQaXBjL2d5HR7NZKZl169DfAmhPRmM/NE="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3032-beta_1615567550847_0.4188476068586442"},"_hasShrinkwrap":false},"8.0.3033-beta":{"name":"meetup-web-components","version":"8.0.3033-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c35ad6bb9b8f4e16784be76f20ef9ebd7ca243d3","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3033-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ukZI2DmTMvY7Ay6htzqFME1RU0F6V3u8ZwQPDeHNwtYfHXFc9CgUI/kDV85zjI5SNDZmnHV2KZp227GZGXf7qg==","shasum":"9488ecd60405234678a71183988bd5beebb28bba","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3033-beta.tgz","fileCount":613,"unpackedSize":3108860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYzoQCRA9TVsSAnZWagAARwcQAKSAnl3xlBhtZJlEox4s\nxS8WyFCF8TcyMwFL8II0tbyqHRXKfs23V3Wg4aaWFm6H3C5GW5mqq+fx91pV\nfdihnWBg37jA7ZBvUSdmDrhXQKQrz0bU3x+RfY2QoRGV4PQ0ZNcS5xCGLXKJ\nH/u0XGRTWpPU+LtNR9C5QOCAsKv37Yk/FjVJNmfVbU5EUc6unoklwT7su3Hx\ny4ytyNcPARJmMa5q5fE/uHfkbHVk/qUOcLuvlO9lkNDsEOn3J/HbF+cyxeMz\nAhDz5patlclnfM/5eyUVAkVNhFiluWsg0zVojdnzTaCEpXmSHH6hILK62wf7\nla0RE3u7rJ6pDOenWX19NC8NX4XIgJweMI/u1mX5fB+Bky890eK6ScoLE42d\nQClAs4mqap4E2Ohbv+q5Woy4KYFkob2k+E7C9hUbrU0VSARt/K/0ZtnkTVkl\noc/TlNGzp3B1SaEeO2DYCT1fV4+u0x736/qHkcrNya0QLlwincm2yFvu2Yvj\nCat3lgvMG5QiMqkFqITmumL4kkwQFir8zrVgfql7AddzGKNry3h0L99N/l9W\nLr9ztIpN2Virb7q5ck1HQc/jWUkT8xGr7YwF76IG27c+xXwHZONST1veNJQd\nVLKaz2UokDNl31jn4jTD06nqfSqDEhgLkO6u/11oxhR77dN3kZZqV7inRaCQ\nZULR\r\n=iDoy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDch5Rr7cUHsACCjr7yn51Djf98ADB/lUBVBSUMh57JxQIhAPy9hnEzf9k+RxyzIYI+YqIAsVr2z5zdjPlKi8HJ54fR"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3033-beta_1617115663883_0.9662143783643311"},"_hasShrinkwrap":false},"8.0.3035-beta":{"name":"meetup-web-components","version":"8.0.3035-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a75bb4c8b39bb45a80215139ae48c2ac4fdc503c","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3035-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ADZVhkfrjUiJymftKqUXQRfUFtV6ShASgcCythaS1dnD8R8FqLfa/W2eTt8FlU7dz+LPWIgxTZAonOU46kjRtA==","shasum":"833dbc6bdc18ce73d8e3bd33c30a1d028489681a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3035-beta.tgz","fileCount":613,"unpackedSize":3108868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgavWECRA9TVsSAnZWagAAs50P/jjliSjzbX9nqf4TwG+x\nnSAGtBu6QPT0xmuEOKmhim248o2tzVS4DZrkPpUmwSfSU3oRLSlB13DqDXD3\n4YAu8ANv9C6AILHk8F5kpTErfOUC25IqCTbZvX1Cdm9Hy2n83uVKv+aQ198V\n2xjhFkCwwgVxaEMjXwPK/A14fNeh11obZWYscG4/8PyUbFjOD9Tfb7QYTqug\nFH98kUsUppyX8SXIFnfQjejcN0Exox2oHcfc6RkjeUaeKX/8Qyz4Hzb1UcJm\nmB8fOMzN2e4o1Aww0O5pwz49I6KAk5n1Onq66HmrM76rHCBK53/D0jrBVJsF\np/QWKPA1Cs+FlKK2ootfGY/wQZNnoHXJ0W+stBwdE41yQu+qdcH5u7QLv2fk\n+PP6Q1+IqcqFQPjLJq2ZQ3qzl9Q8bc4dNPsc9UJ33H2/CvS+Cha1df/7MQ2K\nkeeMxF+B0leVE1gT5w7uvD3OYBQ4RSaMRGEzLn2mvxvwO1avdNY3xYZ1RwX8\nvGqKtrWt0YgmR4750uaxYAriq11dC65uDuScB6JOIVKiyQRi5+9aAt7B8SGk\nmyraR9inzvJcdwixGTcDFk+ThEK3G1nRlTeDvOmbQGpufa4rJYMKoLpqQryO\nrYoOXdHzAKi+xSZ0Bsv9iEOc79YACh2rbGU1V7aZaQ02WOM4mYEibRMNkCLn\nfI/7\r\n=oylg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAlVjhd3STE/dqZV+C9dboyloC5LaMRJncRwcbpOgACDAiAkxe39QLDJNvSk+9Wz1bUjw+J+2uBsYyJm9CAWYTOaKQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3035-beta_1617622403817_0.1580731036355063"},"_hasShrinkwrap":false},"8.0.3036":{"name":"meetup-web-components","version":"8.0.3036","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"36326c7f2f32c5c0bc375ff3b986499688a9e958","_id":"meetup-web-components@8.0.3036","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ca31LVvOVUmBcMZcWyYVt394arBM4boxce2Qoaxw32iL6tq222t6HLYvr+euAP7R9vzAXjxAmEugI881eQtSww==","shasum":"3e9c2b288bd677796731b27fd5e75d6cea32c704","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3036.tgz","fileCount":613,"unpackedSize":3108863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaxDYCRA9TVsSAnZWagAA1PAQAIra9AUUrQIFKwMaxuRW\nY4Y+oDMuwaAfcdvh0bmXxg44BELjKK8KnDQYmPd9aF3tVCPsVjo5hKicQUZ/\n9t7gY71iCbcctpnjfjrRzHOjTj8n7nSNtDhB0Du6eKNr1HxJpK2GUROLitAh\nSnc52P2lzRnWLo8o8uZ+oHIZ0UhkYR2ImGVfJqQxrp4B7oPPEUVd5xCCqwTN\nRrQwHM9mgNb8L7mMqPRUPkqe7KelIy5URq4tHK6hmGVIgTHP4sraRXW+Wlix\nLuiB6pQK2y9KZoX4TCk7UfqML6670cJ9L82nO2S5wG/vWZ29GKARRjYp0dM4\nZtvxJ7/XW0eTcVRidJ9c89NrIFXpnUq7TNq6uxSiiAveJrnsFA8DfnXzRFx6\nNIUeZ4rlUCSIJ10tc/73kd91io9KMD7HBmwWWLoewRZCxpxItvG7IOjL1F/q\nna039npV5+WMXTa8gK7RNtlpXheTl9v63xNqr+HenqkNvEyhaLm802ojWOS8\nyE7GSxhfHM9daApG1RxxfFSrqNIsYHToJFBRpmdXV09D5NKoEkrgzo8RyLXE\nBRuge2ZzNF4IJvd//6q0FktRbkDNocrPl3aQk80G8pP+cgvL+PgQ3SFFHLj2\nRc5lzcSSlOK8TJa5T3sSXBtgnzcWG6wwFX0Cb2uKo19DdG5FTNsl+cN8TnbW\nhdgk\r\n=MsXY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAq+y16Lro6ck/xadDIeVhvDXDBIzkvIuGSlMiqxset7AiEA5JREGz0V+34Gu2l2WzmAVgivdtXZfuHVq99NYmCWLbw="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3036_1617629399976_0.31403956184804693"},"_hasShrinkwrap":false},"8.0.3037-beta":{"name":"meetup-web-components","version":"8.0.3037-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8a2639c7a3139ed563b5642761924201850164ed","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3037-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xLd51F9d2VtceO6drxQcbeK9OQiOXLb2sxl75BnW5qy0hFopueziQgG/drm1fbpoletBXyIX7aEFyiGEhO/Igw==","shasum":"954e30d8939d30899ba7d753d4fd74de8bb90ed4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3037-beta.tgz","fileCount":613,"unpackedSize":3109564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbC8mCRA9TVsSAnZWagAAKKAQAIEjDkMUvzViFe5cvu/5\nOu8xMwRGljqxgW+hYPDDGN+5uHylQJDztm1scQMCkJCY/5dALC5lkWVgMKTZ\nCG4hlcGk/8sQRxJurqXhE1GY2630dILxeU90Q8oJVtcWlg3mJ+oL0LfGOe9a\ntyYBHbZ7PxAdqIMih/KJDdQzA+uBUu5hSIqaeqUvHyvOeItqi8hNH4gp/rG+\nM/TfGXHZBta/ZZ3rznmP88774NBt9/pB2tE70nqfPxKLcmIpu6wMYfrU40+F\nMo0wZTe0xZTEWGCMnjWf+pP+qQPezbTK7YVPBUpTPZnwLcv6jLMQ78kqlY43\nY2BSHvYdeHLoph1MKJUhuPfhsLXItZ+ze8oXFdXOH+Tsh4IFQBeAowoiA+v+\ntR0VhWy5gx6SzK0Zl4VAusJNWvNVXNIDV22rMNWl2t04lRU8mb90JBGq8o79\nD9PSTUH+OmqvTifot7wR14o/Uw1kiR8wDCpmlzz0oUUNEqXTx0WFK+5IOcB2\ndMiCcTqmVm/hEm18UNdROZoJqE83a83xuQSG+kvV1SRaNTZOF2BqOhrMzwTO\nQ+exkRu2HiWDDDbBbMPIR0kIgYpRi7+OGc4YCQ8EBKTj9Ityc2b9VCf2Avq6\nG/OcjsXyoDoi9PK64fNNnBeXSxu4f9jUcM31ci8w49p1c/0tN92iAZa1pl0u\nGvzX\r\n=GmaE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHxxutQ/rzMxNfnVdDgwm7i7ZDUK/ZhfUpnK0fYlDHOYCIEGe8ma0Fr2RIoXqMxf8z/2nHh7/SiuJ8HeBST5HMam0"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3037-beta_1617702693817_0.32121529286492656"},"_hasShrinkwrap":false},"8.0.3038":{"name":"meetup-web-components","version":"8.0.3038","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f9aa85d7804de9c2ff146624d92c0270fc3d063e","_id":"meetup-web-components@8.0.3038","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Pbd9RjTTRWm7OwpeDOql280dJwS4Svpk26F/svrBuYJtQpxZMM9GkoYyLaQZzNAGSx0uxH1cs5x+Ggpu725RTg==","shasum":"609c5dfaf3fed5bfe51dca9f423496671343d0c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3038.tgz","fileCount":613,"unpackedSize":3109559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbEK2CRA9TVsSAnZWagAAmTwQAIaPfwK4SAMrL23EJgoS\nMXA29peiBOQnthrD3cV7ftduhRylvFwQjy3bCMLBtaXNh5bOn922ISwlIcpo\nHb1ZzJ8kHgAgZLAhziHLDSFeOg5hV+r6leBza/dMmIOvgw5UdD1LVPRFxz5k\nSr1N+MwC3RSDWmJnhh9idm949jiD/g+nu+KAuQTPsolS0T2woTT6TSoqVaj1\nAemzmvSVvnlzUgex/+sDh72rVBR97rzsK7uvCwjZiUqlB6KnXhUjR5iNvArP\nIrSDEli5ZHUVZJPSOzSrvw+A68QTgdh/0YriopHGlo0uMzlC8mSTUC1J2thF\nrgxDBlYiM+lHnRs/Gg9iaWru8vuYbLWKbPo8Pz7OqTWvqj6845XXrXtdHE3o\nmDiLhvAaV57nn+FryABDz0pTCFtNNd/uqpH3sYj583eYhGax0kydWVx3zPNK\n6vmqjbXW9a1jj1aU2LoV3qudIVRAiNQoxYVcU0PA64ytFr1AiWurpxpnSH06\n8I0mJhpULb1WlvIk3n4vyKAjDPL8cvamxypWhj5b5QAcOnM3XCMrG1vAzaKL\nwQY/sWxDimYjmKPUaT4GZ6gHIAar3jd3WlbpM9NaLXDCgdlKLhJcKkyA0jFe\nkaqsual/V0oHNUS6G82Gr16B5GbpwpjscQ3XiyTHSxjRc4QZ3Dye1kxWY2jc\n9IiH\r\n=OtOb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfj9yJWSexASDTFwWMyb4tcJTyguAcEnWAcz5H1UnbdgIhALAyDB1ynnqqmnkZgEtUIScr8iGdrP53s5zkvW26aCNK"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3038_1617707701750_0.2397918861379773"},"_hasShrinkwrap":false},"8.0.3039-beta":{"name":"meetup-web-components","version":"8.0.3039-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"aef7537b5839e1ac44e63efcb77092cc28a8b3fd","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3039-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fT0c7FC0FnEy5/tDW40X7R52TKNOoIgBSdNkM0OgOWMk8UtJifL0bVgFU9Gvhwq/upmQIHedTTlj1XaJYNMGrA==","shasum":"70f54cacc300af67a964d21572250b7cb329c313","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3039-beta.tgz","fileCount":613,"unpackedSize":3108868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbGmbCRA9TVsSAnZWagAA9fQP/1tZfcGtldCGLudOIobf\ntEAlXtC0L+YIQBJHV8FhElL7ptY7uee69WQRcynFlAbH9Ygi0rsoAKQrssyq\n77BynBlh+xASWwPb5IPIlWcaRnzj5lNRFsaipjiIClEzmsL0jx9If6iWFaYq\nw6iKFp4tkAjoTedVeOzLNG6YSBu8C/GYu/yeFyrW8E921MCuQpOvyrI2TQKX\nzHhVkRdvUeJsvpIGgzCBZ2JVd7UFBTK8T/G1hmeCn5zHR5SEg7QngP7mIkPI\nZLZqLOt2PkMDtnKwcA+WKuibahfRjhtiKq085MNmUkzOR/NPqpstvFn7It7b\nxHCzXP19u/6UPxn1DX6DVsWzoaYDR6ZAC+IQQuSh0fmCfVx/WP/u4k9ctcun\nKN0WtXV8O2ciZAw0Q/RoE0jQsm4hmjj1CaUng8wlBLaKzu5OH8qXvPHYQDwp\na9gAWVPulF4jaR6JVXK6rMOo4sNhwP8tbxMmwma6Gsq3T4GvJOZKVKXWokOO\ndv0XTLrkQJqvUwGJd+LW/BQhX/ooChDXeZtN3UkViwKGbqTF3MHIVGjBnsSg\nlzooKTS9PbNe7UnLasjB5AbYZ90Tv0N81ceY54elctDrloeu3LKYck7Ad0On\np1AhqkAAiCnFkoAoOhG5BmXdP5L3gz3jdXMHYWKRKP6GiGerxXxzOa54PYkZ\nDghF\r\n=Wbt8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHRbbSjO+T2BkWHBX+MKvY2sAYSR6tiIHgntF3olz3s2AiEAjlg0LvpjK1GWxCjZLYwe6tkk5tRwflkHGOOMuJmEhr0="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3039-beta_1617717659011_0.7966305309583237"},"_hasShrinkwrap":false},"8.0.3040":{"name":"meetup-web-components","version":"8.0.3040","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9316e9659b8aa76869c3044c535db300a2b48e0e","_id":"meetup-web-components@8.0.3040","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QY/xKLSaaofwAWfeNGsBcK5H3QSIyXH9c+8UACs02HR95Kv0TS+AZnWcJoANTv58LXE00DouxyRrF8QdYPkljg==","shasum":"628f9f9b629f3b86f33eab1de1e33b81c464cc8b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3040.tgz","fileCount":613,"unpackedSize":3108863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbGrsCRA9TVsSAnZWagAAXHAP/iHngjEOnQ0WTeELQ6FE\nbPXwLeYBVhcPX3lUfJc69INfAeUbHZ8N0B9kpx6b7bdL7Cl9z0VM9UyhXpyf\nEI5LUA1gbFhjt6ZdCBfBvH+30on3srZ0Gql3F27+WRWCA2qi2WaWZeT5UZpq\nNKuBnNL0g+H+PwCfru/Q99PB6moYHZV+dGpxdMNnEM/YN3rcgc/hZrz9ZJxk\nvEPxvJycEeWzwVkw+rMgwmO88DJQFGk0gAMnK64yas1lANxdg3nJsmNR9SwA\nXhvWtqgN/hYO5B2N1zuquCRCwyWDe9YUb/jAEGlfkLj/seOSPr5qR8fjUajb\n6n1Z3+1PbRPRR6kuwQZguCXFgTchTmZvgA76m6+r8NJkl4ZR7vTu9e1qYx7+\naDFdphUvDeU3g29pgw1OT9vNvtUVuH40ZBkw2zaoJ4BI8cUWVDezO6EaUl3j\n7fUe7gpAux2+A3Hw3r+X0UPwyyi+ovp4LKdwHXqSgmNhKMyZCq5DDQ9Bn4JH\n96ZK6aQf6xgHWxqbb3swxyJuQQStaSsQ7tqer5NXKGYH++76LmiAlujRAcoa\n6+Vxi24o+6ENGEESOWE3X4Gk3nYyRVjQr06zlhqUpdTQQe9dk3r5m9WHrt+Z\n2DEvDPZ8pZ1Q8iEhN16JESVgkYpeYuMOZGia8sQvfUmsfjv1Y4Orzrbnknuz\nXH5z\r\n=0HnD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBRXPsH2Zq/8gXVEQWVsjjBVh/pnqGKvLyJe2W4Jv7EOAiAwZ2tCaaTSyg7nSFZgsM+Jo0jUwHfVRrdNwPJSaUN58g=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3040_1617717995676_0.10161315350180833"},"_hasShrinkwrap":false},"8.0.3041-beta":{"name":"meetup-web-components","version":"8.0.3041-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"73f6c70e62b77c44d7ef715159cc2ac76786d1a1","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3041-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GNokzrBYPx9cWj9gT/OY0rffzHc1MGyCEYn3bkZlprkyV0pz9lmDU64BEOjUNXuWKruSCzhHvz5FFQfNL44RMA==","shasum":"3878b12ab5df7cbf1e9a4be6556473552295c92e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3041-beta.tgz","fileCount":613,"unpackedSize":3108868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglHEFCRA9TVsSAnZWagAAkPcQAKR5uf+23AM6Gv+luiLL\nhmX3pmYeH+VpgOP/TuMcjUk10RMq4pGWXoWn6LJJbu3D4iqgqqPpC+lpMaI6\nrosUEcDtM5MifDN1u4oM3uv17ThG+XGWc92UbP+xLMctdrLMDQDdfEowH9d4\noo1AXUHLAgv7KC1JadQTBc8vdMHNqnjClOLL81zjyVsBXN5oIk3XSqnHt6sG\nJbd2EFZR9sKB0KupKKUBYBr7F2utQowGp76PvlkFHKQCfaLnhnjv35RT4v3F\ny2mpdXI6hHogtkFqq6wdLZcbUQRLlinyCg4Kl9dJbZzKMph8mtf7PdIaYYb+\nBq5eU7Lb09sSf6b4iZYtvAHt+UQziwxDsgcwVt0hUIbbRG/6MksNdlSYs91G\nJGssotOmeOzM+zAktfQrRv9007pPyrDgqHbVWsCh7PHdU2DiRUknbgk4tst7\n5bXGCtjJ/9/nDsn7Tl1pbMTjjdGt85VuUenIWUCZfxlRGmEwcX4W5RFYMI9g\nK9QOmic5Yt9/ddGNCCCvkYOuXNM+7Zv6PjyJ+SfzJyinGHnwozLjOBUNTBiL\nvxCidiNu6ddMBOh92KcdCa5YVoBf6HR9X9Hhj4Aob3gA2KmyJ86pJqRtiqLU\nQHoUCkBJBCg0fNuqUIB3ORC+qJHFXVMGSL/GcHtYzDBNxwXg4RhrTRMYdMeQ\nyxZN\r\n=dgnr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAoDFOJDKB+R/mat0Kl3w1Lmixc2kKgAxU/uXnoUZYfAAiEA4MUNpWHI6S8WuyKAE73VsViXR18rpRWrynu0Sytzk70="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3041-beta_1620340997174_0.13155972193188847"},"_hasShrinkwrap":false},"8.0.3042-beta":{"name":"meetup-web-components","version":"8.0.3042-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"691b265aef937560cd189af392c7be254ddc1b80","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3042-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iOI/zAPNBDdkpow4lDl5sWtGLSoVwxmoqg+0wWs2vlvxYWynfMyJwuxjTactOxhGqgB2nJj8d0iSB6CFWnB/Cg==","shasum":"1843285a1295e0c522bba91aa7c09505c2ded861","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3042-beta.tgz","fileCount":613,"unpackedSize":3108868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglQnqCRA9TVsSAnZWagAAP5gQAIYmIH4JctpWEawuNfKR\nrjvT07r8blSHtCIybD/ViHhyZ+/hOrVlG8SSfN93Jh56cDRnrAvdYYnTP6RX\nB8Hwmj5MMiRDfqH68enfm12Btjv2dGgTed4LnlI4oHKxrJv8wwSdB6g4a9VT\n12D5SO+uTx+gujOWGzJ8xlTC1zihmb9EXHDP3sLsUvoBmJIx3+3VZE+CPLtA\nabD6yVKbfeu0efZmZi4/GeUsVdS9C4SBwLWLHrbuEwT6qDPxCL81mrCspLAf\nSctc3ySv/lyhp6luTl30hpQGd/alO2BHhHiftPF6KAXXZkXRvsf/nJsZ/WFG\naiIorx7hqRIyQB0OMVujSRgX9OeU9ZFlFE39j/epWiocXUOikPpFWpoP3wUS\nCkWkMjptSKURJI42wEwh6P45SkmZur+neRI5Bm435qBhalgk+3H4eRN2Lc4h\npfgWIIlXkSclyCrruDE4m8VlNjixxjVT/TRGYk6ca+X614yAijRt4Vw2pMMV\nJqH/dQYJOcNffIrTJXMZRIzARJTdrg6L9YxSmE7r5/LHXOb1ASugy62asmXb\nFYh+9Cc7ZH6QdUGwi8/YsBiKuvgTm2PSEZbcOab6MfpBMdFYLzRVOvmcL5qq\ngYMpsSy+Amvl/JvUmiHLy2lMJsbUjLnwrQjYMZtreFor3c6vDeauieS/Uyzr\nHCQd\r\n=dVJD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD81o6Rxk4Ws30n6H4uaN+TRJEOyAYQ+aeET2F0bQ4dyQIhALDCIA0FP9cq6TgrDVVf6vziVDdHNDIMaBKM/el2s644"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3042-beta_1620380138115_0.18533077900653816"},"_hasShrinkwrap":false},"8.0.3043-beta":{"name":"meetup-web-components","version":"8.0.3043-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d7efe54ee32018d849f2ec77082fc7d911d10575","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3043-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fL8rTaMVV0r5KoK8KZNi8Jkr/m9kFS+dOdXlraOKB8bUkz8nC2P3nmPuqcJBehW1HrjJipjsVsERl1pLCNmtDQ==","shasum":"f33d2b0298c85726e389c1c79bae9ccb04957b6e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3043-beta.tgz","fileCount":613,"unpackedSize":3108868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglk2NCRA9TVsSAnZWagAAdVAP/1vE+u1PVxqQUnzPHs+/\nB4CkpFzReTOYd8bc07cPGztijw5sP/Oyoq4JcyoDNEUoPW1lBUeeMhwZto0b\neojg3AdtLc2S1l9yURiSzVta4W6Md9Nq8tK8mzBBiPrP+NRUadtOW4us1SCI\nxHV6RxT3P5qUJtHebY6llKOtJga0CkZpH0mWk+q/LxCSH6Zve0srRauxMwvG\nA12yspkiexv0G3QG9Ii2YxKV/4CU59IXQdJiOGZnQ2X93wcCLOY44h+eFusC\nTA8/nBWr7WPorpnHM137Rd7yCNWSeDgOS/RrdySn+w0nKZR5MwuzZp1f4X0p\n/YbTbZ4SJRCctoo0/HglyCW4UfPs7KRLAdRLlly/3pA1plS85PrdEv2Ysehz\nUZE2WI1zTsYIpBq0CjEyi6AIPXKysDx4LlZFI+qkTkZFQsV6I0C5NhHVH3lM\nIop3GyzGH7sS7FiTck7Bhy7psCEQdYJgDRL2jPFoGGxMLUHBVq97pWql4Px8\nzhhEm4LBUOEky5PFYc22TqKPJVx5QENLQId0GhY8PdLUbaVDVIfnr5FxzIpS\nQBJvW7PMyCkfyMUnWO43IuZ9WI1H15tm0PNQiJZSRw25I8geLnIihXl4jKw0\nbvdrZ7F+CGUuBMA7AhAMlwX4JJDzRu4drWva/JmjZXX90+18Nm+LJKccJEoH\nbWf7\r\n=ISqG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJpAHZo6ZLe9jHdKyN3RAopj4VK0Dr2poF2cCzPwnrGQIgCa9VNV7yPh0lOd8VVD67+cxwuw3AyUsj81Wo2IvgaTk="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3043-beta_1620462988424_0.6071644873265092"},"_hasShrinkwrap":false},"8.0.3044-beta":{"name":"meetup-web-components","version":"8.0.3044-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a7c3469df1af7ed52d97e59d727f4501460efcfe","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3044-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eUhSxI9AbsxbQ72ofJ77Up/DSEkKLT3iSHlNHn+04YbT3aMzM23D8pwsLGVRAoruCOON91dNWaZOeFhnJ50jnw==","shasum":"b992c0d4fdff20805b9c85d05fb49bad1bf1bea4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3044-beta.tgz","fileCount":613,"unpackedSize":3108868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmJ0HCRA9TVsSAnZWagAA8pcQAJVa6/uaMMFmffEH7IU9\ngftivgRpnnwexCw9YZDuAYIlz9HOU9CF3mK1vNmwUm9LO6dZu72HsAv6q0Ch\ncrdYvhPjdxpQRkjTLS+6tBMrwGcHgxOBHnd2FCdO/rPwD1wkTfdtWx9tGRqG\nf5CgJ5vSTqszRe7aUubeD+73LzmQd7j2DUhzxW31w0rC4ZzWqAZXsIY3+qvc\nLICoDYb0h7se273ISx2KetEFKmd+mAx/wlieTC9Jn0QGwoX1sVgUZ9drupEQ\nkdqMKsupnDh7xFt2s4AR0z4cG/kchViyue6zXm/Mxry3iKkb8ZMsyfYCob6n\njExSjS/2FI/QTYLP+uqYSmmOtt9WOMuxRYicSGDkePvjFhZolS51ZMBuPuHB\nDxkL7A81Hv6NsfsdUpqTJupa9tZeAu0ucVu0khdWQByyu0EIBv++EFIgL9XU\n1So5Ho/gs4KtXnTIauSy0n5r1MJZ7N7fLe+EaebYMDeu8YlE4KAvJ7GcAiFq\n9w/qdZ1SR3Q9QFBPf6x1iT66CSDy0NSVD8m0tc2iMFqryl2ncD9lJTOFdGFK\niTEgysAxccbciNjSIbm+abqU7lr8/6Q1MAfkNIkMZi/KvFv0VqMPw7KQ5Pe7\n9hhIdhaRUFACH3zj1LORAMLttdphB5cjMwug8kj0giOkpuKVcQ0X75wa7DyJ\ngQX2\r\n=P0Jx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDpYvi82dBKTp/P9T/kEDL08mcewset71WL0PrZDvUqzAiBivK5zjU2MruBzZn5I/Gm/uB0U9XcFy5Hyo4FxVc6g2Q=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3044-beta_1620614406925_0.7115763213898705"},"_hasShrinkwrap":false},"8.0.3045-beta":{"name":"meetup-web-components","version":"8.0.3045-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"15e82cc0b836999bb2547b5e676c32de308c98d5","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) [![Build Status](https://travis-ci.org/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.org/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.3045-beta","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xTPWC5gJL8i2qWhVpVkrFTzkFHqAN3AwXpE8/BYO+FFOs5mU/DJUy6bGa2MJnhPI7Hig8wmA9cRnhE58/z63Bg==","shasum":"724f1a34134181214ab5a1ccf4b37af8c2f698fc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3045-beta.tgz","fileCount":613,"unpackedSize":3111805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgp+ImCRA9TVsSAnZWagAArZcP/0nANruPKaVRAf/Rci7y\nlS0taVUSfTOFQUC7AkEaCGMftST27jkRrJEbZRlb/5tFVkSGxYgC8IjB0hbo\nryE7N+pMtX3gmkIY+md46ypD8hfLMUPp2o6pM2/RZ9M8E0juFSapUx3LiZQT\nrOVNMSRSHkCI6myEfSjODD8lrBNMEq3pAQLnuYXYf5xqYfItCZBsdjU6Gc7d\nvz9soDfelZW1iIUxZfK+APYRn1ItQVEx1VypIvnDVdBgbn8wK1MTagxcTuAL\nvd2ZouO9foCoyutSdO6PbvUMGDN273ax1unjlya65SFbkVsHZeNejlN/Im2B\nMtkqN60b64BQF+E030IaVbaos9HQJ3my8E0Mh21kVf+d4QfoCuuJM6mwdXZ0\ngdOsRj9wJ5ZMGzf9Dpw424G5KPktCZMIcjE/pgarE7Sn+kEyXzZwWr7JzruI\nc+/CCTzlXeXB5jpBcP2P8l0lkZ0pjqFul4MUE5vlLP0wnt6QNfVYu0MorYdA\ngfX9agMoHLF24sCfzS3u0T7fEXX03UwsDwnfToV7JDNhCla2lJ8wdywp1IrN\n7rSDRZ5V7XOe+Kvu8TqUs07EhKF7t4dymbCrKl6vsGddY+GbW6/ZWnfaJ+ym\n7MPnM/velYPuuFBWKuNSSUZApvP84WuFwUheWs3tpFPzvCS8qMb7fMHwRXyV\nOCDN\r\n=Z/hI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqiPXlSRqExf8+J9YjY70ZL5ZmLk2VXc9Stqn4jyaecAiBYHOEUghGCS7iTzh/wq6Bhv+9g7dLF0Izd2fkTfCj+5g=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3045-beta_1621615141707_0.8475199595052121"},"_hasShrinkwrap":false},"8.0.3046":{"name":"meetup-web-components","version":"8.0.3046","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"20da8b3da58a7cfb0bc07930834d16c55f407b96","_id":"meetup-web-components@8.0.3046","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6pOzCtO7BraQJMRqWQ904zxdzZ3/+Zy2AnY4JzYB+1ws5AB0dgO0MJ0Q1AjtO8Ee8EjstW82Hkc90NcO66Rh6A==","shasum":"c6aed44e718548fe0834d5c64b84905448da4c16","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3046.tgz","fileCount":613,"unpackedSize":3111800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrlsSCRA9TVsSAnZWagAAMWEP/3+hYoPRaHwYQOsSgxWT\nrIKAOc02qORBRKC7DqTiKXcIG7q5d2E+6GdZvAsc38PGr5xIROFxZtZ8bnQO\nykwpfOYmsDvwEcio6bDNwy8JS1dHJh/z/OW6lRMRVwgwthStys7P73NcI1Wn\nXGPT18v2M1fXJ6m+lpLBkCPwryUbXud5H+utVvrcGyMIbnd3kABx3aSgLcr4\nChkyLSOrZCn7zixzca5I0+acT4o8Gt3f+wFdezOMGcez1sQEPZ4A6JOOx0ie\ny3w3pndm6AqqjInY+0SRWR0yllcQtwnf71qDjUD7r4uP8CwyXLEa/psg5C3D\nM32581xhAMXAemz2qVdLQChcB4Fb4Ko0X9XIn1WbBfml3cOTr6i5cPFMR/gS\nBLG6IziY3hiVjsORURFNp/bLkxo2MNnAfCXn/lWlEpnpA9ocXnh3MSjpJKhC\nmsvnwllly0DAb+DXa33kdJOG4bZHrLsdAvzwKcnsM4I1VB1Eo5BqMydTntrY\nKiCKL0b3cDu1ymHzb4Znf+6FzPVEWHAup6RkhzDGIWW17avci1LXcJMuAMOX\nZpweLMfkBRdO8pzExkCASPGa7TkMMNYZVQmF2cRTVA0vEKMW4VRYU/42wkxE\n1d29PzIiBYLZwaiqRUiZWQkeQSYmEzn1fegpZI4heemvIbUbmCFIfFVaSDgw\ndtnd\r\n=ryVm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSVLM1wR0Jr2Vz8QmN2cYc7zZunPkLHpt66dQH9/6PaAiEAqfCErKbXQXEfPG7jnleUh6EUsSmnUmt3Pz0Bv35DLMs="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3046_1622039313523_0.5267694996134036"},"_hasShrinkwrap":false},"8.0.3047":{"name":"meetup-web-components","version":"8.0.3047","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"71a9a8c673c3bff5bf8059c18d8a20d703c2bffe","_id":"meetup-web-components@8.0.3047","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-62hvYtcarGhoXIX2D8q1UI7ljo7Qzzci9M31bMHU3O3kPnxiicW6Zh5tHtCP9aIGsIAI5o7/vun6kH6eV32tug==","shasum":"b656ffeee76066769b86c0df61dfe64700aec998","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3047.tgz","fileCount":613,"unpackedSize":3111800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrxsvCRA9TVsSAnZWagAATD0QAKNqxbZoWebd+Rs0t/A4\npsnIBfjrHWRjXOWljTqWlc2PrT5f1x5NJpDAD0kdk+8ORYhiB4MiXLmsT5b7\nqGfPCKdaNVgKmBzWxVX+izIm0gcYZN8iB/mfkHGmxhuSkSGk4M9HFxvOSapU\n3lk8BAj2YSfm8nJyD/95y1J5AY9fHfeDWbfxhIsYfBA13+14HHyQ2SjOgYNb\nRF7d2jX6PdVsuw4bhk0X66i1NhXuSdpHCGwNXUC5XEJG0lxbXycAHvLo61sq\n1kixJCGJPeWrvS+AM4CXFcZK/CvZFU3vqjkbsc1G5OoxCwrJ4bu6S/GUt6CB\nAnvv7qd1wG7+I1cBFoEP4hlAoskMh9qgWSeanPBpKkBXAG2fVtl99VglQe9S\n+8gG/UavBLvKn1L7mrOvqFv2H4V2tC6o8NQlicbPupnvUq/c63I5zkJMgExZ\nQvVZkDnam2XvQtOISKLmkQWSij7OJeYPu7XPxZKwKzC0qA8a/hKFtNKZ65jO\nVtjwmhcJ/qrB6R8MQPR2jJwII0VfVqMEwSw4FKB9+UaggjSD4qKUlrJ8tdaa\nILV3zNW0a6CVb/t/5fPQCTwFFO+rjFfczgHdhINnK9t1N5UqZMkFmObnKsxP\nNcv+TNPVzWPuabgmDhvZMlOPxUihTEO5uCskR/orPLdB6vrnebXUX4DbX4ui\n08Gk\r\n=eG63\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJLzcpBahQ7597flakuG1Zxw2KpLZjr+WkNzgo+qq0pQIgPUmr+6f9A/iCbK5RKdW3XsfJFRSzMdqaNK7nHJ8S9Yo="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3047_1622088494790_0.8464563409253545"},"_hasShrinkwrap":false},"8.0.3048":{"name":"meetup-web-components","version":"8.0.3048","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"862bd628e405be9aeb602942fc73d713c3c8ece0","_id":"meetup-web-components@8.0.3048","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NgUw8Hg4K5ii8FzWI9XIER5+0geQkgIH3hg5FlZKRpNpBtqpmYxsKh3BblMcvY7y9nOK3UkzAf8/Fcfn43NdpA==","shasum":"263903daa00563899aff546ffb06c9e2a8e28183","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3048.tgz","fileCount":613,"unpackedSize":3111800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrxxeCRA9TVsSAnZWagAAFLcP/1gv5ThcYL3KpKH9jBNz\n4ex9ZjUzpZSdWQ884PlRfAwqVPJqCTJG20hwQxpju5DNkXvMqnj8vjKnOUIb\nYSbsOanh3gUKRQ4ZJFuys28+TGXS117hMYXqOFq5LM43utcsOidzSNBdMkDW\nyy535SJWLKgDiRhGBGRsv+505b1Jo1AMssNyopR2ZoVEaQIpzSZbmgIQ8Mnv\n6MLDlvZwpJlPPI6rQdGTXtx76QNY2tXt23HuKRDWJ/gpYEQnPVJS9VTY0WvV\nq3nZ4urtNRVsxLPXYMTyZKFvNVxerWcYp/KMoICvIQ0TEyrCMcWzeLNNG2Rg\nI0RxslOeXZxMFiMhaLi7U9niYXRbAAFwH1olFEw6QM3a8T4b99+ds1cKuNFt\naw9iXm1VESBlaj5s3Jo9SPKLhmmoeexKpzFmVw0WNhXLzLHmxfV9VfJn3FRt\n6RtsSJXwpKppH9w5qqV0w2TogcH8eCTgz/tByDF8LwSVbqs/OXOCmM5yuXqQ\nszv4Rpu75+QyclLVIe2iLssX4subKZnRcZq5V2r6rafRJKW/yL88uZlzLCpX\ndOYbjGpboAYd2nXZhrl9ogrzMzUi9J6uobUH8xDPUlU+M+ivz7/hB89qdd0P\nIcMbaBRqq2WLJUrRH1A3qmjCqJfsMfugSpv0mMMREJ6Tztd4aeWvl3yTtXIg\nWkaC\r\n=q4LA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkPwHMyyshgzXZq4eJkXzA5CRhOxExttne1OF6Ot9lnAiEA35GiUJp8JGBL8a/UYLCJlvieSw7/8TS8cbWeWp4HLrc="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3048_1622088798041_0.6175761584137995"},"_hasShrinkwrap":false},"8.0.3049":{"name":"meetup-web-components","version":"8.0.3049","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d299eb7d1d7844f5416cc498bb2cb136168e9d10","_id":"meetup-web-components@8.0.3049","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nNV7YVWapviBEsoqF+5MNjCnGml9cs70VDoyCBqErckx0/GliCaZxCyOaxuEJLG+44tV7chlPA8leuxzzlFxmg==","shasum":"27ea64bd3a5df7db17cc325389c36c9256335f95","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3049.tgz","fileCount":613,"unpackedSize":3111801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrxyKCRA9TVsSAnZWagAACmoP/jehRpTlsMUSAHYkAeMo\nmFJ4AQRzegqQ4Ry54DMgIbAmjozm8fOC7vBUcAJRyD9YzUGHRSzi58LS7Whp\nkIWYo3whpK6b5gATO+9/8LPZmgSQJ9DZvlKX14y9KE2RWD8yW5AS9PrINk8G\nNy99dmxP3x0KmP4LqKkDUyP129t1ny7F0v19lq8erkaclbv4CmH8ple/6UJo\nwNRLv4Wfhf3lre1jQt4ygtuu/ixSNCrju9/lHvUGFqNIYYKy9yZG9Eo0ixN/\nORd+0SBumEgVXRxTg4sR0ZV3l0bZYviv+fl9Z7jC1e+6ObDdx0OHd7h4lgww\nwyofOj+DL1cRJ2RM15ch2ExZHidiz7vcZ0uzso23inR2ByRIY5vp06la9Hmk\nyTqd18WVCLBu2XkDehEF/IcT3fUzPiY9ULuYHwEoBP5OVcprOo+B7m9hnaqG\nf0p4zMthlanVkXcoa4z9XUqJMVZGGu5cJaTs26KTkG7F1tSzZ7x2p0P4/2Vu\nWRRQqmjJmRZxLRLySa37H5fD/fWKU23kyBRmtT92SPkp5PSYxI81uLw8vJyS\nmcQLqBU0GlFZo+ox818xLOd3ZKdq6J/sCYZxhIIiyW86pxCMarAg141wljFT\nHCK6VovCkTTVfEdPiDy5rbnQT3QhSTLLk/Kl4eB9AppAY4idpxtZcBq+1weK\nb0J8\r\n=1gXC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2DN6R0Q/CYlg5ZYJc3PIPsrBAnkO02j7cijDES6tYvQIhAN0MLPfx2Fd/VME/2uj3qZA5WdUCavd/+3ofRWJ8Jfcy"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3049_1622088841660_0.9310644627935307"},"_hasShrinkwrap":false},"8.0.3050":{"name":"meetup-web-components","version":"8.0.3050","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ae39f046ccf2be7315ad1323b3875925880582a9","_id":"meetup-web-components@8.0.3050","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VidFpULFg3q7gdVXkEFVkFTuFu77/gdJswDOZ2UEN8zLlEuGCnGXLOrNqLW6B8n4Ma/Dfl360NSpjUH2Cy30IQ==","shasum":"318135db7c76b3b5888d9cb06e2572c3ad261184","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.3050.tgz","fileCount":613,"unpackedSize":3111801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguUgeCRA9TVsSAnZWagAAxnYQAJ0zBPnCJC1yly/oyZjX\n9C11VnK08/rDgJbDIAHxo/ojDrpRUlg8OK0mHuPDzh9hKNWTci69eyX2Su8v\n9nV+TJ5tH0CiAgbtBEo8E/I6NTNVPdyknHaSyFRReapHyllZTqQ1gzyGU/lJ\nxmo5szflRWWt5JRr2baxd7g14BwUFjzM4tpWP7fp1aNbWz/FJBXOgUElrCiK\nh9exGkJeH8hTaV1rvz8YyqTjqbQFRa4ukuSsl+LrzZs/16ugU/Z9uHf7XJyf\nFKovNhpUUUurCMGhSS/oLYeKhuHfiwZ4DhSUSiZYlkDoCkvR4oOQ/aiUNg7z\nbuJULj3z96pywhJOJ7KaMQZcCFPg/7IGRB/D7RF1NbK7vwIe0zPuJaCIpBcf\nPIktqzULXufoqBE6QsdWVifUOvcfW94BgsxeFmYGstSqTSuE+7B+rw9oTt+6\nj+zX1RQnkbBLF6jA/UkjNBJTiyotsq6Fgv5KsnSGkhao0ovyUSJe+0Ix4/R3\nHqzXeXOoKUqhAz5sWpdq1vgXs5z+hSAdrvziFHJMu/is3Uka2P1Ty7IYnUVt\nY8E3kF2ftGNvpduhd7kH6InJ9VEDy7LJW4hw50mKkrOjBq3uSzA2PE91Xc1x\n9FM9BXVFRR/j+i8te7TaciXBK0aR4TSLad5jODPUD1tkdc08gMOjkh9pAsdo\nef9o\r\n=Ny6T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx2AKJxf3Jq2+yv68A/ppY4kSIewDd/gb8eRMo1DA/HgIgApw8hM9lytC78lHf5jwvbrmUaa9B1vTz9jq2uIQMN14="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.3050_1622755358094_0.26354800112917043"},"_hasShrinkwrap":false},"8.0.1-beta":{"name":"meetup-web-components","version":"8.0.1-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"877191b0034c1ad1e319b974fa7bc11cd9c80465","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) \n[![Build Status](https://travis-ci.com/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.com/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.0.1-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Hd7fCaEz5LI0onCpCum3Rf3EPUO9pssGnL7yyvNC/AQOsqLBHKDYusAU1EFKUK5VF7lcC9QTHAvPXVKLRM7DYQ==","shasum":"1f11939a2f46e951aa9e6e6d1b1b4a861b1ad60d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.0.1-beta.tgz","fileCount":612,"unpackedSize":3108578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguZldCRA9TVsSAnZWagAAMdUP/1VhEqIbcrkL8djGjdK0\n2VKMS54dw5tQPyiQejuzLlvvE1/BeQlGd4XLLSTxUnAJ/bOxH9ZxnuM/Q2m+\nBYsfsVL6+nLlSgPQNd4O4bz5enwe7Mz01+LwaZdh16F09KuSh2DOMzEJgLgh\nD8RbeGDI6cvGJDTwnT6LII91R4moso//pucNmkkcZYyOssiRfwII8TWglHbi\nmthgy4DNOsVNA9RKBde2JvMe7tOHkZE2CW+WUjLPJjPeuVo8NZYWZsdSLetY\nvTKatcXmkYsDmsXrSCcIL1NTeFXilCvAy1QxMTM+x38kjdiivrnKIsjFxFvB\nS2W3Hk0SlXIZ86w7ZcniLuRwuigZM4MNUCVtdJ1rCQRjfQti+Aki+IBlhUBm\n6UcbOMWuS/lpGs9reIk8kukdU+UOXJwSe1YfXu1uZ8D83i+ykJ8mfSy6hrsx\nh4GMLRJwpq5+ga//ca+O65Ct5UXIATtyMZ5i3wMphb3NbscLSioBEy7+kzxr\nTNCeJgscjGuJQCpA9VWlCmWBpJ1dDTob/Ojiq5BMlOp+Mz6IQ5msWx+0NTOD\nmyBItLkKioU+MHmBf9pfT1pqgH7PDh4eHX9xZczdBHky3URS9K/NVk5T8Pz4\nQBD62njulebhsjNGsy0neCOaEJS1xSXXR/ZoRVJ10A/O+AHGXscsw6COsusH\nd61w\r\n=dYx/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoA5ZGyt7GLrsdShBneNBVPVKYbuqU3OBtYCM7vhA+nQIgbbXf4B0AhddLhV/Hb5sEV6TgNWTDLy/M7B39rfc83NA="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.0.1-beta_1622776157141_0.8059842969008748"},"_hasShrinkwrap":false},"8.1.2-beta":{"name":"meetup-web-components","version":"8.1.2-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7824abc1b13476680a61efdd9da24e39e8383d52","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) \n[![Build Status](https://travis-ci.com/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.com/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.2-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-QohDN2GCNhe9RNtxvalDqssVgVwZtWs8LFLeW64hgC4g+B9b9LB39d0HKkN9Q3Gk3/2s3R7lhweVKeIiWXwYhQ==","shasum":"0cb0c2a6a9ed8137fc9276a72a8095a1a247910f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.2-beta.tgz","fileCount":612,"unpackedSize":3108578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguZnaCRA9TVsSAnZWagAAoyMP/AohZBevn/RBldx8xb5l\nmPk8XSgQTVHepu1uXwFms7v1ZNmzubukjYwz/5Nowzqr+ViQXiqimj/orio+\nWrBp9HejEx+1BDDRov+RoXjrwKd6y/L1GO/noayruqGv2+TbVnPEsQVM2zam\nUfMWr27upP8iULQReS0iR42vORDoWOl9ZUsT2UiZ0Ex6YBjlllQMVVHJhNTd\ngNZV7Ykxfi26qeO/pbRGfoyTixNxmkU/DwBbQZivHazQosm9MkJvG2SFCrCb\nDjN6ZcjMvzyUQmmCG98Z0tHPmkIyd3Vuao/+a/sf6hsVtS4jWEUjzV0EkSHc\nMIDgx/25w+kZEbumf8ZJCDspNrbaZOjRJ3QyYMooBK7tVw9EOvnkrYl80655\n7zZ4t7Rw+TQNTJK7kZw6HbuR3xhPnGJXmIsL0BnIgASRhOwqXgcC9Hg1lqOv\nluhMC6onXYHWUMv3sfGgXTd+/5i8xAhoJN/TCOZAZXoyqwSTF2HbCUpzXo8e\nxUnxT1MCHb+hh/XEEUgKmJZ6TQ3dA7UmQAXCcJGt2XYAr7NVty5ZLQ4fHHgB\nW6NyNKAeGvtIdkk/lW8VU1sQbb9Efpp3wjJZ5wXMKGUN6ku5LdnztAY8eiJD\nSB3+X1LN4AExi0fzx4toUFO05dPaGa/iQsLeNiRdkZxedKquNGK9cF1MaIbv\nmV/t\r\n=bzsz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAhHD86HuB/kEYvKu9fGqYR6oEpPVhjeqc3WMaeWjCvCAiAx8C3k0jq+tBqrg1Vzdtb5DnSDgYLyIVMGnQt3Bp7fsg=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.2-beta_1622776281858_0.4030126782265888"},"_hasShrinkwrap":false},"8.1.3-beta":{"name":"meetup-web-components","version":"8.1.3-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ce2bbbc24006761b7866f32a0bdc10eac9e28ba4","readme":"[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components) \n[![Build Status](https://travis-ci.com/meetup/meetup-web-components.svg?branch=master)](https://travis-ci.com/meetup/meetup-web-components)\n\n# meetup-web-components\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called \n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`. \n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch. \n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.3-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-SstSE7zjCukxuEH7iPyjLTrfLNLiJSTCxK7iNvvRXs8KGdLTTqDW1gKL+deFHg+KlbuH/MDp0Tf1fRu07reb/A==","shasum":"06f6508c9da95492ca17985d5401a3bd2e02d3b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.3-beta.tgz","fileCount":612,"unpackedSize":3108951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaR0CRA9TVsSAnZWagAAA4YP/jKyct+oOAtPZT8pbqMg\nEiv2jLbtpEoxG1DYzWHAoFBEIjoX80qbDX9o+hBNcwByEEjCPA6l5MH/6d4n\nIdDGCZgcRq/rrM4L3+WD65tPf5f+00Is7Ym6AF7Un6j0m6vLUlCoMg7ri7RT\n8rGH3K8q6r3Hasd7gA0Rudkgz+oOHmVguaJXC2GOwkTEI42xGDRT6GspbZEA\nKNHE+vIbFiTsXj0gM52O/yjijecdmhDxlfay25wSSMywtlqWBDgbjpix0/6R\nttXTfvlozT9MH3z27/5Y7vhQ2/FqMLp4WCrOULCUk3Y/+kztaMgblPa+noWX\nKSEnQDAyiZTbd2nccM3NztEY4OStX121Wil9y2A3ngy08qZZkkaVdhL/pYpi\nqk5lcLGZE3/u4ZUy6rSgbhFGY9/EqjML8AoBaxLl5pYEpiiTDLaQNW5Su26o\nlTmGfGo99kL94nEhae0hdj/FYI+DP1T9I8ewMy5en0tZ85QNuHiT6/qfU0T5\n9cj/4bTp2YC5wtMTMzPt48RsTAFosR9YKqV3ede6RS+prSUun4T2jbCEF1Vy\nM3SE5I/ffJBo43BFhLmdzs4JLqjZN3UxO+9e9YHh+DbXxMulL9IyS1WCAVil\nA5n7aIE8vIoXWnDn2/5rq0ELaU+/oC7b8miJUIpAT9gLkP+GnSfjoQTe1YIK\nYG/8\r\n=7ays\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeYOC+9F0NOZdc1VEyw2SrxHJVv3I427uE76Grs4XCiAIgT0bNNOrmRnX+WjbSYDKbWu2khuDOkymgAlTSTY0Bjds="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.3-beta_1622778996370_0.2477962387644237"},"_hasShrinkwrap":false},"8.1.4":{"name":"meetup-web-components","version":"8.1.4","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"93818175f8b433edcd38cf300b88d95d88b169df","_id":"meetup-web-components@8.1.4","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-rAX73jSf3rkQ0dyyxnwKil/ov+m0VBXqy8gyQ+8zWp8JxTddw575mLr6XMCNP48fEc9a7JgrucNv1SC5QmTu7Q==","shasum":"729e49c3c7e7d409fdeeb99aebc45e18584ac0f3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.4.tgz","fileCount":612,"unpackedSize":3108946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaTwCRA9TVsSAnZWagAAHG0P/0i8++tg5gobq2Dfvy1U\n73Y3XNDj5FG3iYWoPazVdF4vThnbH6rp1CPsTWIiZSt2nA6VjzI5qMiaPyNV\nJBJOUyE6A53lKj71/TJOE1M9p2OQpHJYtMI4OWOttM/FSYDHEae7dcVKrSHI\nwOGtXVrQGAHJXlJbWhPn4eW04HLT1uDHLaeZP2EzfIOxp4zcCfKNxRzc56wP\nUL6Km6Nf07dncPzpouwSPttVtGO84UUkiwoqsjI7hM4yUcXdKN06Zf6Ja13H\nYGmdH6lNHCd5RVM60RUlY6bI+Fqd4tNC5QF4WqEdPvq0Gj84OgjBi1E2HFz4\nJ01/jGzMeaksbArJsSfuS9RWmv/WfGEzU+FyR5ocQq6b4I1epm7YRu5dRSIB\nTlszqIshHEuOQmmTbRCyr8x0E/Xyx6k6SNFUGaonA97P4b9rbF3dcY+MDqNi\ndZVP256/yTWfaUNt0EiQIN3MMv3Qgzm5UK8PUmWaJ0OPbxIsYNn0ljbjSv6M\npmjgxx/3kItFECZF9HJqHSMR0DuVd5RPcK48qs84kFrPDMkIJwVZHTdTfOCX\nDeBIwDogyBLP4VPKYQvJ5D3+m942y1AgVsU61WjDgddRii5w7gOEXrB9+54H\nFAItazI7eKM9JM2pKtr3lL5CuoDJgZ8NV+Gao8LjBIfaMtjNnJjbDQxWjN8+\nRVif\r\n=YgLP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRgem4sDtq5q8wmHm1ZhHC3T0ZZjmud9PpSQMqMdmf9wIgJDHEzhaSMdzb4q3Di68h0CNxZcGpJ5kmYmOGCIUWJds="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.4_1622779119968_0.6799796095206234"},"_hasShrinkwrap":false},"8.1.5":{"name":"meetup-web-components","version":"8.1.5","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1f96bf4123f3f406a551c839efb8221414a2e79b","_id":"meetup-web-components@8.1.5","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-XMmFl9dq3+yDSalYKlkyAZqnVB9g4P3SNEOEsoGUSOln2By0jGq0B+MsTH2KPbicz+tMbTjzlsizdbfq2dgb9g==","shasum":"ba85f262864e716a9434448f2384ccac650b6d22","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.5.tgz","fileCount":612,"unpackedSize":3109005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaYECRA9TVsSAnZWagAAmUIP/jw5hsUivMwNj9/BXBop\ngyBlCVqqkR8H5AdJ1tL3uPA5hgYqQf/PIuqaFAv2GePKtE4FKa3YoVoT/Ud5\n3YA9czy0E2NJgEltVflqYmRfFkkvTlcOt80tolktrVc8U0ePsOozMNs5ERg7\nnjvPp06ZDYF7D60jWEbcoATn0de3A2KyigtPIp1KGqCp5NcSaFk1+J7yKzwW\nWatwzma48UAtQrbX7JmpSveEPQJQWSOKZmmfsZeDYgx70ED0hop5cMxF/V94\nys2+qKwD82k79Xa4RFdHaKVqLjG2LSZBNb03pAfN1AyuzDfzXf0AWiLi3D8I\nVzqJeKRvK+taZfogn/q2U+z6EZrDSXFzJjydF5+i9afcF3ro4e2J3druY4TG\n94eJnennDdE19jlu1ZUrLcxs3coLVMDrXJSUSIOwMRrf94SOUjgd6NDt0qt9\n/wEFgegUrsGumVk7/L71zR9UXKwglxOPktH2g0eTt6PqdqQpHakcbMzhLXEn\nSN1CwgjpZRysPaRYbti4o1utgAKnLX92s7pi/ed+FwXPAVpGXSIgZSE1jJEi\n9k4HUkfHFAWGguDdyp/sth0j66XOGGm/T7410D+xz2UWqgrKHjA+gqgMa7Hv\nQHnv9m7YhEdms16wAvI/QCLYjrTrtC9pEKpPD9jb1qJvfFKtP9X1oit+sFjr\nmC+O\r\n=q+VN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5T2VGhAa01cfxSxcl/9JOf2Z3JjFYzH/bEQADr+7hAAiB80S4em88lsq6KhFGI6w43AaxmyCYkWci2Oe/qEe3HPA=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.5_1622779395900_0.5000466342433281"},"_hasShrinkwrap":false},"8.1.6":{"name":"meetup-web-components","version":"8.1.6","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.22.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5278c076f29d913e6bcbe077851848f26ea601c2","_id":"meetup-web-components@8.1.6","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-UUszrztBqINHZCgiPWbaV5ZgD8mVJVYH29/JgzEU7LtaL6VdPCBsoF7OgBVJ1WlIE/8SDpZVBILfP6KUgBPEqw==","shasum":"ee4ce382ee7c0188409fd388980a1eb265f5b57c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.6.tgz","fileCount":612,"unpackedSize":3109034,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaatCRA9TVsSAnZWagAAIhEP/inV9312oqXVdbmWro4M\nw0d5l3mTtREhS7UuZRrmCT3bT97pvM1sPHuI9aa8SxzbuxKv/PF9z7MPVy8Z\n31jWcRS9fs3egd9x20LjYHrRxpMkJBgNqulWsw7o+iVVbS8jK+umnVqiCdRy\nm0DaFgHAI6S5bz7LJ7Kxd3SkTyioAQizKNNFgldY6a+X9PItYQHuoB1eLjFT\nzBkxpsJ6ufVeBzZnC9lt1vN1kiD+lxB4kTYSJwAQpIj5gK0O5c5j2KYay7yX\n0pJS+Zyma/2c4/iqmyD2rDOaZT/0h28fn2Z/bpm/lZb6EXMMSKfXq4WzGDY5\n4aB/581XGj2I0NPRwyGfgl91fJD9bUIvZ4n3zCNSh2mGDBwRsKN6chOX/nth\nGQ1cNwIu/lK7zf+M/AylkzmxyajG/VOqLDiMgpv3QY6niu+mCV5HD16Wfctb\n1J9CF+0s+bAWVyiToBE3iMEopAyL2WZ4zl+guDtjSUTdB08f38wKFXslyLIB\nnS6pYEQpSyx1up/t8j5dD07BXua63yLNK44xNp1gMYtTB3tcis+qrQaousCW\ngZWJtA8Bg3vQitX15kslCCHGKjldc7eec1r5xqfc1AGLBYe+iUqVjri9vHX/\nyv8RFKIlfihKs9obA+sJPkT2VrBdPihC3I7fq5ClWnuOC+/H1s9GVlP+Bu0K\n/HM2\r\n=QWwZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrzR6xClzGCbkpgKi2sIRQ49xvuqXk3cZ+PxdY/DPTCgIgcT5trBIt2IPfie/CvNjjdybHAb4MWBfBXS28t+fJiBo="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.6_1622779565077_0.9768567479257502"},"_hasShrinkwrap":false},"8.1.7":{"name":"meetup-web-components","version":"8.1.7","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"67534689839b5ae3c036ba57804cf932d9e485d0","_id":"meetup-web-components@8.1.7","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-kBpCAgOOOfuEN95tHux9TNG/E9COb/Bm3GyJePKYP/L3swg9Hm3HvAYv4YsuDWa0w1BUKD55ModwOtjI/Ojkkw==","shasum":"a518d47fa938a7e6c5391531cfb286ad9fbad9e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.7.tgz","fileCount":612,"unpackedSize":3109034,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaboCRA9TVsSAnZWagAA+OcQAI30Y6fwYP5L+URVDE7q\nwkg50B4zqYTAZj+uRq1QBbPhlzIZFOXCMEGViEiseVqR9eE+C6eomuvVy0NB\n8qfGOH47yaZEU4aHjJgNK0KHiDfc4R0cLhPg4C9I7/3B4xDU5xNB28BeKYUQ\ntczAoeWGHkxFvP5MEbll92GipLnz6pd3lwmGvG+IWMw6cr/I6TrGP9D8Qqdl\nb9F6w+b9RUnEvT4FQTnS8HbgFGk6JE1v/MxZpG2/IsNvxiaUWkxXKAcsb/lw\n3WiyKkkaWxFM7iGQj6vqaWH0AkIRk+Mu9UFFfOWV0p2NayYNXxaU/CxQtR7C\n9juNGaG4KnPTkM0fjhG4DsxGlRDnaOJCeHo+XkwxUBP0gD8s0s/F1fxQgJFA\nNgrp/akLTuigak7IIkJWHZwCDeAD0u7TEYaluNB9iGBCm1XspWLJm2d43RwA\ntyUTUoNjYhAwbVWzhqJOArUW/YH79+4GnjEO2CDrivlDa4o3OlEC11IjoRsW\n8GAD8wgVCHiiq9IE6yljCJR+uzVLpOJzM2o1JY5uCjV3QR6ZA8IpRv8g4jmi\nkFm3oi6+QUtq5IQy7m+ancD6We4398p4+fAMFURZ+AcMtQCtB6+ljVl026jk\nP3IK+PeZokCLajv0dFPeZL+SSBR2zoAaHvW2R4wnfB5uEeOcycQQxc2z+5h2\nCQiT\r\n=pzjW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH36SMJtxqWzFRDR2Pze8gdFVSfGzD/XkdQZroXcIUBAAiEA5IHvrPIh31kG4xrc0IvR5Dh+4FLIgVeElVEo5uBWek8="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.7_1622779624033_0.9183717289318536"},"_hasShrinkwrap":false},"8.1.13-beta":{"name":"meetup-web-components","version":"8.1.13-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.13.1","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"89c9337813cb5a828786a8512ca12a9b208616a0","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.13-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-z7Ni8pkkD6kTpkogiN2m6x4YREfI1YpmcL+gTqhq/KFhi/qZ1OMUj74Zuk7OygrBUO1vYr5ETd1zLE36Vd+KWA==","shasum":"0750acb4da196bbcc0a2459454edf9bb131fd7d0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.13-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguafKCRA9TVsSAnZWagAAnpEQAIZKNp4glxAX+CY6oYfx\n2+qUmI1nqUlc8WqFjHXq2GzGxlTmjGC5/63B5LFsuHB8fgkVdzJy5WdtQ/WR\nqg1j6CopxGKhNCyvmosSiaLsXZkpFCiGJOoq7BbY7q+arDfjVNrgS4Rf7ACB\n4BcyEQ87c0xyvpijiXQrcm6ldeLIWfTSS+4qInAm02QrayhYfFye1hc+QamK\nJMRvO3UzSki1vYCmBxUMt5WP1RhOOS8hi0X33/qPJy3t9S332voqH3uEK7Ji\nMwFpY7WHZz/6tvFdFwSfubDYDeHno1JxslbREyQrpbDK5rBPNelTr3qzesMr\nYbYKmjPw1uUUzwumjra9AdISYJLALW37MRFp6/+a3VxU3NdcAYD7WgFZ9Qqx\nVV5eG5ueAp1ine/u9DoE2N3XHxTP/h5Yn3JjWsoe3k2waQHlRERmKaQrh3Qz\nbtKUuWFxx1GbaebBDaVH75dtWAIyeN40zOWuEjahzJSy7Ey6349+LujpHPHR\nBHy2mgKllRMvYxqrjwwZECGHyE6Np1cPvXD+R5u7qUlVdVBwn7PfTYBqDXL3\njmsJr2oQWP6Pu3MqvIWGaz4XlW/aYmAuMc1RqQxoDIoUfHy7HujUke1y3GUh\ndo2LrXh1PWyJfSP8QevW5Mpa1bGXrExBdhv50PnccASbTia+fn80XZ9akJgz\noNc6\r\n=3FOu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYSQpDhByZaazwSlR+xXyBmx/a3YcU1/S2pkQT/mGcHAIgZh8H6q385MrYNCpNMNgNbNkiCi7V6sks4uYczXoNBhs="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.13-beta_1622779850512_0.14404347163763087"},"_hasShrinkwrap":false},"8.1.18-beta":{"name":"meetup-web-components","version":"8.1.18-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3842f35a5c483c96a9b229a24f778ecedd9cc606","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.18-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-UFSZ34WxSP+2Q/mCwcUtdaJpMNvCKhEVijZxQ++9uFdSqP0yy7Pp/pCXigswIXfzjbC1LWjIZUB+bR/whtLZ7g==","shasum":"fa585d166f1a23be7538f0bbf7d20a1df0bf3074","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.18-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguafnCRA9TVsSAnZWagAA2W0QAJCcSarwoZRm6CAdjmnS\nOYnsye8vp0e1QAPaQJn1BAf8OIK+VVpAnKL7vbtyEQH3vMFFG5zSTUDuPaeF\nNJwV2yI5xtCf8nXAiTL59lHraV4qZ5RxXtxUdzw2KZL18YGWTeO1RSc64+8a\nDbW0+tIkAwLY5OvKcuuf9+0zH8krZXnYfN2EbxvG+Ch8VObZQCLVBKjAetwp\ncbs64koeFwqZxKGElCu6VJs5xiFTbgvtNrlaycRLIdbuLwR+mJLFaD8H1q7N\nKN1XlsW+vRDxyjEWeteG2ClG/fEbt7pgUz9+SZimuv+KXSoXhyieQz0Rui2+\nFUOs3RXhfzUpLeGyd1Jcw5t63qII5CQp6bCDJCfXtS2ZiE8vbtl23ng+2PMS\nbgnVK8dX+tEnNLp5jjOFOhi+N0bs4iGYE1F4GvIaKmNk6/y3BVlOpGNCyJX0\neN+PAXSujir5LJJS1MetyyoDnd5HfCfpP49hGsN45G/2TjLZv/Udyq2efSRj\n5veugQ2KCuEhhCQHyX7cm7wA4dHQ6oVT9OtTR6h5c3ed2KVB4uR/41i3Slq3\nCIJobCiqKRyerlZDv83EZw7dRzUxtRHOVFFdV7eOauecdJMzRj+aPom0iR/d\nAWhBnIFEH3NclHRYLof4an8RetPNvclaxyOkThdYR9OJpdDnqIWQmGCHNzIy\n2yoO\r\n=qtBE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCynPAjzN1gUh2R4agjVsFWh6EHutCET4al0XiQLqdZogIgBsPFXOi08HXGA+bgnHz9+/oId0tiQyJBXXGcWhf2s+o="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.18-beta_1622779879101_0.9346495901992307"},"_hasShrinkwrap":false},"8.1.9-beta":{"name":"meetup-web-components","version":"8.1.9-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2b34f09bb1d0dcfab115da781e5995359b8303cb","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.9-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-cYEWugxmpA6zKcwoD6V+Z8mQu6uQx3JyJxneaoxA5e6FFpF4C2FlOlhz7T+zZiPIvaJCNEIqpilEsiC/sVlViA==","shasum":"d8a9ea84a30c3ee8be5c580826cbe18ce3f324f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.9-beta.tgz","fileCount":612,"unpackedSize":3109039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaf+CRA9TVsSAnZWagAA8GQQAI/OsP9WbpoPOSewng2f\nvMUC9YOGyhjxrgx8si9A8ukNKX9dHXvJEWDawck85ns0Pvg5N+YOJ/hImtl2\nHsDEBOT492UzlSLfKvNyD6ouIy9KLmV+JyjEUNdCTgbQKE41p12uq5mKJsgt\neEx8LbbBQ5lmiHWKnrdLDxQZEPfAl9JmRzA0c3oOeJML5L58TmVPakexqAdq\nAxToiey296qgRdRpQUbRvhxJ88PTMqu5byh7DSQ3vC2s0GRikX2TM/UpSNwt\n96h+EMghot5GV57fb+tiwPGOQyGfQMApiWBU0+GPN+Qcd9g0GDdkVdLQYGCd\n0c0M/byeAoACehcNmJ0WagW5ucA25gmDloqgncHYxBpP/rfWtz+BbB3FYNRp\n4extdFQ/H2MYg6oUM9c3a9kqWXLjkkqw6rAQX1BE4JduCD39Fmk1D0GPsm9f\nCkYzEbFnxaCQ8WBfUl0MR1pwve6dO3lmM3dkmlv2dn0ACsz5ZCaO/B1xhj2S\n0lzPdYM/BXdpTTej2CHgCrJGYCHxerUkKYp84b7q9HT83peeHNYWF7450kHK\n5+WiAZaoq78A15yZB11xNtT5VbpmGeYHCQOdGjq9Q1/d45stHLOMfxloXXeZ\nBJy537Z2HWHKenTLcYYkbHcTGZrcIhSsZnVP3vyxtVUooOEm96b4pX4KoZKq\nm5bv\r\n=rvmY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzM+L681k8qAbxHzMT83pbQInqnLfXNRsRUEXBBA1GuwIhAMzC6ir8Yt+tR3HANsuyyKxgQN+Y/JwZoaPrTzKcb95f"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.9-beta_1622779902630_0.30392642303771167"},"_hasShrinkwrap":false},"8.1.11-beta":{"name":"meetup-web-components","version":"8.1.11-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0d563a0053782283432b5774fc7e877cfc0a7178","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.11-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-NDnL7zGHtHMbE6CDdRphqw4bcqHdiwv7I131P4T0fQBaBsLdUf9Q6wsUTkcdrZusOzIDopJ2Pt3xZsKYdNe9nQ==","shasum":"3a2c0f98b26367c8c7b1dc22b67db043596e7283","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.11-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguagcCRA9TVsSAnZWagAAYDYP/3o5LydIU15Zi/vUUCnB\nBtw2QbMFZ74K2pubd3M/3CTeSISJ6GdxPKEFlCzyfJWL1RYsudNmfY8RusNa\nXLqNE1cudwjGHikLeNUmKTokqCxPGi4IWNwBMjswc+E5b56rtBMnVpewotxS\n32MHSAiENQxqgVmufSgFdmOpFvmYPiStN4JBoNYMG2D2fMGYWy/n5/smcz4B\nJ36z4sYl62rJ255acbLnezdP6LzRIfYNSbq/1ZJ1gPmCJ5GWdzmdJlUR35Qp\nGavMFCLQNeMdRD7S8Yr1bNpcFhHKadD2n0V9mxfjGv8gC5ivuMbIusY8a0oh\n4R2rFWbqkNjGLUhoYFim1EFB89quzWogH52wcyJMtbqAn/UaI0zWmBcERzp+\nK2TFzd7li9r2M/UrooqFYGnfukR5I1g7Q3lI8480m0gWpvIy+NdDn/wxMgGS\nfwLuOExlpo7j3ZSBGentQH3ecsJ0hjqHGBcdg1+fw74XOADTG4K59UslB7gP\nBys6byQ/1C/30EyEwzwCsZ/cJIjoEZOEK1nECWY31rRklLZcB6oLd3OsFc7J\nWvGoQPVV0dByAsl7HA5EVPU/vOl0zR3xbtGwIsYyGm+IYyBNPy4Zx3jMPZX/\nEFkxvtNEW8KybRok/Qk49KJDljAcDW85GoemFQ69W1oz/R1TS/sHBhKBpSmg\nv6gc\r\n=WShg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPN6tZJ6NUYCb2R5sB2W3XdUmq5tnc97t2KkMpTs+LagIgMo0I6hp60A+Xw9pL6Cq6KWbWzExbh/s/NWGJawmBFAA="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.11-beta_1622779932613_0.4247135333100269"},"_hasShrinkwrap":false},"8.1.10-beta":{"name":"meetup-web-components","version":"8.1.10-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e3f9e2635c8f3e3fc58e38fbc50bf70e570a6a9a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.10-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-RM6ntkLor5I60EW5ZPXKOmsyiGAjqjIJwddENMsAJzADu30SN+a5uwDek6/bcvF8jb7iF6WZ8HrXwQE1yb18tA==","shasum":"7d2c8ec1d1829689a506e418d71e9c50b06d227b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.10-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguagyCRA9TVsSAnZWagAADS4QAIhHw3tsDL6iP0IlMSzC\nr5FgvqZBowyC7OB9oh39qGkxdBAgiRzNJNmuQiMEavNV3qTOZdhN+eNHqFif\ndwNk2/T66jiMzUDvIA66NhVVae//dReYZc4gJlYpBdsg/gAEvh6yoRCijvAE\nB1kmVUq0ceaxdhPFSo41/vOLA5lWLl2Z9p8SNk2OZDYnARmsqWzVKR7T6/dU\nZaDjdgSH0kCNR03y/S31lv1DUsntUzf5W4gwgjhtLDf3OGi1n+0MwGSZz6gj\n04vhqSbPUnoHhW3DCSqdopdyRzKgRKQWWKWAzWXOqWYcFy2dXr0NtZGVq6ak\nmo8urxr2YL7d0XIvN95IGxnUGnyhTFSqJzPl/XJmGacNKa1AmaFjWU40IJLy\n5ekQwdkvjrV1pcTfREuXxQGqEVZZBXz10ON47pnsEBafMgefFEOlM9JvB9LT\nfvLbN8wNvEW/jnjahA6VVaaW+yKSBNUwJSu7LKiDm/13eeKAyE0zAT3xLe7b\nlSQeaIvmc58265gULDIJJkhrNXcjL/djaD6XaPDPuHdDxQB2rUSVpoFqs1w9\nFWSNrr/bFHllPxwqMTqyva1nuk+5C6sotoszxZVi2KHsl/wNbI866dyQBERl\nEe+lrITq/Osjru9us+lUSIRxmNU/e4Q8Af0yJFFN10CuJf9BuHzR1ah1XC78\nidXu\r\n=2VpR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqiWTb8N+amYlWJg6Lp0Uhy19Lf43lETk4i0T3vISV2AiEA8YA8szgnFqIxcCdAoRTalszq45+oBa3bU/hGbfV7Ato="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.10-beta_1622779954109_0.740434299687887"},"_hasShrinkwrap":false},"8.1.12-beta":{"name":"meetup-web-components","version":"8.1.12-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3e06e37aa1bcacf443eb5e94ae6fc79f95f9df6d","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.12-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-TgMR/IOmOysPWr1XRkOqF1BStUTh874fQmxg4OpTKaYHCbXL56/MshtzNbB3l7nSAc4MFNRngIqN+WlS/I2Dlw==","shasum":"2d55eecbc3386ea709c9f4264e16883ac10333d5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.12-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguahKCRA9TVsSAnZWagAANpQP/3SLbjbIdKfLpt00z7Jo\nxbALa1xpsONReGhsJeKSZalI1rUFLbn2PfCXLCZ6nU0Mj8P6kvNZrTe1deiK\nuYdVl6QGrkQfjDsrkW6ncw/Yp+1Cv7TN7Q21eXySrlSJmikw/rFxtPi/y+L9\nF0lZuOM1GRKuinzbvOuQOATWLEkfmaANrK/rTJNHVNCcCG+xbEWzOqEUBIAd\nVk4lvtwcIfsPkwmbQ/redp4Z4lVeHFggw+9S1OH9Akka/XmfWPUlY1Q26RQ1\nRAZkzjSO0ozpWb3abAS8Hsx/xdt99YovH48TFKozsH0i0xfAEHh0lnIWnD9c\nWpQXSZYlj9YSLzSwMcSuspSt+D5UuG8lYoqbdp2C66IVHw9RhUzTuq8q/CmC\n1Yj64D01CxPL6w9q1o19Ri6LnKzxq/pkzLZGGszCPyR51REu38/cAu9qRbpH\nc3DTW2cnwFG1BNlNv3+OdkcRleZW+oxXE78fMhJoRV2XViIXepnSMLIRFGQj\nCMMo5R7UFRkEFmekxOoTdIDu8G1ykQpSA+98nOzu8ZcC1TmZZqnHjsvrdBBO\nl200eeKERSafddNnDr9y/vTXS6ZhEd3NC19DNBoCqp8ptDTFBziXce0aDP2h\nmzrMtHRP4cF9FtNRQpulxiR3zP6w7rc0EIKY4SArL7Zoeau153GqSJxQWZ5Z\nUfLV\r\n=8maq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCATwKvm/xVvoRg/+iLfmHd0POMdpCtX5a/KDPzwE7jAIgPNZIT8u1n3Uq322wsL9se6Q/a36QGZKRiqV8Q7rU7jg="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.12-beta_1622779978502_0.287197108249998"},"_hasShrinkwrap":false},"8.1.8-beta":{"name":"meetup-web-components","version":"8.1.8-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"18414010a5e7816ea8b4b4ebfade5529665ad4d3","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.8-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-IHypljLf+tk7/02DpgXBL9jZuNiMJdts4w0fVqGdr7Effb2hHtw4WdXbjLwBbZziPkNVEWv449vDnOJSBrGvUg==","shasum":"2798d62367e77560d096a1b065e1eedd26c1ac25","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.8-beta.tgz","fileCount":612,"unpackedSize":3109039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaheCRA9TVsSAnZWagAAw/AP/1CxPwWdkd7w5VQHd+mU\n6Dkvt/A0/+rOwVW/CcHHeWs2kgwzU4gxAML9CvYqXtoHqXjAUG10fsCljpld\n05azyYuMWgrl+J7xzNyGW11wzeYk1uG6Z/Ujzxdizh6dZq2FWREUiTAEFJyz\nCbmHNPt7CoZbUYkSViN6X6OfUkEr8AOTCeSiMZ5vEd6jSzshrW6L8TaJw7Iy\nGmQWovvSQbD9dK9PFH819DbIgDaYAFhucbrXrfvGcMc3CiZy2WMzdwdCreI/\nKOnn2WhmsCQ5XVbIuvkQr3TX7eYGENp86WzU164rnyBWkLCoOTVxD4QdhBFw\n87ffPUdUooGJ+xJisjtLTiklQEn5NcNJbvgZHTy2TxQXD7vl95CuqSiPxK5Z\nzhpbpyTS5152HdvCQhD8wykjD026lS7zc1GAhgclLNEgflQVjT0hnsmTzjUb\nXvypqw5lrtT7eQhtAs+gSUbMq+8Iqgg2DyW9ESTig9QbGWtU6iCX67MDQkdq\nGk2csg/nCq1c3X5AC8q/61s/OxZrE2bfnMnmUAEw3l6jJmwSMdNYUEIosbvi\n/yQGg4nm20Uhfl7bNCvMCNdzaTrfFk5AvdNmPZI5UiyFFguCgMlo3I7dV6a0\noZCjCOHBTCGoJwDJuOS+/PuaCX3oo49Mh/WXJwtEteSvAbZZdb+Km92iqBK6\nSZrS\r\n=nii9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHK6w0vcRHNihILb9BIvr6B3vGT08Baow4oZRJ8v3uJsAiEAz5BT2VU8nvVJ9LQ27ZqhgK9qhEvrrFOjoWLYExMDKmI="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.8-beta_1622779998496_0.4760696759626146"},"_hasShrinkwrap":false},"8.1.19":{"name":"meetup-web-components","version":"8.1.19","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ce2a031dcda2e34cc5f0848c9fe1a7bc990b84fe","_id":"meetup-web-components@8.1.19","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-rWFoFxuL6aFE7cAdNYiGTZcZnsYMZtZ9hcdXYhJkbBWOP7zGbEGyLwGz4mK9XZ1uLuSfx0lXYZIkhDJ211aoqw==","shasum":"ca08fe22a43d74b8ccaa57dbc249e37492ec28d7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.19.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaiACRA9TVsSAnZWagAAIVkP/0mEJAnoRp9OYDpaN6Uu\nHfTiLiulBlq59NTu7TwDYqRsI2gbaswjoDdskLDqU+FPOb+A+KGTF8IwUukA\nVM2VBQqFk61mrJntOyoXkhjN1HmLUDyJvk4ajYawVZzXMEB8IMPuBFdr300g\nVPEVuRvVLi00Io06+xyo0kAyxuyiVYwMzkEUtAchGfdNTjdXpDvqD0LIXXeB\nm88CoWDlJIJ8ibk7F1PAtOZLDYl0xCTLlMadGnzIKoyPLIF8WDktFhDsEr3S\nNpVFSbDkD6IOyd2eaIIUUySL4wk1DSC/Idg4SKevOI9xGX6ydr5BFHy9QIaI\n3M+waRucS8MAbObLYHBzU7dRUClYRwpHh/5O9RKoXkPk9hBKmvLJcN4uhgT+\nfA+DT9Yq21j0LDMcJN31/xlc82ESTyWQGt7KNi+haETCzjU5nt906KbKbP6c\nWRwH5PhaGQ7FHu4SAMznfPs10eNDtk8LdUaKx2zsnQI2k7RVZj+jrZxMBh31\n8bTU8UCis5NwYrN+dQ4iONWlkth+fvKvdksEm/6cdFXoWYiQXDDORWqC9Irz\nePjNAWeGWWUlc1HO1qfgCymz3dAp2vYaP/vwfRaIU1NzxmK/1NqFLdIGXohk\naMBOwOjUmY/V1ZCX/fzDkI5WMDOXmI8jCiv6Unpw0Hy6eZmOO3oTkhq5dYWI\nYjub\r\n=IgQC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB/W+rR2bFRYsbApFBnt3LUkTvjE2BwgTFhRlQb/sQi9AiA+8pIvxorJYoAErSiPopxeQdPEx4AIK/JcaUn1Y9L0fQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.19_1622780032570_0.6328259508506169"},"_hasShrinkwrap":false},"8.1.20":{"name":"meetup-web-components","version":"8.1.20","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"42556f570c1bc07e2fd0f16b7e99942f10f51796","_id":"meetup-web-components@8.1.20","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-5ilJlW/nGPO3OUwZCtTISP4gpfjB96+zvIuAr0c4NNZ70IcNJbETCCDXRbOGZbbMC1Q/Ui5BQ96unjSYHR+cRg==","shasum":"021cda55ae3a3e433cac78131db4bdf37a6fc638","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.20.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaklCRA9TVsSAnZWagAAldcP/0NVjOeOHMZXFEIUzZv/\nTyGthDM/EPFakSI4DnY0LKo7lnYlXE4BMUux6saJS5YkJBYwiDvdAqE/VntH\n7bvtQt4rlXmkNfieOZbUCMiihzcx/nyMIrssAMSW5SLdVZkuLaIBMAdDTexL\n/qtNj49kn56IwlbAe5b9sPnxbgcx9z3FMQCHEcRD+2dsxh/p0FIJsol1bobY\n1vw9sV7HAh6u+8EgASbPUSzTLV9a4m6QT/u79snyzJvrWsjyFB7xD5FwwTgM\nCywsBiH2ELCpZWOW3YWQKHmlnx9Hyj22zCMKy7CMM62brDksBRSrQ75ZPzzk\nDJHxkjbsPQW3D6ZRvdAZKmLhaBNDa8iDqq5JdwhPqXgAOOMCh6YX7JlIKE+p\nKNrKG38q8D9uPKIedDXJzlyYAVivO1CFCZly3hi5+nElgl1AazUYmV5cYEZw\nBMuYAnMOhJKHJ4ApNEuCLh2e/NVucHSc+EOLXTjnI1x1cIjJf1oI6QA6O/xs\n6A0KvFRhpd8awim+5knjEY7yHvg8O98TKEIJQnHOTY0sM8KsowecfyYfl/hf\nbxX4f4XG6QR5Sm4lA5zwwteCD1zPEuNfnTL/ykRn77A4jdk7UdrykCJ7UL4z\n1ClReEwzlJoGe9DK98GHNvAFvOO73ovz+9wtHDfohlpAZXmo5vj+OJp9OySy\nctek\r\n=e2Um\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDT9iWqXi2mInZDjDtmAN6bqCaAKPMZYo/0evvtb85JGAiEA3izoM44bIWzbKwFK4wGTtOjk4xbR+oP53gD5pL9J+Kw="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.20_1622780197188_0.5214020117101739"},"_hasShrinkwrap":false},"8.1.15-beta":{"name":"meetup-web-components","version":"8.1.15-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"48b60c59cc911797bd1ca325c44cfb8eacee3c5c","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.15-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/wgF57StXIDTAjB16zB0XbwO4CxT/HHCjg0Y8/jk3TXx5MeOGR7ChroC6O0wi33K4+jNdav0E2e2XLUvmlxoMA==","shasum":"5fcf8b6e535c70e7747c0e8a9b44f630c41967e1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.15-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguak+CRA9TVsSAnZWagAAhQsP/2PrcHgqbNFwGHWeVJFz\nf8ENS+4vgiF1QQ6Csw/MseIMk86Lff7bwYBSorcq1q/14tEsX4ihhchakSwc\n0bnqXXhFJn3iM50o6jjTt8llfeYIBMxI34xKZeJpPio6/GX8ypPOXU91fcHW\ngD95Zb/yVnii6MtwQZekxj8KyKkY94H2jUbdNW1kCD9D9/sNROQIC8yI7gZl\nrzXhyIIg1DrBmQTLrK/Uy6vNVQ5dzGoFasBn87EKIx9+kY3rjLOrQFb24VdT\nhGqUwDTv7iyxm6DdtBYtBiTW2xIS1c/ZKMbQEv9iZRDfkSv+aq1F9ouKwiNS\nWZ0BgncNp/L9imueRl9C6Y9ueUowwuWjaTEVt5/2pkLwgeobcPMTKcTIoK1E\nQ5ifbKZmdmp1sai6TIiXT8JxcYt7uTLvSAm2HELwZ00PvqOLuB0XMjm9QgbI\n4HjtynMX9inLIfDz0mOcgBGo9P2ZVw0E6kWwFRqjQwJT3IVOSj6hBWNK1ZqQ\nYoO3jSuwNaBrF7tuW7NYcjPkzJaPQ651Fa9uYlehBQLO+4UIRNAI/2eywz8d\ntlhzfeCS/PCD/nJWxXhe+spp8vPm3Z6aqEU7w7aVM1B8BmDQPxhLC/lovoK8\nRbrbXhTPv8AZiBHzT7Naw5OIYE/rnDjAE1uPrKDWbS3HPs2Mt60kOu8cp1vK\npJiZ\r\n=9aB0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxwaGfQkcFWyTPlMZztfi3DPwJIlBxQywY+XThGdvlUQIgLlR8/H1+dUPHZCWiY5yge6Ogpgx0kdM5NxC5Ax0Ogkk="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.15-beta_1622780222793_0.4896507248890003"},"_hasShrinkwrap":false},"8.1.17-beta":{"name":"meetup-web-components","version":"8.1.17-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"84779be4ffdb7b52d6e515f99d9f7c7339ad7358","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.17-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-oHdItwm8qdgqT88wWvY2hp18eYrwUFyY6mZQ+e3zRznJc1fyXBV8uqTXeEj78R2gRfxIZyWqJrqa2wNem/QYtw==","shasum":"d09b16f22826ca1e5a6058f17d1a6dd7ef26457d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.17-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgualNCRA9TVsSAnZWagAAjCkP/iwoupiqYpciLWHJqYch\nd8EFH/1QGqfTVtnndqwsATQvjMiN0Pu/jkpt9jlCoCaLfTeIylN1JYMXQrFg\ndCBLjv2xmxTqboyOUjm3OJnM6UiNusEFnceoMw9it/l0HBjRaikw2DXOZu2W\n59V6kLMlsn5JoVKqc1T+hMSq5ZeyoEfxUrXGn9TZKbA0RpSONEWB1QpPPe0P\nDEz8IO4qZ+KRvwUSLoZps/Ick3+eGhPtDw9b0w2LDd8eJTEyM7Aba9tBFroX\nQXFa9ATFG3N8bYR8c/Gzt0UeQphpyZZJQvMH0unJBAfZ71d1PwiH/PElZhru\n+m9gDo1YxMxDH5+Q7xRHoHSaQZwROb/ZYsR+zfZobWjkMBcUWL5ZwAG+tmNB\nysVRrt/aXnNCABvnwUH8Xselu1hAvQVCFon/VuA5yRBxujCgnlxn9bo6IFkJ\noEutiGqNqvrE5I+cRE3sx56DDqEXrMuQjSbhdokCRr2umtCaJi9+Np9CbQ3v\nGClbJlcO7r2xYTrL0b+m7rM0SqpnBLdxlvoaTt76LVIhV3ICoMUSV7XHnyJT\ntiUrSE8Lf4pAmay3tRtXwnel+xao1or1pB1EXGAN4yU+JZUprNOtUF0dmo2j\nBg8uv7Org8jJvkvzB8yNyM8rCm2sc8zpwfWdn+ghA2iSJdrOgYOB/mLe4E54\nkvUk\r\n=Dacz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHC9YTuJm4C1Rc2+zAQuRyhpo/cWXk8wv805LCFDFGloAiBx/x6zGd85KhW5jm4MYKZvlG/DJqrTNWqiNrxkt2Wsow=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.17-beta_1622780237345_0.23624187923562334"},"_hasShrinkwrap":false},"8.1.21":{"name":"meetup-web-components","version":"8.1.21","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c4edc5f7de06121d4047ed52148fde5ad2da84f5","_id":"meetup-web-components@8.1.21","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-CGQ2RpiI7FRmMYZu0szL+Qskyd3DJ6a0ES08dzjRUPgTp2UKCu5PEerBFQl+tv3pDboDps9otr8TCXN7CGN1bQ==","shasum":"5d2826cd0f5626da3912e0f4e9ec18933ca96fd7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.21.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguamOCRA9TVsSAnZWagAAXuAP/1RFG7C7+vYkWhGzprWq\nPYiVsIdWN/2KXXjZcXZEalGSKp8qjzrfHx4sZzh3CQvpQI8UtdMuJRbzAj8X\nTfCdQtrAjwFrSPvhoqRCKbe/XVc88M6gn9RjbpzS/V4Jh9GlhbBA78DnMI/e\nWqUpj+6IVEkImmMKwQPgacZXBRb32/P7Kd/Rj4L61wLZixSmd3ny76pHjqFJ\nPaC1BoaTwZnmAAiHPU6QSD8n0dvH03Y5FFfixRH1YZMCbH5OG9sU/9+RsQYU\n6aXdHTTElXvadk92A8LP/SUv1L3HJuR0vK2pDx9YCEj/yveMzqEye91RJVSQ\nVelZvUBxCBv4tVrb5wIQa/MJeNhA4NuxcFVW+Rosi1OTwsCrAsxBY/Bf7aoi\nEOL97lHoEioEOKRgRWKr2yt7My/m4+z4v3JlaVY8k6JQgDpNrAni04CtucpL\neeaN1efsUqbbydQKvi+aIuPTtjfGmOhL70NtJntFFGcknTj0/KePmULbb5E7\nIDIOHPjErCzIcEwcenbfKWkXKI0Z8UONz3TKfmnUSNOjG3AXlwZ1Ol54TDxk\nkp/GmNwTEwmIC9gKcaL6NHZe03MnCtPEx3WOsef6U1C+DMNJ/5qxJa+ujZ9B\nnegH28SftCMOK9b69Qd5UKxsjEXymwtO+t7ayDfWqLZsCjqtsgba5qjguHXD\nTKUV\r\n=Df31\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnNuu4O5SPljONOIS8HTi6rV9P4ph9jRSDhKaJVgxFGQIhAJ6sOsCgXJaE0+yEV/p/r9x3uDJWZklY9mH79lxZWKBn"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.21_1622780301811_0.7196368583183292"},"_hasShrinkwrap":false},"8.1.22":{"name":"meetup-web-components","version":"8.1.22","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"12f08f01331dec02b57b7c3692030dd19b7a0ad0","_id":"meetup-web-components@8.1.22","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-2XHVe17HLgRgDKfqxlvTxViGWiK2aVApK/92LVgr8Wpf58xPaJkUMgxdI5fwYRaeBn6xu/FUb9hBSO2PywattQ==","shasum":"9291c4c1be1ba5f40e196e870d75d91fdddc8340","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.22.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguanfCRA9TVsSAnZWagAARGMP/2yjVAk0f1XtAKj31ilH\ntjAgfC4XJ9L8PyTPMRDHFuk8GHA7+3mhmSN4kbwlvRetSe7OqQGCcGljyHN/\n8+2qMiiWPsmNgv28KAbLz0fH6KISe6Ysu1++71LnTKVahDBdIN+51KP1XNXW\nHyEso7xydzMgiYcN6kXJqUCKydKUc0k9bj7me2MERxAsigxps/mF8eF0Fkse\nqyxXji29iMI0fECqK+1geo68f2EjTEvh0c/VPk4ayzF9maeOewDDqTJaD9bo\nCbzR0mPDmX5MRldgwGY7nDp8GJBSKXzjs2Hd5FQRCsKol1qOK3Xk1NXObGyw\nWrnHg9bpLnOvu+cuw3z9DR9IlOTiEV6aFx8Y2nN7kAfCPXT29jVc8thLqerB\nFy+dMc6AU359caT/n9lPE7L0AzP7l93kkPjuZTMVr7wM4e+IDkey8Sa25dI/\nHANFFvACotegerXbZAmoWhg4u5PYjZiPQwgAHzCGK3BJFUF9UgQn39K30gga\nexzMP2G/5CPxqrwWFi0FMWKHGHnhCVl843g3Wr4fgFP7Q+1nLa/394iL59XB\nbtzdMZ68D5XiYNcZBN18rtrt50M9KNAT08IEMhwejqCweh8U/u+FnkMythlO\niCRchixCsIcBU314DS7O19EVKXHnBpThGrguqGzakb0P3IK5E9a+VSR490kL\nsKWj\r\n=srqr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzOqb+tUnavpfRzG19uIiy02fyF0En/aBdsfMSCDcSAAiBfwU1k/oEnVjVhagZg7+vVArCTK4uxeGCd60DF7/HF7A=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.22_1622780383821_0.33898175971052513"},"_hasShrinkwrap":false},"8.1.14-beta":{"name":"meetup-web-components","version":"8.1.14-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2213f751ce25733f0164b33bcb2fd0e781211254","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.14-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Jd4gIUY2ZDfdoezK64n1FcJGx210/qJHY9aIU5EZemK9kwCnj6rcTo6xSl/0yDkyUg4T6QJC7T3zrDJbHgb0ig==","shasum":"2e65e5aa40e734db978642f2faa8baf52f9e49f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.14-beta.tgz","fileCount":612,"unpackedSize":3109040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguaoICRA9TVsSAnZWagAAlHQP/3yalODLVbLmGGEuGEyR\n9DYAfMlj3A0x2odLwbvTykmNq8axp5gbe8GYlceGUI3AVBEwwRSOCGSZxF42\n/Qa/30LYp7HXquAoDh687fSA+lbLzcIODSYgoNjgC6mqST14Oih1bhL4mqP7\nv/AuqxjyM1QTpoWugSglBybPVQVl7o+JhptNlNuQxMScyDcmgF2f0kRZbIDF\nWpU8QxhZgA7ItPcbBgGtdDHHKZIJkVe0+DLsbuHPh0Et158MI2AwZgosgrlt\n2eF/o8G9ghEej/EM3Ohei+b7d3A2Oo8iRmMCFcCCjUbdB+HXwuSmTv9dDvfs\nvWl8GvX6bW4/UYJcznE6vC5wx9XlswPCSMkyGL0q0y12UqKY1kxMb7L7EAFg\nrx1iuJEd9zLUaURaxoa4kudNKK/B9je9O7hLsp+EcAdf6A2WguzvAc6omdRZ\nxTHyBFqkfu/oqSOXfeCHMTohAIiWCRJE+izYvizqQAdwrdowjTnsRxp3bH3k\nZ0Vqi0DVM8Y5s/NTmSAWmjB/X3V5srdpJ+J04N6JOPIx3lzcnoreN2QgC7d5\naBM5wIb/I5rg3EqwEfp6l8wQ2whPPBI16DFjtG1vEIPnI7K+NZEHrNBJd7Kg\n9GEa4Fgy4ygR4uM2+PfU+4xMh8DXGlke5waXS78N1s4e+go6LKEXYG+8Zhe2\n4iI1\r\n=LVox\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbp4ZMI0Tc+SdxXUkFVOIJ1TK7ZVrIkwrUPSoUHX7TxwIgNJN0nSPFDPvwTNn3346z8/thGOilKbHE5PZ/dyy2q8o="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.14-beta_1622780424075_0.5869773832881338"},"_hasShrinkwrap":false},"8.1.24":{"name":"meetup-web-components","version":"8.1.24","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"19a5939e9bd1ea05bdc493a8930a6ba5ca2ff261","_id":"meetup-web-components@8.1.24","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-3YXXNATYM7LaE+f/TAL80Suum1ZnU5De9UVRai5YKNScPpn85CuEgOXQQe387PL42hsIoGnMPp6w/WFKm4zVBw==","shasum":"41f04d3505dccaf447dc559b148ce94741b638fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.24.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguarHCRA9TVsSAnZWagAAwWUP/iZbKZyUt9mWrkJEJmD/\nLk1Qi+QAGyCBj4ZYlvh3Cf8E3W4WRro30WNmol+11uSmI10SRW7MPOxOZzzg\nxJLEJp2RIPMAwUwzxXueJQesjpfXXHXQCOjW8tIqsoeqWR0XTPyG0XOCUO8F\n0HcEFoY2qaT25RP4u/kf9fpKowH1KB3ckVt1XBTRYYjMLFbpv7M+7X6NVkHt\nNp6ulgJo4r8dke2qqj/R8Hb/CfVhkzjtvsbMEHk5q+D+3m4jtE0sDGKWEtuU\nFpgEM6tO7MqdRWLH3WQqVKIvcRSei/ecPfed3nIgHdeKYbDTsYz87+9YxviK\nOx6zjSUDeonD5rvDhf4AY4AolpZfDtA4nu/IQVI+hprB6OgsRofCeMAQXp7C\niXHEAyMXI9FQ0ywcIOQ5sULJyXBTj1V06QrYWZZZVs38uSHMqeb2n0NZFEfQ\nmqvv0rd5BWXMqph9k+fs9rgmp/+BuER1RW0Yc4c6G3ByaceV8Ehz8diN1Kex\nWlxgVv0RJu/T2G6dD07IahH5JAJ7ZUBYKDw/B5aPiS5MexoKy4xnI77KAKdV\nJfO9jFlS+LgxUweQG7ARgtsx7TAM5It4dANLQ+nnowhhCHlLj1LIddVUfQqA\np4msRMhzwBbzDLe0ocqfUWk1SrDZMfjeIN7E0fKng5BN6P2qOeC5Rk1/2dg1\nxSRf\r\n=rWzO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzqyU+AzatJekJIdIn8FuC+q9UvarJRSk0Vv7bQk+xHAiEAutMq/FZwnjv2vnLIKd5uSJyCM0K1bEJEpCQdeBZKMuk="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.24_1622780615252_0.3352444419294025"},"_hasShrinkwrap":false},"8.1.25":{"name":"meetup-web-components","version":"8.1.25","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"659394e13c93e680b3baf76717fe6624cfa6485a","_id":"meetup-web-components@8.1.25","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-XIm621+buK4FV59AQBEhZ7iIOCx389xNR9QamglbEhCFkP+HlMZExIjwSUF3VTZOkv0YEwmkwIjisJdSHJqCcQ==","shasum":"553ec603a6846c7df8d6321d2cc37d090896b582","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.25.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguatmCRA9TVsSAnZWagAALc4QAJW4b6dn9dlz9muYwNIc\nGcehDxCJAQp9kmUx2+CLztfCbAXXqvYLRlJrCJAZWR3HkmFTd7JeBC/hCT/E\nkaMP5vog4LL2MKV2suc25uObE8J3+cstjtJ3qbDWu64463PypNCDhAqUmQ58\n4cHNPDpYgnQiVpKvTds/yvKxgwdodTKnADwBiT8SQJhSw1WYsHy9rbX72DrV\nmMeRRoXwicXugAn1lZNMimiVM8V8eS17sNdwc8SqAM8B4QoYelejxzHq6Oox\nSSwCUg3Cl/RxPlNOKSjkQ3lGuEw6/rsIwVYh3b38e64PSvCovgbJITK+dKL9\nQu25xVji7bN+7L6eAVdXcpRZASIB5LWTKWdwqLNwTWNBtBzH+rGFNs10uHJX\nfy8U5yDWWZ+nsRziHvcSKYH4igFY/qt/6kkWVwEo7LfRD6YHRqslZBDCMnE3\ngyFqI6rmm105lTwDNkFuDyW2y87HCM6hoUHCbj72gG3bVPDIvOnOytWKSWhT\nFvpBhbRMqRO1Q7DN4kfNDHFM7tiZsAiZfUXCq6ns+LXMedUduGzIx+lqNGW1\nc13hglF53VtQkqIE+NpVhVJlBzan7aQcssnm+IRYD9QnDPtB58uc0wHmKQwx\nLSiihDIipFZVCuQD26MwyXkf8eepmNcqkIpvrHVvDzD+Fmi7A/wgrmYyJ5uc\n/FxU\r\n=JTv8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBeBk23jAwP8xo9aIw1JOCarS+ZEHJNYIhRPlorqXCz4AiAK7UnBjw0VP3Bf1UI4aAcXKKR8Md5K3124p4zYv2knvQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.25_1622780774128_0.9980772001499403"},"_hasShrinkwrap":false},"8.1.23":{"name":"meetup-web-components","version":"8.1.23","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4d131d828991386ce616260a765e6e966bfda57d","_id":"meetup-web-components@8.1.23","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-VjqYdVYZKqNiaYXCdpaJGXMXxoERHtoKuxIXevMYG0DqVJtQdIOQRKpsyF0OigCZUfmUMk9g2+qokilj0EMq8A==","shasum":"a0dc8a50e56615cbef45450d63148e8a4e0f6005","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.23.tgz","fileCount":612,"unpackedSize":3109035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguauACRA9TVsSAnZWagAAB/oP+wbwv940cjph9T/rMggk\n7O7BlDcUh2ubwYns5yuCo+Sf/2av6OEC65R3g8lWkvV4a8HAPWHggYjHR38U\nWEA7XV5c/llaxMBQdn97RGswkw9hMLbQyObuqEKvwA98TzyzDT0QDJ2R3PHY\nPNpQQ8i7wWALTun4woJq/0eItfV6gwTqwnXMGU5vrdB63qgD+Jwu6PYW/rCk\nAiUSitbqSEz+lyjGM/ibAnY+eMHw5d3PHnx3c0K9VIOqq8Hgu1oQntartefL\n3gQlNEMfJsrToHYlT/p+uiz2H2LuZD9D06WIbL1/nt9MaGKZ6kvYqtqZssaA\nU6jjvO9CDkNc2qSY2p22a3EirX4c1XfX7jK/y3oqFily9NoxOUOHfkq17UKu\n+5/q+NsNn27+3H3NWI9VEni45UpDJwavtC8IXGDpHEiyzNoZaqrzhx6y+mmU\n/qglrExscXhiojgHfPgCmgXgjDlhqpKs5uiRvD5Yls7FXLoT/YPvRSDFHfHq\newR0Q+5xW1ihS3hzZC3WLfp47SXWY/Edet2YNSRKvtjo7uN3lnpth0y1e4lv\nPTC3o/66pRe7Lsh2WnZuIjDhlL/4njYEwJ78WJwMbiDfR61T0OBEjIxzCk9r\nWxGA4MC+Nu9oWOw7skfykL4lS/5m/vxWjON9fj547ek4tpULNyZXIGLxAWVx\n2vRe\r\n=qtO2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDc0+PQFOCDdFbqZnvAeU1upJov8WmBexOfgC7PtyI8XAiEAtM9SPYb6G576IvX5o1QkdnN6rcfu5WdwOEP7JXPn3nU="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.23_1622780800756_0.13791781716090878"},"_hasShrinkwrap":false},"8.1.31-beta":{"name":"meetup-web-components","version":"8.1.31-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a63e925daf5bed38bb5521bea4fe5bc9effdc4b5","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.31-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mTdU+n6aR+UtqcvZJc4F6BISeFYqzZshnY2KTV/d/FG8FaQabp0p8MolZir4lrA+XnQs5mO882Qa1aqfj0GN0w==","shasum":"2445c81c3dbcf88e5453141c13b81738f79e0a08","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.31-beta.tgz","fileCount":612,"unpackedSize":3129027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLM6ICRA9TVsSAnZWagAAcj8P/00MZsXELX3G+jGUxRTf\nn/x2dok+PFlfghrXyQmHz/Z1pQc3rq9UXsqEJeEtwhfNgsxDXQ/QUvNS+3jn\nOXdmoGNg9Y3NZqvbWHBdXjmrDMMeArqr9ITkaPzhdYKSQG2zBEFcWUgYnJyi\n+SEpQ+5ITRLAvvCEsDlVZfDWhLZwpuJBthiKMOi/F/k1VLM39LMwkuWPpI9m\nsVXryrXLmc0qZSUQCeZ/tCwitOn7Pea8bPJVK6focpakZdhhWI8mwGo6OLYX\ntrASQNJDcSxOuxY9QZGdLiFB6cOZG9vkPgG3/6+SCCm51WJmi3zhlCm1R1j/\nzE7nwTRuEy9DUmRGcp8NvTb7bOHLz0C/zgDXGD1sF0jyqbiKVyDbS+IDLKas\nKCi4O3kSsjm0LkffjGNJowo9adPT5egXgr9E9rG0A+6A8x1wB3Vjc3YLhFN4\nZf5uItD9dcNdgs7E0KKd+dlJD07Be7a4ieWr6CoTuWPVwHPFH/drB7AXosLD\nnx/QRuqEvI6eM7BrLchR21/9XKI4O6PC8Qx+iYe4tTap/GYUNnMM9/UDoj9H\nC65PMPvVxajrvnXARMwwRIZZXWnkVCVhcrBUaOXAXlvVWb9P2YfdVsRB2rqn\n0aY7aKEIzNpgun77pWfIe5lM0TuJSc5a0VDKfg8fwsL/oPJzpiEkCu2qTgdN\nlL5s\r\n=Axju\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYnwdeev+6NQBe0HJmTZt8thngifueVLSp0/41BxaeEAiAliuOfp7nugfHd//aDKiBJ849UPGh8AeioXa21BaNfwg=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.31-beta_1630326408431_0.7351006723771403"},"_hasShrinkwrap":false},"8.1.32":{"name":"meetup-web-components","version":"8.1.32","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fa5bdede00969270ba43d96b4cf3e1213a89ae67","_id":"meetup-web-components@8.1.32","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dn2QdP4NRsJoLxjmrFu/U07UK9Lileml+YUyMFezZI9+Q1imQWN704GDJYyhNml9nO5J9W5TrDB0Tfeswd9TIw==","shasum":"e14c5ed1f0cff7d06fea0af3ccb3244254ea9278","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.32.tgz","fileCount":612,"unpackedSize":3129022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLNQ5CRA9TVsSAnZWagAAYCkQAI5/nx2rssIMUnhrCjKC\n+D0VgtHTjNiYE4Fl4znGoGGfDKuH1+JUgkQ+lxIwuMIc3lTIYMDH0WpUk95h\nBexvd9ckrZznxN/RDl2yAZI2d84xf8WywnmH1tfUXvctC/iE0e6PYeJz4E+I\nlDGhdlo0MdHunfbRGP0H+n/iZp9scDTy8JLaO97r6fcWcKYwnMwL0JDUSFJY\n4aSwWVCkpxRAlA/YwS7W4hSGHCCMCEc2nzUs+uPsnzEVCMrSoI7jqloya3VJ\nz2HtAR8GjRAT13xt7miXX72z8/EgoinL/OnH+Y3JOhb9gEGPZ06wt3vRhbJu\newZC5pm6qGsZTABhdfFK9iO+NdjqDI6I+VfmoxTLDj+1rI9Xh9gCQLoyaEed\nhEuqUrmK6HHa5OG5jfZlsrg3o8PKj2V+BCquiMtcky6rWOs+Ue1CVKww0O5E\nBKLjO2pZw4NkoX4pyd87NTVDCi18xdrKhDusWqKwBaIwoAfU7C6JSbj23gw3\nwy/ZKVHxiIg3v5aH3Ds0fGoMUyRtPFlrXYDqvxLJNPyz9ymjjxRlQuGsw0gb\nSknKsUfcd1hoZjynq3xAnnTIlEeoVoax6VPKaNOPpPEs4y551Gvfhl4YxjvK\nmkNOIlujxhA3Fkbf/RlN//YnB9lccFOXkTfCNug+gAh1llY+dNT28ZUhRU8J\n68mH\r\n=4yr9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHS5/Wi3j5ZpnHeW90lNNHCf6+uEA3ReliV82Xl5f28hAiAHWJxzdfLvUs0b0/ufXdqD9s0FaZFBkxf9K/YdLKUZbw=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.32_1630327865089_0.4872496978137373"},"_hasShrinkwrap":false},"8.1.34-beta":{"name":"meetup-web-components","version":"8.1.34-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6bc544c65bba0e3edf085c1a2963c16d5c71e2a9","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.34-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-znrEuGVV0c+vrQECrLM6MBOZRhsvHI06XUzFZbKp3Mg4L5tIv8mFhHEGq1zk3IxdZwDsnTxIDJNA5Vh06fI9fw==","shasum":"54cc91e2d54acefb2f11d78c28db419fcd6a6c30","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.34-beta.tgz","fileCount":619,"unpackedSize":3143739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL5CICRA9TVsSAnZWagAA2sAP/j2FS01p2h40CNzsbEbc\n+u9dX5s793COjRdQlGW0IFf6pzX81PLCiq7OQ+6CgcNZ9EBe9W0U2Vshy7U2\n/Dv2h2MgNvGYMnzLfxoy2G9szvAgoz4/Sto1V4alKn0r523lfOJ2TC01Vsc1\n8Z/0x98fro98lDgcifJQ7ojbcywNTozWaVX5t3ydXImmzeGKfXJmwR2Kfytt\nSHkj6CBG7xagjGx8oLe+GZoYeSnvYAshCBU95A38LKF0tR1SkCnR8aX4FAIF\nE/Glhpbw22F98BQCR1rzjOTQjXll0MaV/gZfJE1ln0wJjEmfW6XQ5Qhy87hX\nH30xmd9dVv5BNSb5c/MFfX5ihSftEdtCi6c+J31Zb8KhruOaz8icRjvIvNaQ\nh8Fp/CeR6S40BuhK7Iu9UEUjhCeQivqk2KpIx2nMuw1vDhsQaWQcWkS4mLHy\n14G5uGSnlV6FP7tRPaW4rVMAXUwpe3duBqfKQJf8HZvZLb0rAYIj1rbObiu/\nq1WZo5ZzwsWFLufImbWpEcd0X/fMbyZNiI6twRwLAGiD0+ntwWErU/bpkY/V\nnUegZp6zQN93H2N2mSLMMuFU4gfZ9AFQCZ6VTGLVSEg1fKCSqnCo876ZzDc9\nvbWwTAy2WMCn1gFgP50lFh9llZqeQFjr32dDIdG3W1mcrCg2J0esDECpZAaY\nPIeS\r\n=vG7Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYem1EruODSNjjQfqQez5TMtTEKXZZkGfxRS3WiMwxbAiBFXoILpW9I03sECNejDNW2oh33fL6gKcxvgdY+Dv0fnw=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.34-beta_1630507143842_0.9432718813410506"},"_hasShrinkwrap":false},"8.1.35":{"name":"meetup-web-components","version":"8.1.35","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0e9baa34b308964a75aabc0707ed5534d2e5cc7b","_id":"meetup-web-components@8.1.35","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-URw6cjWlBOezoPcDxSy4ofgCgioMq7ZD49Pn4cXkp5/0XR0zY+DkDkRYxeM7oAd85Drx9qm36Vqiv82iSqFKMA==","shasum":"edd08c104cb20394a3efc71a62ffbd329ee83424","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.35.tgz","fileCount":619,"unpackedSize":3143734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMJ9+CRA9TVsSAnZWagAAshkP/A7Ca6eyMiWGLyNkU6r8\n0lgTan9uBvixJJlrCrd9AoaRQ2iKcHdQFbWNLmCHlZznd2PmEyQqQYh3qfO3\nNDNZkOOyVNOsYGhtPEhOgxHqtIAi+oUksFCry4qwy/rv5AhGo5YrSBGJmaHt\nyDgJL950yCz7iFTd2vPCAEioAq6y5cvN0NkUdMmoPtBdBq3jvv1HLosqyKo0\n8BDRWn65Dq2k5jlwWYjFI7FnQ9rqP1z2WupH6nCvpiCtY2IO+33WY9ZMpmXl\n0lqdTPiV30wVpEJ0/26PdhWg5MDuquQApBIeQjDnv5rUNKHWA86lXTBs7+1a\n5o8U2C6do2AbS9ohL+WBzODIxs4jj5Z56t0igO/I+9MCaekKt8MEwl4iqGD8\nr/nQR0hjkse3zVlacwCJ/v5y90u04JdSyZcWkiA4l0aAChk2VDuXRZ91w2wo\nyTmVWVkFVYwi9zTyHgcInvEQq3Rw+NO86FXU8akCoT5QYMLWu3SXldLudf+I\nZyLlAwOTdVdNnJlquZ2QDOpIMWcx8XJGmtiSISYrlSYujy/4sj1BLA9j1oBW\nVbQ+9EMzE58CZxXWIT/96mtT2h27XUkS9CTY7KEN8rdQor0B/rHMB4IRxHmv\nnvY/9Hw2D99+52vhOFb4niDs904010VofWZ/wyZ4tUazFRqH/ZNSFTPfwwCD\n9t5W\r\n=LdTT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXxgK8qAXN7cDD+6qgbS8TIXJdHr9F0uA6JpcV0B/IdAIgGgbgLXt8d/XM2L34tgkxOaXvFEYnxBdiyf2RY21IHvI="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.35_1630576510490_0.6062857541271274"},"_hasShrinkwrap":false},"8.1.40-beta":{"name":"meetup-web-components","version":"8.1.40-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8836608d983b59218417eb8d5b45d897cf668927","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.40-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mdn9AvcsIDYTPbEdQYuTmoBDcsv9C9pmkS71IHcFbr6aLq1cJjyTnCqtPM7NY+JVwuj00HN2sETVadbZWmyBrQ==","shasum":"7be03e40abd58832d5e37e579aaa44158a90789f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.40-beta.tgz","fileCount":619,"unpackedSize":3144475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMMS/CRA9TVsSAnZWagAA46AP/iff+We/FcYS4u5/WtLQ\nkjXTOnqziCdNTB5JyTBakHt3ZVpfF9N/ydfgZlJfdLbAMC7nYXkOUlsBvyTS\nMt00GFTN3ZeKyKjQ6ybuQrlTPSLK2pwaMYcXG7ym6ts4JIZhRhihlgn06BNR\nZUfjCAz4/4yk1+A4RNLDrjXRNMKQIXRxJSTU/uJaD7ASvInTJ82+rLcgHB2Z\nYIcWMcQ4DGLzIv+nTnXTyZcCbNQh2fn/YyzxnpzA98rKiwt+Mo9vFvgpYICd\nA16ewibPmx4h5BRGLMyWX3RqRsw+lmiVBvytZYzoYVOPcBiU8rOxbw71jOsJ\nG9MNwajhfydX+Ye9WkC04qnQubMxtZFnzovQ3P0pjNmnHOVQDdGiBm9JHU5L\nqToQNuzb4zvAeB8t+9qRCxWfOC12JzugRYLtTWIq6XG4gTRaHezoK6UeOkYl\nyfIg7g4L1lhNVoSD9VxOX9CMuufGoEHms3NTssLKSZm0AYMFTxqTof5bNEcN\nthDCYsf23NveCEfHiGIwKZLm23sRVlcSgRuWox28mjp0ayNNt3MOgWphdEnP\n/DjhpYaRi17elNNhbY1yG+kl5rMMrhmAxfImNWAu1aMw/VyPsMJlEVo53OEx\nf4eudAo/RSE161j8hWd5VFuJM4CaTSq20Z2z3PrmaexjewtKNQF+alKkLFvt\n26Cr\r\n=1LCE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgH3e7gp3YTz3RVO3z6tatEkAju9hRsg0Peha55hMEQAiEAzuQUGUyrhpNRp7mABbofcioT1/c4dY9aMF9O/Yqrh4g="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.40-beta_1630586047472_0.9758136763746341"},"_hasShrinkwrap":false},"8.1.41":{"name":"meetup-web-components","version":"8.1.41","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0f0fe5cf06ae8bda844fb35d6da6cd9118507e83","_id":"meetup-web-components@8.1.41","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sIDF3E9Jc8PR3Pf7KcHyaPLGUZQEShp9HM1X2PwQn/fm+cJ9ajvcQO43jX6UcCF06RVtZTasUDpDG4P6RGYdbQ==","shasum":"f0ebb650fada2fa003859c4f0d5d68555732ea14","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.41.tgz","fileCount":619,"unpackedSize":3144470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMMWvCRA9TVsSAnZWagAAhKQP/iq73SvZt9VJxUsJ1qy6\nldnNKVm+CF1z8pjGwNsR7vznPTji4pHbt/kgEic3vXVuv7V8a12HPYn8N067\nBInCL8GAM7vdVFHcVDe+2W001oQMwIFJ84rV7blkkib8RPNWoT7u1zENQoGr\nLDuam0mlDU8jSRLBaa12wtsVJF+Qw2zjT3fuRiZH5yc0hTRRM++Rz2bxzuXh\ng258+1vxjcG0syv8L/ks6ZOA5fnzA7WHDlyulNndc0bBuW+3Hnjqqrhwo+pB\nfEtXMm6cKak4G7q4qXrL3f2dll2/U1iCrWSXsPIpRTHKnbsGjMdSpIAUb6rv\n+k9FOS7EgHttG2NvdbxrqRnYzE9tJwy7elYt3+1oa7bqLGkOder43+HjgFkC\n763ICRftXT1poJUacvpxqoWI3vdbhg45d/c9D7vF07YKZ9sT/BeVnfnL5m3I\nX2WyFtxpwJRyNNTeRF6L/B9upCCDihQOY+/P7ZNUz0lMZSdLhKEg/oXNO9Ur\nO4yy7nOZ/b+RzSge6ve6rrlaaMdJoYyqLOgCWp/wbmaXN0eTk7YtIruKtF81\nxcn9+2f/GfKgnrWycH/RPlvd8hnJB3dX2spyizh8kfVLQKxM0CvdCDSE4WrB\ngoetJSl5Ya26PXtoVPjwzWiyr2Xo0cXRVSfvSslHQRrfJ0WicnCK/U94nt0B\n+h/t\r\n=93y4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCskYVt3PBYGv0JGkVADrqnSbjXQ/tccNyXn1AJ+AmaLwIhAOPvuOd+DJ+puxYC0PDhXPLK0ZCoeN5nTbIK0tLdjIcA"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.41_1630586287657_0.75143665836987"},"_hasShrinkwrap":false},"8.1.42-beta":{"name":"meetup-web-components","version":"8.1.42-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6fb7c5c3de6d4c4b2a5760745c9afad5a8b877b6","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.42-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JzjORCvVo8mp+jAEHqYQzsH1efmLrC2LdMgJgZjsj8jSvAoJR4UyI7/9BTqOQPwKC6o7u3+HLf4XtiLx3tN9UA==","shasum":"674d43b015b80b43ddcaee2deac5717707f2dd6b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.42-beta.tgz","fileCount":619,"unpackedSize":3144599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMNPiCRA9TVsSAnZWagAAOYEP/1poxgxe5xRP3ROLnot6\nNI6hIRETuuEPigQ517N0bhzNEG+erA/hHezbHgXq7nNQYF/yx5iQ9XI90uyc\nRX4dOubpFphvPpLgFdR/4+nhnItYhzGWr017TzRKRbrKkZ2j7vIF+pssdOdd\nUw+XQIZm3tF1tSSQC+LsUdFZxFraBY7KInN1HwkbudTWD1UbFy5rePSr76tF\nGbzoVzjKJeS5LkCTn/Xpj7wkKtGd+k5IbRV9VzPRFQZO9f4Rtukj819gDS4Q\nCAfI4Sa4tU/XMNzM7EbM+Thyk5hZZchRytPvo1oVyElkV9YoTi1CTYjlkz63\nR8clai5JNobcHdTEbryi/xIIdqcaaGURNVHJ5SyAyBV/FZ8gISKggWjCKdE5\n2gvXWLOgc3AE8Zy2Ho9Nfgga7COoH9g7fOaO6+ua5Y2K+1rjyWYOHv49rlyg\nO4eVjtAx96me8qXrtVtKLAyitFouK1SLwPT8WzCTIH7PNEUtl8EmB6cSUxtw\nH9H+VP1SC6/krXFITJ/T1xNzHQ5cWDLLxk2aTWDkY6mLC6AxR/atf0uGlKww\nxNHNraBqTtRgoQ1Ft0aR1GuZmIZWf43nox1x3O9Wtw4REVAe6jjoaLeqlyf+\nopLVYJQfmRJoeRZNesta2jdbMJZ2O2fAFc+LeRn/Vftu6P/5yBZWpr+T5no1\nC6yE\r\n=FuZQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHtYnXunUX7TxUhai6vgUWPMgeP5TKUq4BPDTHPIMMWKAiEAm5cq4FCAXWK0uPaa+20BNGDScA+nHozNOjTbngRBpjM="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.42-beta_1630589921813_0.08224177233342211"},"_hasShrinkwrap":false},"8.1.44-beta":{"name":"meetup-web-components","version":"8.1.44-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"15f337a21ef999383cfbea035bd0696ef7bb5c23","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.44-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9JNO43jrrV9r8TuYeEr6DrueiVCbCebM6khlKOaRnYMZ4MOkgudlvBJPdKDXYoSRzB/sDgrSJ4lZqX+z0e+K3A==","shasum":"02a19e8d70963bc525b5e5eecd210f44d7d1c72f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.44-beta.tgz","fileCount":619,"unpackedSize":3144601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMQd8CRA9TVsSAnZWagAAt08P/18J2znrmKlIo+7UtwDl\nWEBpFDCakny9luyC0F/ofOZQnpeo95hIpt5AvTcW4RbzFhH+W/wzu8/Xg4Oe\nKB4H+PuEPYaIssixX6m5TCUZ3DdidOvZuu5pB7PjxrSrNSPxJCQ/eRNPCkHN\na2HJiGWLgaAnoAI1ENqk65m/4le1asW9PlTd6KoXkrbck2wI6QHfBdh2WBdt\nvSQzVQQS51r6yP6kcaXXrIOFxU65YaJXs17XDS7L5GlbbYi0W/9NpUYUFUdd\nTQPwOKY1yJhe1eEfzY6vhL6FSWTuUjCZGy3h0nuhehH8djd3je5BwPKimpqg\nupMeI7tjLS4ksXmjpiIdw+r/Cpe5waSw7kB4IjLxxy0iQg4pk2l8HyrsbNq8\nt4wKyU+dr+z+dyK+YJsFZp7dmePyJ3vUa5VD9PWZ4nPRYLS2ZJ/1KeuRsbFJ\nAv0ymlxUqQITIErAY8sW/YtQLyObp2+ZEpO5rXgj3A5ZkmjSytU1p+zs1irY\n3B2pZwzyL8ZKnxROdSXQ+vXKuGFpuB5UeetN54aURH/lDEk3Pid3ApwhOC3b\nAbpCQqcDr3OGYtzTsUnSO3bxGCoLUgkEnBpT4LrLgGINejr2WQ6CRJ6CBkBF\nJDOq4ijD7hAjWqbdinsT4x2Qtlfr3trCl9J45fVmEH+k6Rofhdv5Oj2gYG49\nUATv\r\n=sYrC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAr7mZ7NXhDQzoiofN+UtNAgwTmGk2rzE1zQzM012JK1AiEAivuhjYHPINSgKa6sNkb1lMzrFbcE02Ir1xUlX1mAw4g="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.44-beta_1630603132345_0.17938870026353548"},"_hasShrinkwrap":false},"8.1.45-beta":{"name":"meetup-web-components","version":"8.1.45-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8e88b8f729f18b246ead966acc574c1437e2c5f9","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.45-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-8aV2oj9tz72iP9EOvKPNXlY8lsA8ewFMV4Ev06utD+Flk3ZNGJkBAeF4uuc2EV9oIiIGccx6VNsUgFmqWnoi7Q==","shasum":"f1de084c09e993e3481796d8029f479572415e69","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.45-beta.tgz","fileCount":619,"unpackedSize":3144340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMeoICRA9TVsSAnZWagAAlSsP/1HGt2Guy23AZCKtRgeq\nOoamLCnAcHyPHPUIfRkTPib3YAcbazX9FYiNXcbdVl5WHqjD0p8m8ecq0jf0\nzDHFNRtyFPwKjmNrJ1kVMIDKyWI/QM6MJ0RFmM6AC4KZyIBmxw4HVdkJwDH0\n5DWLc+A7Qk90vw6wThhWSNC+uaTWTiwigPejn6uyPwZKAa0NAiYanOBA351E\nAk6muz/hEHPU1d+sUmlwN4cCXnAp+ecMY2+OCNXPrEpXWQQQXt7YIrrqef3L\nkFO+F7dSbql3mJj0dLXMfgM35VO281c7dJ9orucMbSSkVWKJEAE4Drntma/x\ncS+vCLVkqHfEOt186dx10u2xpe0w9dxRBbJ33rVYJXsvF8tA0fnBwidMl87O\nTIMOkqM6p+HxYvuCV99BQZ9vLOBLkC5kUQzLk/cG13Z5mAERTnQ4ZbzaW3Sy\nU5IS4B5DnKshBmeluvuBPdCilLi9q8mLjukU7b9gTLBf/6uAHXX+M4d0Um1R\nLAKlOjBc3G033lb6UfITuFWy/sxsGtxEiiXFbellnuWGoggLynhBpV5ydp46\nmuq5GpaH06GUypRMenj3zpYhwHIFAr6jUVQFexkbh9YP1bMtRUsW3vY7zcn8\ne/hdI4SpCB6kPAI7pQTfDfqTwnta5Aj727KBNqA7QXGKf4Q5WdIShllGOZRL\nZvmi\r\n=Furu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC5JOOsbUoBjYYZ6jVMaSFTV0dWh3z3TUOPsmsxjWAhgIhAPpKPXiUnWH9Z8n03AHrWrybHKu25L86jLYarZQeDG63"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.45-beta_1630661128034_0.4659557790109996"},"_hasShrinkwrap":false},"8.1.46":{"name":"meetup-web-components","version":"8.1.46","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"14c38fa443d7b406c21c6c883d46d0987a9492da","_id":"meetup-web-components@8.1.46","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-4UlUOY0vDPYiquDDH9R8llJN2FN1Pbx5pLRTTtoK+HlB2NxZQmaa4bufxTZDFNcVq8dHZKh9jRty2ly9K6qtEA==","shasum":"49a0cacb390a847e57eb0ee9432fffbf93321600","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.46.tgz","fileCount":619,"unpackedSize":3144335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMfJACRA9TVsSAnZWagAAtDQP/iV9NKcUVUdIS1Pk5Sp3\nf0uiqzmo0kVQfxReqpNatQhtQpPHwdTOTjtKlBcs9qhkp3tpCAWf+UcH2Qri\n0FfvIa+9wivCiSLPz+r7wZjjH8U2ftoo22SPKoY6aoF8XjjShjmYaHGOjxVj\nnB1Kpck3Z3q3D0BCOizcj1cQq2Pl/m3DexU9NV+TD+Fvc6755eaOxsNYhhb1\nh6L0XXbHsqE9rq8fQPdzbmiXZcMb6i34XgLEfyawXBnd9gDH5K6+OFAQObCs\no9C0nkzZjpfQhYJjSOu12ewsLVA9xQ0XsvEzr6MBsquoHFpEOkoYclsIxzAh\nhO1/YrDL9mh7xL3TpWVShO/IM05WAsB9/zg/323mRWZKdWEH/J2xdi+FG+6/\njNrgYzCo90R/tlSmP7hM3qWxRTkdcMpGtkhd2QDv65V5PrQqPHCr7yBDNmxW\nY3eVSo0DbBEUCZ3rdbdw7cgR1k7vyQC9fvTjQU9dvR8hAbEfLEV5GKahCG1n\n2HOMnS2HIA1enkmiI9WoYUGOuG21PztPE+yvQw+Qm6Aw/5vvpUxp64s3SLd8\ncxH8gO9TPxpmcJ1D1nURU6K+JxmTl6EruiD9Higxrk6Wz/3V0pbez3Po2XSx\nXms4XvmXgNzpOgs+4Loq6+WV4cqDUIK4WZhfbe+cU8O4B0snN1vIY+KxGpum\nCh+w\r\n=oWzQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWpafiiTQPhSlblNY+Arf8XXnSPu1jDbV4jvrIjXD/wAiB2EzObzKAfhyc/JtIA/AuTS34lWzEEgDuEDQQrHby4Sw=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.46_1630663231942_0.19319752092402398"},"_hasShrinkwrap":false},"8.1.47":{"name":"meetup-web-components","version":"8.1.47","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5e71bff3e8621fded253b9e7216835a1046183da","_id":"meetup-web-components@8.1.47","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-N1IsEj5jynMVHzb1HZF99a72bU3ko0AkzRBHC03Bu3DGwCcFMD7XavRUONSpobhIZYfo0tYBzsh9aC7dLEKMtA==","shasum":"b9260ee6b182e50095709d25c6e286996d3b9e51","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.47.tgz","fileCount":619,"unpackedSize":3144461,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMfWXCRA9TVsSAnZWagAAAS0P/jol2+5ZVhiojBCcvVOA\nB8p280TBk9GkPva68Ew3M6gze52MmGsW4reQWFfPOx0/VJnD2CGBpWxBa8Mj\nm4AbZmmjbuwA2EdA3yGWOM+qXqIFbHKnpE06upThQOmDyqIeC9U/vy7Wlc6V\nY6VUGoM9O4t6+d/uZisoAU7FDm9IX2v0V4i086qzMrk4QXvMRbVWJIo0UdvF\nfgO7/Nn7AHJHPL5C3gUsPXJXYYjKU1etzTm9YSjMRKp/r5L3WaP9AcEGOjNs\nn8yqtDJrZRf/ZSLX2lxau02T5GsZWw2EGdZNQVNRJsaTYps/Q9D8xeSYWLKS\nwFprcTdZSOfZwtgbTi6jU3YsnuDxjwUNGJQKelj+spGvieio1Qiwq9HAsccP\nv3Vwqwvu3TQG9+y3eut2Fn7pbewnNDrzw74PYLPdSgyzGNCZGNLb8Ht/7sV4\nCL323ZA9Kv79PvfzDQoppRWu2A/SaZPPvzD6U8ttHhRmqgAg35g96F0HeDLU\nSzdyp9LxVemvDlwwnw+ic0VfyUpRFMDIXYyr1KRFzmmjL/FUJIzeYaFljPxT\nQN7RWrd1cNc+RlLJL2Y0+U9YW5oMvptaWjnDzfOtgq7gjP1zXsd1FlXWZr7B\nkn4C03E7BygWwOx9csKXH2R3Prott56xdgciqPu7xwRjHV9XkxOOjRVAqV7G\nKN0P\r\n=tvzN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwKlbtk/3psVCI7O3QfPgyPMi+SOlhv5a8SWr+1B//QAiBAyRvDZ/9VTCAZyY6ZTeQIZihzpQLUuUSZragp4lO+pg=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.47_1630664087513_0.5928551023408066"},"_hasShrinkwrap":false},"8.1.49-beta":{"name":"meetup-web-components","version":"8.1.49-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6e78eaf9de087d27b762b15d29f1c57dcce5afda","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.49-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-b8T2eqh6KU0NZcXP0b+sapGCBP4CT/5id/8HcCC8DPyho60ASyY7L48NceXszRwZNhuX2ZbpdPJhZMfMVM3Qug==","shasum":"660cefcc3351f3ae6816510e5324a27d6b6a1baa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.49-beta.tgz","fileCount":619,"unpackedSize":3145548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhP3Z9CRA9TVsSAnZWagAArb8P/R/u9kebyWgoKG5CnXjs\niOIUEcP+Hb4NDWpj4fj5P+K6AwIm36st4djqRB9eOTca8bfT5JUD0z+ulCSh\nK1ArP58e3cSIf0tgaxGfB2F7ES6O8fKlobKtEuupVpMlB8b2wNTo/YOzGcfr\nCly/3IK/uHW9cfpMca5T+PupuolKQEdSBBlyaQEF750GScatKC7UMCwSo2ME\nH+B/SOE1CuaJy9RbN5Z4QKMAlfpGzGIGNKG+ebOLSMtAdFKL40PSCsRmD2bx\n6I0F3qnWnI//VaYm/nIHHEtRWbWf5pfsNNn5A/bmVY4+HE+mXA1b4MugUlWV\nduoXFUo5owX5Rr6Pvm1HwMt771DsXkrsJe5XL+ZC+gFkIjU6CqS7y6/Hfa/u\nSh34FkAnPhlvAVw2PDQiSYjcYP8Kp6HBFrvdovEzu5O7vrwxW/6se6a4ffIB\n2cWVGWWE/sNtB952F5ixQPEziwaaoOtrMJ8Fm+HNz6G24J7o+6mNtgkMMK/e\nydv57OSQr9K0nMu5wcwiw0QujNogVhMMTCsVaXWEHN3p3HRTGahn8nSKMy90\nBOVlSZN19nkTk4oSmDE1NONjkXqXwhPS0B9W2kvIbSse5247+2YRMiT+L8ri\ndLFXZqkMavyyCOw3n7eQv0e1yWqhHBAnpxhvBmsadc2xx0jAF5SHzlcsLZAQ\nFjZa\r\n=bOs6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpPgIE9t6WiD8mZf4m5xR9ozOausfZ3dAxGBSuarXSLAiBSrNzmlUFUc9wFuAWM0ws4lyufL3XdESd/QVsf4P2fBQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.49-beta_1631549053566_0.32759345707623044"},"_hasShrinkwrap":false},"8.1.50":{"name":"meetup-web-components","version":"8.1.50","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"77cba9ec4258a874ae24ca0ef8ae06f8b29d970c","_id":"meetup-web-components@8.1.50","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-OwMiWBj0Y/W2OVdZhMfbMHjCa+aZPJUA8E2zhlVs66nSGtWZkad2VQmT0hGwa13DAnUJgPE/hv3flWxcZWYlwA==","shasum":"3696f23a03200f091b91675758b012583b9a7afe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.50.tgz","fileCount":619,"unpackedSize":3145543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhQFKGCRA9TVsSAnZWagAAbzEQAJEhF6GWq2bDDl849fio\nZzwDfWWYL5cWY5UZChPhen/65aZKev+wUQhODr4RH3sjVly+2HxgovTbScsW\nL/rAFtMq5dnkYpennnzxKq5QTi7aV68u8ho3VDcWn4UIUIzJOEsAWfgzT00g\nGDV/BkDJ7BFrV+tUg+gC7MWu6Mp2z7jW9ZwjyJwLsjjkYY6uluYeP4SPRNbT\nD/4/W0PyIg8S0LxEEtxttW4osjM5XI++zJQKoeU6bGUHkkA2Q8pfBYGileY+\nz0fmV/6moMPE79d6g9q40RY//gpFYaHFGruuCanrg26qAdOGyjYSU43aAnBC\nkvtCFu8LgDc11DdilLwzAlyaqkAgqbYbjyl+JT6b6B5CfXDYFKbBw9tfl+4T\nFE524FEyATpYVMHbLiqjWShsJa5b2FuwJPbumWX9UZi781hPKXrxq5gTidRU\n0P+WAbcgrwgVkpXXsOt81cK6bx/PQi1bVXGUAotZBev27EnJAv0PqgeFh5x8\nl8JgSP/vF6hDVE6AV0EzLFSylsaMmdXPL1vRvGdPuYyoP3TFO1f3CYMba4le\nciH0TZmEK334ezKWrFevccOCifAzorYvAu4SpIr/uZaB42LPVefuA6WpMttn\n1Vdf1v6UMyIRN8R/0IB0xhoz2YRoBjP7vpothS/aulCvzb7GVUeCzn2v9thP\nG9No\r\n=0Jxi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC80zpgAcMQEcOw16WgUYpvzhfAxjxHHLU3Hf4wF/rhmQIhALEAtGib3kyMmHkZrkqU43TTEW5ij/P39Ai+c3f7kVrM"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.50_1631605381819_0.4490652883725428"},"_hasShrinkwrap":false},"8.1.54-beta":{"name":"meetup-web-components","version":"8.1.54-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8947a9d5fb190b6f0b07808a7ddebbbcd0a66f3c","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.54-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-AYChkhW88do9hLOnvgDul9+GP19JHYWf93S6dgNELOCLjqzfr753l+Fn/SOWf8TylgolH0bJ1KW4xfzXOJW/aw==","shasum":"45ec38d7da4b8afddc0651ee0024a1055f08d0c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.54-beta.tgz","fileCount":624,"unpackedSize":3143221,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvrNnJ3tT2KOa8OTlN3wk9LI78Rjz9l/i4flD8F+QUKAiEA5y3GxLUASORJgDtS6RljZYaIiPuc+d9rvvUCWLe7hr0="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.54-beta_1634830920833_0.417210746047598"},"_hasShrinkwrap":false},"8.1.56-beta":{"name":"meetup-web-components","version":"8.1.56-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"549bf5505157d95f16de7545d8ffff41ee450d18","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.56-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-jBsfJxDxwOpRsyu32CRawq0vOoro0lPigQk21dUADKdD75dW1tBSP6P03QFEJXqcLQ5+7y737VbM/TYlODjCxA==","shasum":"26dc1e580493900e333aecd7ec9976f5d60097df","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.56-beta.tgz","fileCount":619,"unpackedSize":3146071,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAEKY4yYGXBPUzTeN4iYwfl4hma+tt7y2LD00z32o8UgIgBR6F/l8rJad11h7OzWC+7YFkRsfEy0y/8rV9j2jIEI8="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.56-beta_1634833133153_0.0952215194197501"},"_hasShrinkwrap":false},"8.1.57":{"name":"meetup-web-components","version":"8.1.57","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":"^10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5301bc334dfbca8ea5cc59c58de7ef7c6cb91926","_id":"meetup-web-components@8.1.57","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-wHpBYJWSvabIn5xlKAqWZCzBprxHHdFmzS0/Mp2ldapCp/Vjvi7Koli3iE1tDb4ZL2/C/yLBAvvVrCs5vdl83w==","shasum":"e58732668902acc4ec769f248b959f51aba0fe33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.57.tgz","fileCount":619,"unpackedSize":3146066,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH8zpVqUXls7vN5x0OTIppeKCgIhjlVcxXqfxuDRRESRAiEAvOE0znHT7hRAaMIkogtp8RnoOtg6gdUNirqgkrVOG6Y="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.57_1634833482505_0.5106632335929824"},"_hasShrinkwrap":false},"8.1.58":{"name":"meetup-web-components","version":"8.1.58","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"297374133ff2a6b22b83f879560c99f5869b9dc9","_id":"meetup-web-components@8.1.58","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-40FPQUgp3ajePITBq8pIswU+AGJuUSvIIQ5UH5JF50ao27ftjPAwVt3/dokKu2zqLUgvMd5W543KFXQVKfYu6Q==","shasum":"ad3f686418889a398bf806d33e45c1b1b5adfe09","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.58.tgz","fileCount":624,"unpackedSize":3143739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2zAUCRA9TVsSAnZWagAAjP4P/3vlTyyxJEUKuZAHel9R\nLdMHGwzSBvTSJ+ZWw52WwXhks1KdD491HCofnTrihkufc7gYdBAXfW5F9686\njSUca2BinWSGAObJ+YwYhQeoofahX1QHQW8ohUY+ib2hu8nlrro7C2chvlWh\nvRc0HQb8TKUzjF4H0yd9aEzUOg+4zGkPY9CDr5Cefj9Tfsx+pHw1irEYFGjh\n+p0oD4SQr/jWycx2TMLQENVguAMRMF6hQwHVMWeEP9WuvtLMlSiv2bYYd3Xv\nIWHlVZ1dfDrtcaXhBKYp0RtkY7ZwTEAZjW0cy7zC1OI6I64p719jtj0LKPO/\nMces0hWR3lgqLWkrV3IAbMa3JJk0yr8MfO3qnuO7u6tGpDsYGr6rD90hgzkZ\nsdSPsWCryTsphJgzq5EkR9wngBptW6IBuFqWLWfLm2mRDg9CyxVFX3bTlJY9\nOIB3SIpxWgWw9jeGBrqClMxv4JXo05cY+yyzT6u+AncJsPJgC3e/DDQa/T1p\nmkfZ2kDzg0XknGz9Yxcxg6N2dZ7Ta6pMA90RgjhyhS/8YwbAlh6/UrsPL5JC\n28/wjHLFx4ruBN/ZO4ZQ4Lk3rz+rIUkvlfeTyYcst2/BGFH4vXyvvIsE7Uxp\n+BRcQY2UZwUTXD1EjVPLqQXf/I94eNe5K/hlkKC3WYSNt8eDo7hnfluSRCGg\n8owH\r\n=2HjB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGfe7vfCGREa9wxRJ5yKVK2mjd7vJZqhpINt1JCNnQD7AiANwEhD3EQgdaIPZWrzV2prdUdcLTEXu7CgUv0s4vS5MA=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.58_1635844944482_0.08526071381059341"},"_hasShrinkwrap":false},"8.1.69-beta":{"name":"meetup-web-components","version":"8.1.69-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4291a3764df77ff31779b4e3b5352d74ea14b06d","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.69-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-kK+nJBqwdClXqVHa3vBxApfa8oAk+rLfbpM9wSRHN44zZdWFwUd/BoKZN1WeYp+z+ovhuWhW+25TFqy4acOpNw==","shasum":"c0b4709409cea8d144ecf662f91debbe95f4d3ce","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.69-beta.tgz","fileCount":628,"unpackedSize":3154927,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD44NQh52eCiKaQzVtco0SjQ3+g4gzHXCJ0gDsRHu7S9wIhAPfpuMgMDlUPedVJfjU18YE7+WiI7XVxQWF/Jp3a1h9E"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/kN0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQQQ/6AiHx18UyjHOT/0SvhPhUu/3tz6ZS5CUKY+hW7BaOhrqMTSdH\r\nF03r5GcCSjn9341P8DEn4glBQtT2aho71GJ5E34noqeAVR95Oum4mN/XiKi5\r\nGnshUqH8uYFYgJ5E7UuYXFVgPcAxgitjreEVhWK6RU9cD0Ye8ZaTUVJhY6o8\r\nyyrxOBf4ophbNLo9EvDoBNwaSXXX4aI1mPcvFvU6vJbUBysOiIRX9yGszvjq\r\nvBlj4FT+3cZKAzMp/nb0QtdB5wCoU7CiyqEfIx1md4/PhiA8oe8tmWdz4rNM\r\nVbbMlRjeJoM2KMijJ0hIXTOMpujdgalTWgZYL+fvFdPk2Ma4xfiI8a/w7BJi\r\nqMG1yCk1oh0AKRmADR0UEr0i5kMiWFrEWG2std6c5rXtkpcir7R2jD7VnqKY\r\naBIIjxjOTpYMZ+kZ2GyfTgCZRgCkZuiRtee9leB4eUrCw/+ZxIIkLRjlDLED\r\nim5xA6fkBfXMxrJwHXWAv9jDjhF3pjG/FjyQ15ngpW6PG5REfOHPSV7wVkrC\r\n6cUYhrorPSLEQRfreeKzA6YMaOfbLgvYeX8rcjZ8r6QKp76yARKla4YxvecA\r\nU4N0aQokDoT9eL5Jl7LQBQBOqVaBzPDAVJu8MM8Yn0zkPgejA95vrEWJ1fT9\r\nbc01PUTPPcnFvy8WVmzauBpfrMLGjjVP/BQ=\r\n=WzHp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.69-beta_1660830580205_0.04181089401255611"},"_hasShrinkwrap":false},"8.1.70-beta":{"name":"meetup-web-components","version":"8.1.70-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"312f4eac50dc6684ed45e8bc6d7634dbdc02d121","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.70-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-HZ1f7sXdQ6io4IUTxuZMMw2UpX7gwrjQRgPD0MVSnTgdW+aIOEfVgqq5cQOUAZYpf6DiVhsX6VtyFb0xZfq4xw==","shasum":"d8e57292aeda9a0d0681a9d0463e238341f9dfbc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.70-beta.tgz","fileCount":628,"unpackedSize":3154919,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICdqSyZK3fpQEhoMU0fBjgRuubIxxpfNVAx5UzX5Y8q5AiEAjSIRd1qPoEMM/Oniht5bdv+p2a3sRnpwir7NURXIg4Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/kvkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp21g//XG+HgoYTOAthpS3QV37D8r4toKd2FAckRVCAY3EJX2wWIwYu\r\nihBsZCfJn1xe7BVauwq8bmxEqiw7jTlfFkY2QJd3H4HkahpCZYZbGawM+Lkl\r\n/MzhuuTBapxc6DKula+9ix9YoGDYDe1N3098FUuumK3m1EwoTVB4vygqF/w2\r\n9uE+C9nyB+Ge9sArgb6rW5LEBG/NLccjNQiE8z2gFXBIA41rKmlxShtRi7Q9\r\nRMl/mdXK2w8g1pxLteB+D4sY6XH9zqh7tNb1LK9w0WEa20HRH0D3zyuAjBia\r\nb/JR4emCSjT83Fv5lBX3qX9IBK/QZ9WFlTMvMNi9tsCBzxt9KdWRqZXzv1fM\r\n1hRVSbZUSUZjPWtMwtsjX1gCrrwbXch3QCfPyYlIPE2t42D4yghaxEWqwoHx\r\nt6RETyg62JmSyogoY2Uo/hY/Fi8BdBVHhI7j/RwUKmBqJIU+xMC0cx/6lL1y\r\nmjNl+xjKFP8amGlF1P554rNHDOQXfVK+WlpEGa8TDOI18Hu8OKQmeKMeq15J\r\nu42F1VywNlfHq4gYa0GGc7BXBPTv+1onNUl260V/GA6QRucKNMBjn5Cpzw/w\r\nVlvx7Mev3m6YMpdJu8tKsHpQ3BHh44u2LPrDf7NS2JRhK7q4PSnsSwFiB3Oq\r\nXUxVXgq6TRmyXLATZS1wRSQwhVQ/mNXQj84=\r\n=15WD\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.70-beta_1660832740189_0.9055087595518871"},"_hasShrinkwrap":false},"8.1.71":{"name":"meetup-web-components","version":"8.1.71","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9af0af4ad9acb33ac2e9ba7830b034e49baaefd1","_id":"meetup-web-components@8.1.71","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-unnvrKomtF7StuV47GXDY2IOh/zOg0FBuUnz07G10aiog6lwJUVFykIekYKzrTBzJx/xSCy56Czu7TeOlpCQJg==","shasum":"2249e2592e5f16ce6973ce7ddf579aa62c687094","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.71.tgz","fileCount":628,"unpackedSize":3154914,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDt9h+At/B/e8L/zY1miREvFyAVnZHOg3TcKW75ISvekAiAjL21tJsHUunenzWo0vF8CYNGNXo+PVfN/gUGNyxqlsA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/k6EACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpMmw//RVqlo/OjZw2ysDk7sLsydl85Ar52D1qPPItdTwRjvZe0iBsG\r\n3VkBMqUou7utQvADR3k56b6Wyhr07l+ywzK3O/LrEHuhF03ENGHptLaxvqSV\r\nHwy4S/+6+Wm2NZJvSLTa7d1bYR4JYSXVZoOFc1EC3IQYZ3D954haoRwP7lpI\r\nDT6wBZPvA0TFb3bhIvroGqA2nj6BXtDaVVDF+rKe/kcKsi98pTF2oWgSkMIB\r\n5nbqwyVoIkXHGweHqegnr2LEcfzibNTfzol5EgACXYEylqeX/kf0Nvx7+N5S\r\nTvaf7TRTTrbUu0nw3vy5t1K2IM/fWbxphbZYsD70nz457ChBN1zwdKVhRfXW\r\nHaZQHpEAOgrFj/dvEAX9LnjA9zHhd9xhpv9lEz7BhGxlt52M/8R5ORlj/Hee\r\nC7fmZEYaz800ygxH/5MYxeDxd/i6/xNIcBkIsi3RcE5ApW75HQYGfmxvpNB7\r\ndH7JX/q9kz6JuYcR5jfYueKU00JCCYgjqFhjuKrqsqTUxbqIXxmxDiz8vJEW\r\n8jWMqFihVN51aqDTlCqfHrf1NjgKZeSZITHNcncKvZITpJ6tUmVWPdeo0cRp\r\nWr/NtvhEkONHyEQpppMibsfQ75IoR7HH1ws+k+5EN5SzEuT66diPHqK3NC4S\r\nH5jywZg9M+WhQFuiRu59hnFjxkY04k6P6HE=\r\n=qPMI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.71_1660833412465_0.6290254594090976"},"_hasShrinkwrap":false},"8.1.73-beta":{"name":"meetup-web-components","version":"8.1.73-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c5380c5ee02a7f5bbfdde0d5114069ff15d708f3","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.73-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-GSrnyIplhx6Ezltua8PUR/AuYrlOaZn8q7A83bZ9OaQ8fvO8LpCkFpxAMsrYzq6k4+Sii+5MSBmIvi9xEnNpTA==","shasum":"bfae8fa2353c53651040e672ab106fdab3a7db17","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.73-beta.tgz","fileCount":628,"unpackedSize":3155547,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCngTjYvNXEOJEX0JZ+MLx3++W2qSE19ddQL9kzyKGn+QIgX1C9Lg4fBNMywfhTyObdv9nJlgT9AgsVrB5250TwXOc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/mOZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYdA/+J25daV0eIcwQqdqFgq02ifVb+A7ukFQufhg+aFzmhRqMaChj\r\nxAUfxZIdGZ/MKHOnjJmn3XUl5s2eo7a6SeYTfdalgSs5oU0X7mUMYNqqkftc\r\nGADRMrTTVdmcL9PAZwdbV9wN8Jq7E9MXE4XBlQuEq+xwzgmxHFBsBZKAjGri\r\nyMPde69I87Dcmx2MeEw+88DaaZevYLD48PBnI4Io6tFrxijOnx2RFdiDDoBH\r\njv9BABTxIEHUXtriqIszVlXgUVU9OfSo6umxgEbMoXevzQDsr8jltOoOsvw+\r\nZP7/bwlNu6KBnTLeHjG4tEW5p4w/BOiCLxC9I1RsMNLoHQaGz1lZhhWUV7eG\r\nNj4fn9+g63HpZ1nxuTm0xJNXnIHQF8u5gXLkpnHmgcnSSXduKMgEl4gLvTYk\r\nKWYxtIPIHT8H0TRog0SymYFVY9+DbBcjmCzDlxLY27FJu+ncuVBK0TAaRAXc\r\nDyfz2cAciHP5ShE1QO05PXwvxwM9xrnsCjmEpQnmp2Z47bLBBJGnG6nGMa3h\r\nofrZ4AmOuvZZ5CZAGpZH9J7g8DBDDIYlyAGL+2QOoZib2BSLO/pTsixi1Apb\r\nzUEsz3WFWMIZ1C+AH9fSWBj2w/MpkEpnw0QhTh2OriMPyJReGEHhbAY4uhxw\r\niRctKUMMugMW4fG27qJq4fdqTrEfx5if9N0=\r\n=DKAX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.73-beta_1660838809610_0.94868981795952"},"_hasShrinkwrap":false},"8.1.75-beta":{"name":"meetup-web-components","version":"8.1.75-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4836d25fa2eaf899f9918c6d697176c9e1343581","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.75-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-6LMi1+CPHyoGz/jh9gbQ923C3Hw3cJREmVMFW/21HM/skGIF4JyGR9k18yL/o7tlHyuhUaoyJjlPVThtGy7Fnw==","shasum":"ce9b1256a25dfc8ec068054bd2546eb03a089096","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.75-beta.tgz","fileCount":628,"unpackedSize":3155733,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDabbecZTP8tYKThGEETM//D4qdEkKkeoAvW2kE8u23sAiEA7FAJst1xDGwi5FmtDlkfPNHWqDn3f2+XlD5ANIXPyJ0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/1qSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo+Iw//Zn5QylixAHnwbXF6k/cVGjDKeMQQhhzMoBG9ZDdxiYSIe3YL\r\n/Gn7xZmb2LwVl6r46Sv2F3OhTBISQJ7+hrI5EnY/s4ztp/t/H7TNZwys0t4T\r\nrGymYi6Ew+hoPjODeOcc16nGbRTMS9TBPbC97wl1EFojECaUgxQXCKidi/uU\r\nJNF7Tc395Rs0Idb4pjJ8uzku0iw53+llsAe43Cou7wHSL/Lv5scNJRfffswz\r\nzWo49oxHFhMARMAF9ZAxA7jeDTyuUIrjNocdOO0OwdQo8WNQP/QsDoUTYDDM\r\n809swekmzomF91LYNbgikLTdKXlRBLDwci8nuQmMpRVebujUDLJimoOG5ieN\r\nOs5ESMtUe9ktsRd4vQegVa3BEs3uoEL6mVyRdekoHJdpnQYzLi0DnmjeiTDY\r\ntWhPnAqea/VOKiE3PmelhZc8t3Ab7Pa2/jvjh2VdQo8XRdEpPQdUj800BNRh\r\n1bOeJTR0V3cZ/HWqfh7KrOlfPwMimbnEjpNYTmjOXtPKJ1fQcMcqJ8uMPtFC\r\n5y6TV2LV5ieqaDkGuC3r4evHrRW4n2tGDG4V0IaN5+ePIBdPUtRxUe63m8Jv\r\ngHZJuTuPVTMUrhffqnxYP2Tf/SNdrrljRlyMGX0RzqqY4gW/JhH8RTDETFsP\r\ncUOfwKwV+1TPLOX73nEYhqw2gVgxs6flvKg=\r\n=DK/3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.75-beta_1660902033745_0.5277063813222014"},"_hasShrinkwrap":false},"8.1.76":{"name":"meetup-web-components","version":"8.1.76","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6cffab050909535b6eadc961438ff3b3ac8da4c2","_id":"meetup-web-components@8.1.76","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-avfA1eO3TjKoauYOGB9+wgKRvbxhQHBBSiRP2GgJJ7KG0+g8eXoN9OSFATxiZnWB1Ar+1ayLUKINAZJlERTDmQ==","shasum":"f4006bad47cfc5a11cac967c69e424b8617a6f0e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.76.tgz","fileCount":628,"unpackedSize":3155728,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0hWkB6ClG6NQRkOwuRQIB+om1DukS4Z6OU0PUuqHuDAiAMLO/eb5dkk4xK/3XXfokOGFb7mboAXx3so7nREF9dJg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/13NACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo0pBAAmbfsBwItvsYNbmuP1YBM/AuM8QKxYfMnxpRhHmnwlad7cCW6\r\nklW3DIPn6VpXpyyIwLyIiWAjwfJEJRZPDukrMzmqcssseenIyBj1FEc74Z6C\r\na97WImMN87KiRYYx/XK7ZJXsv9Er1naI/6etuvTWssIcgI4PUwZf8HJtK8oC\r\nWD9byR59GggBpc0gfOjxBRJ2LRWwdN86f0dkbiPqDay69t0a2AXe7j+VAKco\r\nv8cFrx8clBsKRGupONzGJFHqXc3LeckqVlQmUNdqnDbKI+vIaa24r+Z2APqm\r\ndfYmWK4UnGa0FufSY9b9rHjIBinI6YFWKLVOOfyt93tH6X0YhDkV/u8ci2xz\r\nrz+A+7ti2sqyO9zVNpqKAUKeGgLS6Wdw0ODNWPoBLdrTrOAmfYhp027LofaF\r\npIeAxYidiCVKzCH9Yl2zTKmAnxv7ZHMy5kH1d5XVN65GE5N1cCp812FRykcu\r\nZw63g8X8+Nqf1VagZWf8Y6NLC7qIvgvkD/q/ZyUI0qtDqR5/DqtWx3MuHTcd\r\nag2nO3iV/DZrKYQcJlr75w1dOtZTgkDEqUdo5WXDvxKLODaFLm1fQyGIY1OL\r\nMd5n8lcrpDZ8xlZXLiuVEH+j7IKA13505GMTFx+kaVoQvclvRxTPw2ix6PN2\r\nYGEgtx8o+w13KHsG9eRNM00RkYh5xsZNjIU=\r\n=9sTK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.76_1660902861112_0.490208625699299"},"_hasShrinkwrap":false},"8.1.78-beta":{"name":"meetup-web-components","version":"8.1.78-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"38a0f50224d6e6d87776cc57e2dd0a81f5961aab","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.78-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-NEJUKkJkF4kX8GprFlcEvueTBKsFFOgUkhxa3xXvcap8Vc09EHw7821pYZ/kgM0GfnqAKNxYtwtHKLhliJq4jg==","shasum":"37d44d96fda59571aa886388e886e9b97b88e492","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.78-beta.tgz","fileCount":628,"unpackedSize":3157107,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSoxoYVh1Yupu20LdEAU+Kzc6J8ALVSBb+gW9F2JpxHAiEAsHERqdsyagH7v+hg72AKOaTcWt8wsbD5T8v2zAVk0CM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/285ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoXuRAAkEoLjI2IGBesa+Pynec618CY2UseLAwIv4IJgxYCZ5wLZW8a\r\nqZCuE3T95aAvg93isfa6/dFgCumAb7cTnHolo1wqdtYAv97YbTQhZHtaF3O2\r\ndR7Qr0UKmei/WaUuIhqw6taok/hpIwhLYEle/FVU1479SqfnAvP0U6VhIgSC\r\nXooYnQSZNI4BPuFPQ9lY7JnHixorxBGihlfhSf3yrXJWRlxHOkRP62lndnr6\r\n5VtTpVMMTOwVA2pr1LeiymJjG0omX/Y9V4Q/qX8ks23fbsys3YhDs5eGFgq8\r\nB2tRX1Mz+7XlxKKIdzqFVaV7VINScXdV15ygfm1Na1tsV8v+DCKoDlyqYHs+\r\n1uPTdZW5lb47O9oQjCExfvTRq20+I7VvgmHfSHw8X7mREmOhUld11EeMl/LA\r\nUx15asFmomRQP30kQFyK5mNKkx1eKo8gwARZqbfprnuCIz8ZO3OO7Gx8pWUA\r\nlMvob0WhvBv5a8YJ8as6JCR629Ij6w9UKvTnXmMdBXHXNtUL+0gO8epITS/A\r\nL6odfAZMFNAFnpY63psdyDpQRIA+h5aZ8UQJU+eZmG6cjwoghzD6NF4ZPxfE\r\n9+DRrkCLsaOC7yHHd8MkANB5hcVR5NAk4tYgYy0zcIhtfxmuYStCK0fct/Co\r\n6mQw98iJ26rUOOlM93mkHbQnNEJTBg0xAIw=\r\n=BV1S\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.78-beta_1660907320907_0.2825578775179456"},"_hasShrinkwrap":false},"8.1.79":{"name":"meetup-web-components","version":"8.1.79","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5bdb7711a3e2f62368bd1e0aa1b79576aea4f309","_id":"meetup-web-components@8.1.79","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-kMA626uj57849uA0ddGYZpSZz2mCChGBBNhHeHr8R7qM37i0D5BZgzg46fMNSOeWN/Zwa19BblfQtBCmH1VeoA==","shasum":"7c41672bdb2ccd5a6770a2d05ca15333ddaddee4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.79.tgz","fileCount":628,"unpackedSize":3157102,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH9OoDnmm6BgTl+iFbU1NUHAkqO4eeFqtdpeHDDrCpJcAiAgSzGUAJWrAzAu+G1zl7EoE6KlhZX6+TV3P7x2YCg2SA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/3JWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlSw/+Mmh4arSUUUbDqJj4E6rzREruhnazrSvP6+5IHHDg3okm47xT\r\n+ZeTFYIO+7XjmRzFI0B6mMlsbTMFM2noPIfZbtOcXNWeB/AKfW4/VD3tB3N5\r\ne14dBNLR/KSbBdrb0V6ucxs2AQpRG+yzOjq2vQjS4oNTNKdn4lVVfuqvwK67\r\nsKJ3fXKgK7J2cGvNat+ihP3dd5FwSv2BbQopyqXqosXjjXCf/xFuypcAgN7B\r\nBaQSjWlwZwpClCYXqHspVwX1Ik7rM72Y3x5nN5zQ9NTeq9sLTg3iKYLULFf6\r\ne3N0ljJes285KaiKQ2Pno+DZ8w1Ifvb3PtvQ16jaBxeqoDvxnBDTiKTNuKL1\r\nPhTHVCngnnZctjksWOC2p93x/GXGTTChf70378Jfcac/PkhtBZ9WqbX4yPSZ\r\nwd+mcynculpMPSGD9NWWEOU0UMR9J10lMQDvxrpbFPeMBEK+DrQme6tmI1lI\r\nGk5Q6fjIuGgZ4kXSWSt/4RX23xqY+ja7fBTkcV953MXq0t5NLTyCTXASxNFZ\r\ngMo2weGZ3LnvsTQ5DxO3FlLbGCFzhnC2B+/Ua6kmnrXtfgxM8oeuwBUzNyzl\r\nryy8xOswz48GtOH9l3Esqdq54EfjSuq6lbbOlKMA6jl/Emxh8VrSC6ZhKH/g\r\nfk7ImfdJPE4E8FSHzC0YShrN0HMpiNL2gsQ=\r\n=FU0V\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.79_1660908118467_0.5307351494672532"},"_hasShrinkwrap":false},"8.1.80-beta":{"name":"meetup-web-components","version":"8.1.80-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c61d02bef8e45183bb37af47cbcf363cec036860","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.80-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-v9oP/OoNg13HpZRmDHdEP4vDCTWx+CdmdUHWwnFCEtdwIY0zgPGRCoK8YETm+l4OzQnmSuJJXwp9TDp4l6wepQ==","shasum":"21849fef309af3389e391b7a6ab7e79e09428352","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.80-beta.tgz","fileCount":628,"unpackedSize":3158382,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpJMRpmw8HEUVtMKaJ3oljdgfCRzQnWigCgSkCZcRtSAiBfdEpCsNQbaP3NItyxmCO18g+vc0CFceXY+4grVEiY+w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/5QsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpfHg/9GQ+2UALVdXU49C06ci4UxlYuod8tdltiNIYCn+GDFHFFW1P5\r\nT8nnialywcyuuVP4fW6REgICbulxiJaBjQIig8c99BGliH9FTcENfZxpp3p7\r\nnPAzBeWq+4nm+s4Kk0Lla1qKKpPZqKMYYksFQSeVlzDA1tRPSTNQxcjAco5S\r\nZRen7RFTsJqSkrb6Z7mhfo0t/FijRqSZw4tXEcpAEKlLYYEaRUHDhLUls96e\r\n2Sw9zcOovI630RGjS/weYLd35SFB5295Z7hIskUesi1vVBbz04x4wBLuB4eS\r\neoZWQXf+Q/EGRJ2vy1ABVV1eKqrYF12R9usV6g6PurrHg4NsDJm0NnnUUE1o\r\nTDYNP6uxv7vIDnEjSUxajGL56WBwRaIpIMRbCfnme8z4HYCfQ9Lr5C9BCcBi\r\n8Ebx82LEJ4PdMcyRBzahobmZn4g/lgJJMSuMb3GCVwzYPPdUVTri+XjJl/5k\r\nxorcC7y3c9XbU80PmWTTAvWrr9FF+sftfUPuYhV5Ehq1g/eKOGjS2Vge7Esl\r\n2DrXh8ao+fs/KV/WoQEUr0lV9rF4128u73p1VhmiDo3goLJOUNVGcZeQXK5+\r\nRA70IUCoc16RJCvGicBmNVFZt4mcz0Jv6C3H2EdANihsAeLl86gZo8FVKgLb\r\n0zmSync1rRl5mTbzgX+whEbuCPz8hFFkbKs=\r\n=qvsR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.80-beta_1660916779826_0.06739528540328243"},"_hasShrinkwrap":false},"8.1.82-beta":{"name":"meetup-web-components","version":"8.1.82-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2dee3b4bb8327200fc535b387d76bdb291d5757a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.82-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-3+72CGyC2mmfTSeVhU3zosuIRAmA5xL7FYPSLoAnF18pGFy2uomfKE5zYM8mPj350QcrVth8OINm4Hgb0t1OYg==","shasum":"568838fd9965526c0c6faaddeb3025e551f4958f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.82-beta.tgz","fileCount":628,"unpackedSize":3158645,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC9VFFMTlibEYOQEIo+pXJZamxu0+S+AeGMjm35LKPPlAiA8yM8A/KftJVDLD+BsFkFY/4q7RLXPy23xL5vCR5mmMA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/51iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvMg/9HHxsGah5709oAyoz6sv/KiOE248ZEXh1q5NQX39j6PHAcq4m\r\nkwld1VB1eQDgjaZ3TEaO1CfXtfuI2ljVIQslxgQp8jayVNLpU6b5HaPEYGBr\r\nlcK3P36bFcvIrdqJDffBUJABafxu1KI5VPPaoyaAPLMNTjwKVI3IXhZX8kJ3\r\nSUzMZX/syY04AznN3npk7UfE6JFst3O9LMDHNZewSmySURHAx6EKI4HRHwQM\r\niJuoyOtUMQ1sz3g8D3o5uBZGylLvsjqqGVa3Da8fAdtVrC3+HH7AsJDntxlv\r\nN3iLN8SgI+F85eZYdbhoW4Oc7TrdOGfJ85J0AKR0etPcFXCPPTSegqPkDcC7\r\n4Mn3oWExX6bA/vNqIgrJ9E6zBdw0CYEsNhb07IJgzdmEUyWLcNw9IJygQKkZ\r\nPqXa8ntljH4N2fDvjVqNXaPWz6y9LTp3qnChYhg9UVI6mgTAHMYFxdf9FtkM\r\n/3rbZmwq+JTVAVISYp0acYrloSQTLpiP/IeEVZd9PToSeYSGiYBIJDzAhNlj\r\ng6bGLx3dL8+Lmk6bt6ZXemBFI/T0nkPY5AVOnHOpPx4el01ShuqijOUdYBCj\r\nHxWQdzkw2DlYYf1R1Up/zHKBDiX0cVLGi9SpA7qYMHMUWqjYTo+Xfl/qU782\r\nwalOnSW7ghgGOpLCi2BQL6g/z5MJi3hPnyo=\r\n=uhvc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.82-beta_1660919138402_0.7899280484591169"},"_hasShrinkwrap":false},"8.1.83":{"name":"meetup-web-components","version":"8.1.83","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"45c99316e86e770d4a4935fa11c7d34162ba1640","_id":"meetup-web-components@8.1.83","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-YrGkVMpeSjnwKG90IWLHPPP1ORquHT444aaM9crJkVwKr4PyvSj3RbFz+lHzacVMW+Z3+e4+ywwDfymKUdQ1kw==","shasum":"11975cf19cc079a3dd3931cd094dda4f00d10939","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.83.tgz","fileCount":628,"unpackedSize":3158640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHHiqxo3qwZ37ak9t17I7Mqx5mRNoi05P3H3EHKMN6SQIhAK+/beUFTmjU8rC1L2/mF6uP/YNa4qss78iMm+o9O4M1"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjA1DcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp59RAAiSGknAqIFsamkjesVaDJD+mwAj5QFodZPu0jx2iTGBU8SkXe\r\nTrcnlu4j7qRFMr/VkX6tgVSHgeh7JR2YY9aWYK+mD5CU9IL+hhtkNxZ7dwe1\r\nVZBn0cDSX7aeO4wpXzJmX5+srkyWLZLiChRQI7ic8c+8B0wHFzvrziUddswj\r\nUlqGV2wbbjqzJrr8VeRY9b2mLu1s5KcLYiH/VoKXrAZTu/mDYJdwHpxQKLCw\r\n2DNPWlWOdYD2uzy/iEYFpUdjOZVll4TRFLWkNzTjINCMK06uea/AQ983GHxZ\r\ncZYd+YYo7FR+ql0Bofmbz6Y0fXbFdhG+iKVcOXFpmlTXzsRObO1YAx9elyHR\r\n2POe38lz0ZakhcbU8lkn+Vud7Tk04gyZR6zGWqrtg386kpHeAzsO86JhfKbA\r\n3OMcDgc0bzlKblRyugYuuCdaIyE/38G3WTpxl1HciOA/fAoqjG4MLg6FIsSb\r\n3690MiTXQydCpfbBJH9Xj5bMGfN7N9jcX3HbiE8KmBrC2g07UwJJ2MLcYluH\r\n5ZWreiJeFv0qniLGwd/jscUZnl3h1hS8kpiFu866CI7B7LaczmcSj/5yFNDv\r\nkejm+kdafEt3fqozMniCZMJm1Vp93lz8tQuGCSGThO7GGnYMC+/l/rnSFm+V\r\nxr2YL07P/hzjN3ixzZ4llua3S+QtesEUpXE=\r\n=mAH8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.83_1661161692469_0.9463261126431453"},"_hasShrinkwrap":false},"8.1.84-beta":{"name":"meetup-web-components","version":"8.1.84-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bea906f35e7b11d2cce45a49727de7ef12789eee","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.84-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-zeD96qiqwCCbSUnChylMH9OVKqCSrlGY6yuLHhniNxcASp022SChjgY5abLFy5wU2QSIVnZHtu8J1mdbmYSOaA==","shasum":"0924f424f6f0e9754a53e67ce5353efaed626eeb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.84-beta.tgz","fileCount":628,"unpackedSize":3160233,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUtkmGxoKOqU+BSvpz0t8jKbbnTNpmiA6z2GQn6UFJqQIgI3EdNmHVu6XtUqxF5Ic6++kH3Tv1Kgwmr2HfHW7IouQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjA3H1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIFQ//R51IkCh+1uJ8FWqxeG7yNMqC41uXgW5J1Cy5pLD2Pfzvhnzy\r\nOqIBoc8JClrEd1az9hHABrzKcigz5V8MlNvrZfTD0313ITf5/8Qhkl0W2kDi\r\nT50Xh+287PiSmrlFemHW+26llPVNVVbWFO2Zyu+rjhIS9tqF9EbPUJ/cAzpD\r\npPBDE7ukoZCII/En4nzCRMIFhcRo6gGDsrFkfpV/Bcx3xqoXsh+Xtwpgjuei\r\nkk1YgG/CkkzRyiA4yo5ENghRiYPIgVv9inf2k+mIV2ykqm1VBrQEmhDssMK0\r\n6hOqds/tNUBbvf44UD4hIjb3HeVu0JtbTK9BMd9wAXRjbQ+DPMVFjACEb/nn\r\nl7AI1McEeuHIvdJhR0W6AnwAB/pE5YOuhgtDbHNwG4V7KRLdakATDHAc7zxX\r\ndn7hTTfrj8jwZccLg7KjDU0tpjRP0JkTIWPU4hub84KbnzapuyXQuGFrhmUJ\r\nafxuh7SHJ2CUGrGDz6cWD1I1AZYFy9RyoyHt1UqWipV8zdL1gthPyzqSlpij\r\neB2XcVCPglMEC3HiGCFx22k4yHt5NozRHiIIAf8jsNGiO5w5AdnmMbb1+mWL\r\nDtAZRO7YhuQgLfvcrKoYf3YbyVsSnw4v+LpcPn6yQc3RaTDr6gOB7TJuI8d6\r\nUJRDSCBM1EFGU4oMDzsjPYZbOrO71kYZvxw=\r\n=omQJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.84-beta_1661170165366_0.07704786357129811"},"_hasShrinkwrap":false},"8.1.85":{"name":"meetup-web-components","version":"8.1.85","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"83238a8c475aa2e6bc453752d56bf880e512c95f","_id":"meetup-web-components@8.1.85","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-u/E8Z+F0e18juQ27DJ+yVtK5gYKkcQyYZzaOyDnblnIj92sqpDgoU0SEOI20vqtH64kNzh/xRKHUUHgLW3mNpA==","shasum":"db34fe04ec751bd1f5bc72cb14f7bb6261a59b7f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.85.tgz","fileCount":628,"unpackedSize":3160228,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1srB39ntCHht7Q5ZpjNpuxS0G2z5B7VYIRAfPti2r+AiArHRleI9CBAmAbEog7jx44sO9UXN2UoSbEswRVnF9HqA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjA3aHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq80g//X/4l0ppJ9f04U0Na5yTulV+pFnQlf+leEhC789jaxfw+MCjQ\r\nMSzVdtuh74xrkNbxmTdcjMkWKgz/n3AW5oJJA1IbDdl3FxLn629dr3KFBuBm\r\nxioiN0obXq/aDtiqYMnnn3aUHaJ4nzAweF0E6PzV5LQvEGwrE+fnND54lZs2\r\nwwEm0kXRU5yVEy0ESr32ODf9VUm3Mc3iM8fsAsCWlZrys19ORVsVcAPCRuNJ\r\nefcL1ggRmHoVhVeNJHl9HxISE+nck4J3VAZcmgdPSoUZ5//wkSOTSPPvvPPl\r\nOcbOt/Nw9hODUfDWcs9hJzT2Lm+MDJa4D6iHTB+7aSX2hZW9tuIuvpoqCKNg\r\nLU5qOFp4Su+YqNURhwrHl9cIaA/uixkBlzDGK43nFQJhQVVUr0OKCbMIumc0\r\n9EcmhLZtHQMNQyF1cWuiomnBMLPHw2Xmaf7Ly48mEImU/TZH3/IEFPui56j5\r\nakJaoluTGAQGwkKfixOD8W4kOx1rxOZkiH/lniBRKqPpVs+EFa8BeN2CYEZ4\r\nzyhmX6nj4XGJET9mhZJPO+FGZkuXl4jrVQ7KSIl4JCEq0SoZQPdjavYuCens\r\nYopVhVzEQ9qMlGvSFT+ZedEsunu1vl0YxxmiKjQSL00fsPDVKyXQpDtExkHe\r\nYmVE1GYRcww/W2X+GPCRMkyc7pAw5hoRx+8=\r\n=/b1N\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.85_1661171335487_0.4981503516289558"},"_hasShrinkwrap":false},"8.1.86-beta":{"name":"meetup-web-components","version":"8.1.86-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d9c8d274f69a82f142f43c83f25d58f77c005f20","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.86-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-OT0ZQPtonEcI5vHZ1rq+Q5puf4obW4XhIgiFbjwaOg7yJvB5JDU4gEA4pGttmOyT4mNLtzTJnBeDvIYECXhlgg==","shasum":"83457e9f072f265a3615b4293eebaddcc1add6f6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.86-beta.tgz","fileCount":628,"unpackedSize":3160775,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDHK8RAeC2ISRY5Z5Ejh6Aq0kv5YgzxEwySLpJUGaQfgAiA10j8pf3tyJj8j1ah2MqhjagYv9wPMsKYVQlMLQEhxWw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBIuIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmor7w/+K+3F2QJkaMOYjqQb4UMSGPOkvhVfYwCuKYBAsP/LpcA++M6M\r\nXzRKeeg7teRkgcK5p1YPfUuIGs9Dn/xYTIi7yRooZiA2B3mJV+tjTJJ5sSDb\r\nYt2NHgbR8QHRsnCYdyZKaQtalIJFOW1WMQpbjVUCYcxejyeiPXKWuU7xZJpI\r\nMrrlk4eQje1QET70LvKZ4VdGqeMiMlHlSTAEs8WnMSvYPA5jTpf+OvMDb+En\r\nruScoQwmlYscrjDGxbniDYgDsOVMQ5aboEYmNay8quEAyYPi9ZqoXmSWyDZf\r\nUGZ4V8zaoXxO5BF3OjRoWe3YiyjDpV7zKeImIyf5NxyYKPCymWABvA0h90t0\r\no4gyLYAtlxfdN0vLMpzpeurYL6kQbZviAkSBeet85WsvaF+mPBN/kF3ee8xd\r\n8Ms+uWIG2LtPsww2FPY4nNBlyjNvkgjNBpFxOSiXN5R2ecy1EU57zemJfDsd\r\n7qzKRFxel7IHYd3ZoAOjL0jnpaX7K0KAy8sir2LKVXqEV82mJAH5+7dYN03G\r\nNX5SvP4Gp3aZTkOclGVdLxjun18NnwPDQonL1eYTAvj9KLzjC2Dp41l5xWfE\r\n16DWZjuog7bz3cTwqy4PINh8SqEWLClyLOFhaYc/6jc8GyswXbaFiE46+mV1\r\nYIF2tc++6lgEE4aSjIGsTYr//fhsR4jEV5s=\r\n=xsAx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.86-beta_1661242248035_0.2391683737120498"},"_hasShrinkwrap":false},"8.1.87":{"name":"meetup-web-components","version":"8.1.87","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ff07c29da5457d18f4ac3d81e26761c49c48b031","_id":"meetup-web-components@8.1.87","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-LZLozF8czMs24Upm6p+uby5PZBmvq0uOpY6nRUI9PXi5dd21LswE4SnWrdjVaPx0TQASH52jbq+cqIDcKHw1bg==","shasum":"3f06731c83a1bcf4fd791994bc20d61f8088485a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.87.tgz","fileCount":628,"unpackedSize":3160770,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvo2LFNLDQLLN4yfACsdV99ibIMFy7gsur73fXn1rGpAiEA+BB1olXTMVqGE77pT5LJIxFf0tDzALZRVCRhLqQe+P4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBJOcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoMPA//WiU6n3KlLsX99m9yxtR2nem2/Ow9MghD1+uZzDfsbZ32uuy1\r\nWZFlSD4OupYUgYrGfhJ8p9NyS3QPtWspOLnm9vgD+loim3gji1VyxYia8tVB\r\n8s2MjGAtPMhHhT7zOKK7zXp1KQPe9yHx4s8Lb1BHSqDZUTFtGvIgJiyqYrfh\r\nSDvm6vFL/GDJNyd7zEzUKehqkbJZSoNsA+EbR0hTsO4Gn9uFNkiYnpYts8FS\r\nG+QPxEkGy2czHFufVwvZfMuEmvt3SzmA+0tQ2m92Es3FGN7AftGorepNJKqa\r\nERNuU0Y6B3WRoDwIRgdJbec4uYzzbhHCmOIOcydFFhyV95QRy+G12ilqj+zo\r\nMmkDuvFr4slW0umZMUdhbCot+lIkwk4AYFG01bV1Gy0C3tEYzvswI/ph3H5n\r\nczh0Mnqqf4vdvEyOJvYPIa9THe2VNh1SW3GaR943jxUIQasl7/zhiiCzrVcL\r\nAPtxXQ1dsvjLFLh04VyBJO1Bu1VRAeRIgw3r5WGIdEOWxD5PZozFEcWAjKMJ\r\nJZbmyctctxKLUh/L0kpMBQxjR7FkDlAHEK4FoIjleT5SCHL+LcQlf+prKDMy\r\ncsQsWQ/8HbUkev+OkF+xGx4dNQ3HSPezGLgdtCYfBO9dDta581kKOpHNvNsl\r\nSxHfPkzc5uB0micqFkZRgHyA4NJJ6BCaDtY=\r\n=w+AG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.87_1661244315664_0.00953373074761199"},"_hasShrinkwrap":false},"8.1.88-beta":{"name":"meetup-web-components","version":"8.1.88-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"80581a6a4a6d243e7281e0139e49881ac3087fb0","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.88-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-w0/tD5m5Na097S7O7voE9bkjUkmKzXRnFTCBS7vFejmGrGauq6T71TKyzHnZNoH5Ka9b4IKO6+5+mKLssCH22w==","shasum":"97843cd98840d8b9d55a882ffe54ee130a467621","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.88-beta.tgz","fileCount":628,"unpackedSize":3160911,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9+4zjkrFOJch3DEy5CdYcfoy3tu7lwRSF0jT1zv1b4wIgMinJacw/jDaRjX/J05gUc7dhyGUw4d5mzfAr9E84Vvc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBKqHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrZQA//QWZJ6NWEl7o6qNAvku/XYovaTvpsNj1aKXGUwcwUkPaa7qQ6\r\npIRuANe32kMZ6HJmrXMfDUDezAR/ij+T8Wnpzih6lm/fd5Bb6xZ42RlnY5b4\r\n9mGPacyFrx1LOhcgkt0RSTvulBHTjhN48rFDPRFApcN+9G5GFIZStl9kEfpw\r\n94iWkyCUWwhDH+/9t5zJe5OFBJru1C3aHcACkL1qpzsInMk+KxovUfbrr5sQ\r\nkeJOwdUSm8/tCurMCKHiU9uhtaSTLCM80gSi1QRsmy4Zs34dSsj79AoPGELV\r\nHPsA3pNaifEFLc9TcT3ZzR0pS+nrWD0SCIB+ThkedA3CTceu8jjsd7XqSyJu\r\ntFzmYh5lA7BPGjDiaA66gv19GqCwAzEY8OuXEKpas/nYQ3Ey53VDEk3bh2Th\r\n7nEUGC+SzTW5M2XZRxPgb1TdxGo5nrWglWwTUMrGlTpsuwsZqwzee+mV8LC/\r\nVzXM/3Lq5BCuuZwc9N4o780vnWnbS2ivw6+WLTUOpIaxC/Qbd1JImFoib8lU\r\ngnFyQAKHp8BPPE8UgPrwHxlPABshuan7ar16eW8k9dMYkLk3yw45PfcpMCiB\r\nvZGf8rTzeX5gkEgfyxiC05ne+4FxboP0aCg4Scd42Ll3lF9znwxNXCEsu8sM\r\ni3cXZ+LGFPv3yAhoMABk5JIHL9vOf8NnJx0=\r\n=tUaA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.88-beta_1661250183236_0.07994606417472871"},"_hasShrinkwrap":false},"8.1.89":{"name":"meetup-web-components","version":"8.1.89","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7fcb926cfe6e5ff823ffb666301ef74d68d1ba24","_id":"meetup-web-components@8.1.89","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mnqZ6ws8mzZQWAzNhTcz7F536tt0ycuf+AFbenxgeMW6EDcOXTY0+LVtl26mmBxSJ1DIU+AzkbAC7nCoVDvHYw==","shasum":"27b683f890c9fa784fd8b35fb703cd0002b876d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.89.tgz","fileCount":628,"unpackedSize":3160906,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPpQE0p1TeYMFChcjbgGLd0bz0bDY2/snCu3xDmA7iMAiBy2/ZKp6HRGWBg7K/2MRiixajGfO655gLG5ER+I+akQA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBLdBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlFg//QKAiTZXuprKLndBUNo6xFLdlWJTZEP/9o6HJIb7cegjVUlRC\r\nneOoyPVzsiz8f7xLWFF5Y1hNG1CNx1BiaxoEvfDrpQuIyt/jqOvdL9tu5Lut\r\nz8LT87XaNHjHlXcARMSeLElmjbYRsf/f+qULfYGv0+ICRitXUfmFMzkFbnRW\r\nbB5jnVGZwsYplpn4h5U7nYe792ZLvptSVU/KH/CciWRV9MEjw6bbNdMCvmRH\r\nSBURSZy4CMl/+fXhCDd0mQcS25xDwrjLaOmwffX1rFhxvwLpgeet0ICzIz2N\r\nbZ1tshv1VhdAv1O5OPe4LQSGef4ihj4NTRFem4JTAGhjSB9maQltiVENKrmB\r\nomyiZFrf+7YprErzaoi5+mMj2dwbyuRHjlwm+pBSjELstfzUb9jN2j7M9vHz\r\nzGqyySyP2n/wzSpHfZW0eI/Pe0XyLALYG6aYEMfHvMC/oFCuamgPmzLtef8X\r\nCYd1W9MYEWzhxUpyWoHH50D5X/i5PzjquiwE2qzxZ3zjfj6cB3GRXXJwqJ91\r\ns/QJmJ6dJ2wvKtQkGQ2Cu1wdVRhaU7NxfedHizlQeudbtLOgrwuF1HfvDLTJ\r\nP+ycNY1O83ckCPcE23EfoeD0rYKfnHdjrxni0u9/txQI/u42ZDFE7k6WShME\r\nMNlDetw4Y4lwDwDfvojb0MpQ7AC7hMn9yNc=\r\n=Hovw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.89_1661253441334_0.032365225894173344"},"_hasShrinkwrap":false},"8.1.90-beta":{"name":"meetup-web-components","version":"8.1.90-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9b0df1356402e68da16ea8442550423015545242","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.90-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-VGOqxh4qRzzv2oIquuoE+ghRv3ygEJ89kB5w+iBdHz0sHSOWBgg1OC+IdqSRQZoaJq6RPo6yG3LQYQxPBCgGXQ==","shasum":"b295ad1e2b09cf440d9cc3d6daf181551bf45d4f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.90-beta.tgz","fileCount":628,"unpackedSize":3162662,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDGwDAhI9JwANuax18Q4kvwQtRZW1PjW0GCjOc21yZjlAiEAwpeKaYsydvhvk9I0iVOE+mWEsChcw4hZl755S1t/yiI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBgcFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr4PQ/+KN4bCK2Iq9R6F3AOD4ugrtH3gdqR17fwCuw7eCa4KyEZ5wvW\r\nZYEt4InEiQbmcetqS+UxCGrx1oLQ5PFjwSgPBY+kdbbZlZ7f6jaa2uQpslHt\r\nN1D7M46iNtV1IP/iC1x7fGqwVa2LVWME30BxOnT0HFwaRW3YSA5HpAIGZNmV\r\n1UeiqimZ+zlvckPJUksVH7z1YMSneXLMAzQNZlc1HfqdcR1PVX4M6TeVPsAR\r\nmhTWBKLmWXwqi3wVCcFN8kFHzeGAiPx/YnIBQwrxwe1U8siwePkUwbW6davx\r\nfzK3wPAsaM4LXsgsWdQ1Pg9WJf/UqJgofiqJNdW8Q4tlb5ACo7MCCil3mYpJ\r\nVmXrFteKZ1m0MFHiGXe2wmDr5NSSSnHHvW2DL3nY2Fa7fYdKg6rh0DExTyvf\r\nuHB0/tkf9p3UOl8/tYah17q+vlrHRgdDqstgG2xURXyxIeAfuCdS257xXqTg\r\nkcW/0Dr1y02/JaTz3UtIMahV7G2jmSFaH5Uj9khHifa3VT/y8cXRq0V6lwrf\r\nh8vvRM+pEjRDYK2pXvvljN5l9NvTaPwbxowMhM39hr3Gkei1ppJIujGsEs3K\r\nEvub/cmn8WcnczmyxHGh1sZ6lyEAI2Lqb8nGbMlb33phb24Big5rQ62Dgb6w\r\ny/hIx9ePXMNwumTQ5PAI2eGbYAzV6Pxnb+4=\r\n=PsBX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.90-beta_1661339396699_0.4970309169656315"},"_hasShrinkwrap":false},"8.1.91":{"name":"meetup-web-components","version":"8.1.91","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b517717ca8f9cd6f2ac4485ba1d1de07697da0bf","_id":"meetup-web-components@8.1.91","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-IWuHoYLAI5NtTy5XE1kArLs0ODzwCxH9rIwbk01qN2qhmXlZCz3dBiIB+9ul/XjxyttvwpTy7Em1phQQuYg4lw==","shasum":"eb967d1ffb2df77945b299f522b1a6ee9d011835","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.91.tgz","fileCount":628,"unpackedSize":3162657,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY9Yb5aRKf1oZjoEqNRB2owLfrivPkHkJu4qbwUJCp+wIgV+38BmU0mh6YrCe5D7LipS2LjDJqZj4c7/Dt8Z58ivQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBh28ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpJCg/8CpX+a7S+c8EhV5tF0+qFu6hidUQNyjVwvOYKBqHT6/35i3cr\r\nYn6zV6hIh3ZXPAmyLgjbJf69sCtB6vvgLYKk8QCQej28gSQ/ODos4rSi9XcG\r\n465iOqzTNxS5vK5Hxfr8IqIZ+qnekiqWCeJYSIFJynpjIgRcJ242Q8/PAP2d\r\n9wFu6aj/iUJ7OnNnF8m4zk7/xnl1mb0dqGtDwzPWoPzpgaOjCD6N0JY4HETr\r\nD3IRffPdcDjJ9Yf+cp3iO01SaKUXUY8LItKnLVLeFTGve+wned+9Pstbgk6k\r\n2bVNYQHDgN3fXT159MGYSLa2tzDxrO4zcF98d/C6fevzSNVy2tX8hQmSsptC\r\niomhS1NKq4meDPoRpqa4EfzU/WPoQq7it654Bake9KNtgVlVayjqabAg9w0s\r\nmzndJQ29l99RA71hSIo1Mb+XqDfJOSjjAtyDPFI4+GXSFgIbS0LhnXHXsr1G\r\n1IpD2v4NTK0WdKPKwle1QqgXdQerUvyZsFYtaBW5b2kB/Z7+z4zZR3S32q63\r\nAvVDzyB5vhNMXTlAwdfk8s+Qhq9Wc1NP/2oOPy1XSn+3Lj134B2UK4PX7KQq\r\n7TJ0Bo6I7/x8WdwF2wEpo3+1VvypIzbVgnJyC4YQuxPVUB2BWHF9wRM4Jq1R\r\nUiycfTWoDAj+0JpHHEArQ5MvTdYREjNxhPo=\r\n=29Yv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.91_1661345212385_0.14513517607908155"},"_hasShrinkwrap":false},"8.1.92-beta":{"name":"meetup-web-components","version":"8.1.92-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0eb07766dc8648f27db596059e84ddf2206e0fb5","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.92-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ZJYn2PCHbJb1sBVg/h4PtIOqgqJ6ekMQFGuncSkY3+PV0kKe/G6+oqTqy25k4l5ELx1belEsN/Pg7+0/B1E8Kw==","shasum":"24432c417844dfbeee7f366bcdb059d21edb9b9c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.92-beta.tgz","fileCount":628,"unpackedSize":3160928,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIKmunteJLh30ZWjSq2+n5fdjv8hBiqKgoXJ83ju0uPgIhAMfHMfpdS15edLz3iIFCXdVcQ+t8aNUO4EPLlDZ8Yo2b"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGcKsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpy7w//VkAda7xFEDJq5hcAEvRnWuzJn2x8QbY9qGo4yDLWQrTX2CFf\r\nePHseTbXtW9NZt4rKtTQdFWYUnf/J6xtku+NW/cmmVHMbXNjPH0BgrOlx28W\r\nVkT9MaxpV0+w/WCzLUFPukelAUBKnFXsrsZqR3rbpprB044RPmOuEkUKU3o8\r\niSaDhRBdbqEMYUoUw66SfCDkWJOe4IDK+ZJ29wp4hUVhMw8s6MPMkSDpCViW\r\nJuXuFzwaPLdvLwPtBqEhmrVCdrBU5cNUtVtywSwQKL39glTG5zMFH+BK7p6B\r\nVSpiwCNqof1PJhSM/uNcAvTJt4jzhU+hGINyfMzqiY2Tgx2zRh129BgWdx5u\r\nqujH26TiQJ66tGj1CRZdO8xzv+J9sd4Bwlw2SM9UCclBDao4vW5dux9xCUmC\r\nEQ3hIE/3PVioNLtnD0pQEi/OkYqxNb0TgQLdxZQwNvuAqxB8CwAalmWOk/Tc\r\nM8jJU59dg/z0zrn2cU1T68BEzSPO3F0+9+i06PpnQCHTHqfhSFdlpv5kBscI\r\nCpITpCp/kma9uuqopfVG8bZytxF1VBv7RYqIRZvQeQrcRLyFN9ZkczL/dPgH\r\neg7IqEyJRA1u79ytl+MmWb1TsqZTh1V5sk/3wCwsyRX5Jo3QeUZxfN3RnUfd\r\neu4+OTQdHcY4VeosC7WTIzx46+eT3VXAazc=\r\n=LNwl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.92-beta_1662632619834_0.6668319090081263"},"_hasShrinkwrap":false},"8.1.93":{"name":"meetup-web-components","version":"8.1.93","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2f920878ddb49e67838665c0bd6e14909b1e9346","_id":"meetup-web-components@8.1.93","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-APWtRcZvp2grhU5yvrxD96JcoBEIYQNA1yF7WIr7D4RDkMpqzGT2H3M5tT6cNZ/cxw9fvgK7vfwYZbgFQx9kag==","shasum":"0c6dc162f1c4f6e7b101cf85296df63127e54698","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.93.tgz","fileCount":628,"unpackedSize":3160923,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu3JwvCii+o6K0uWkVQ6NvMfJFlPtHgpfnU/HgPB9PhAIgKr1IOyebCAi2sYLjIMqXlV3Q58EariIX1PXS9SFQxqU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjICo7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLsRAAm+hDcST7wHp8NCj2RLhU3oKJCRP96FI4r8Id8aV15vyH5cLQ\r\nYalojM2frvzKiHi+iuNAOWsi+qTbwnSPJuS8lu+83w8OsAKQPRdR3hJzC/1/\r\niwwLEynaMrKUVR8e7Pf3EAQAiVXoERQ6d/sHt5XDGn15KdKWfkNio3h+deta\r\nen+EvGCi0x7cnYRjyMRdkNjanmrvT8qTNIqJGXm9AOAnrGfzAJimaYoiOlH9\r\nbdIZ2Xdrlg6X3cp7jfkupJ7oHNCPAtzUHlNZThD1pK/WehdKN1RvAxXKkbUX\r\nTIuhQvgdkFbQasOr4fhRaEiBWjfJOrgWorSeHGivSOYa1w/8tZttk6C1dwmN\r\n80IHG6WpEnwlMcutPfuDF4vDQ3tLmm//GrMGnxLZ1gIsR909BaIV2j+ccY8d\r\nFpM9efsPV1T2vk6lZl93Z1ucvKQ/hE5880uOuejPrTFl99GbOufctbScO+/J\r\nAdZf9LlcyaCDZWXtUHGrQsW2b6zNMmEXSHmBL5QQ1QLErEswPx8gaPsX5Tmc\r\nkF08zhu1KUga5DVI7MYBmx6EjOpPXodNB+RvoIAKGyJas8ZoO3w9moidNXJn\r\nFkf28mMahfZVEonkX6lb6Ck6q7COKrqX/I/mJx92seFTXViVCecfbIUf1a6/\r\n1Px+TP5nmQMMPkuyvL/lsTtlUfCjeEMIq6M=\r\n=86fQ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.93_1663052347684_0.37592151302409804"},"_hasShrinkwrap":false},"8.1.94-beta":{"name":"meetup-web-components","version":"8.1.94-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9b90b3b47863870c38a2efbcc32a354e89ba9023","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.94-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9zQpTBWzm9whKMU+3V3m8SeO/p/3Mh7fT653LpMSYhMcgtpFhOXs1ysqHWtWyak3T986DaKipKG0VUp6fctzaw==","shasum":"66cd55b7a454455fe42f68eb5047081d7c11ef90","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.94-beta.tgz","fileCount":628,"unpackedSize":3161407,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkaUKoNz1pCRijx1jv3Q7xJ9/e+NTIXyHsxtMDTyxl5wIhANVZY2GriiCGHKNbhig9sV6r7WcSphZubvQhwLzXIGvY"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjIuNzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQHA//fW2FDor9Fe2JKvgI5O+qPnHdov08T0NeGJCEZ5XS6n3eP6ZS\r\na153Vk8mfwoG2C+umQfXPBvCSXZWSws3vbf3IyYijISp1Mbx9WolbU0Dtz+4\r\nJGQ6eRl5pmC4ODXLqE7YqbfV5e9Z0kMltKOkm4GFiGo23R3veEVGIWsbWM/j\r\nUn0vneirkBJnJ35muE3Y+7Fii3PE9k5y/jZEFb60Zp+Ax7Ec9IQd8KgJTYii\r\nmkhuEOUISESJcC3+NX+KrOXuTs3glieUjyd5nG9VZP4ZlvPJmfyWiRcYvQ2J\r\ntKegfVxxRjnT9Vq6Tbdo9U8KAM80D0mMsZlGxb7cex8vzaqWhpBcgWAmSgEi\r\nq3rH7cIXlnp8SbQ966HEi/whKWwvNitk1KBybDQJ6yOFRZEE3iABsGkh3A1R\r\nGKgeo3T+pIJQKtr5FLs9lpVbRUlVBz2SZsjkBZgaVQHZSWR1XBE8hHQCh3la\r\npZEHHscbuiGU5iQtWFB1w8ZagpxpFFbzEx0NJM4sPqV/Fr3dRurCQcFU1PND\r\nLxqeGPiW2s27i9yIWjf/34Q1hVuTB5IXah/ANen9lUIg6Ei9BZ6NuUOyPbsb\r\n6REFFlK4WZtjBSHzkKTZz6+inYlVLSLL0kbnRSwkWuF7WX+w6T0gk2CMH5z5\r\nIBe/0hTqTk3xiCKqo2erMxGeNTcq286G05U=\r\n=wFdl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.94-beta_1663230834970_0.9814320730228583"},"_hasShrinkwrap":false},"8.1.95":{"name":"meetup-web-components","version":"8.1.95","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a7794f1ab2a37891635c159b39852f5bceb72e40","_id":"meetup-web-components@8.1.95","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-V5pZlNwKQ78ZQiazLceOK35AY9fT2GaRqgdgU6o9HTSQj+IJtfaL3Cpkn8oEp5ct4maN9zbTl02/sIbgmnDYVQ==","shasum":"b3990d79c3192452ad25154ced57e615643e120d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.95.tgz","fileCount":628,"unpackedSize":3161402,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCb3f0zn7fx3fv2aupbmOkcj9Bpa0AOBT4EiIQPa2oqJwIgF+SrBIxbkK3PB3cUWj2sTGBLV+7awt+cqT71Pnnyet4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjIuZ0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqSohAAi4HPl7nsjeOF47c8E3lZS/nqJAlsMqiw+0bzcMrFFiH16aAA\r\nDCDGsg7bQcAACmLNFbvDPQRrFDkwABmMZ64Sz4M/yzAGFo0S4uk6CQ0N8qJg\r\nB3yLksghcg6MIj1Zhxpd+G8znqcrJJZPFXsCA+JClw2LIEQKLITZT8NW3uQB\r\nNSfUvpuefMGJiw2svG870W1XQwMAuCz6tnC73HkZUG9VWYcE9tIo9Fyiwrlj\r\nFnh5g0UvOzWO6dkL05sTsF9zRCInYrYUyWJlwM9tC2pT3ma3SomXdjZQa/IN\r\n7JoXc6tvR+S4hcneykWXVpXiI+jmD6wdc3tUOp4afeUJ3/kuNipFCPOB4JKE\r\n+XvSfuCKq7LPeQ6Y1pK4T6Hf36mLp6T8r46srxTJbWNGHtawhSgcMjczpnxp\r\nEVkBubHPDCfMNMBSNLBRrByBBjAVy+IGuhGya+h5+bbjpO+7e2WRU92vUd8H\r\nGYyIzGu5K5xk/PEHi4ujMZ4HZRSEwgRiEf4RLlnJKDHjnpYWtXQRZtBmhEHE\r\nQ2vwKetDW27sIVAMJedXu/uCpiMy7nS7bbry8L5Hkd7oUOwiEW45DmP2hGKr\r\nahhJ1pZSy4RHhZOWPtTuj9UwdKnE1DgBJMV9LmKRxgW2JKFIn0T7hb3w4mkh\r\n2F4UubR2uFTzEFR2x7+TFh4AkDmII3fvrp4=\r\n=1cv1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.95_1663231603837_0.8960406395782827"},"_hasShrinkwrap":false},"8.1.98-beta":{"name":"meetup-web-components","version":"8.1.98-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a05daf5721ecfee57aa826d0a044ac8b93399280","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.98-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-lQMAxqKgXzW8sBy5FIerRwr0gvpqS58m1AHg2d359SKLWWdLnoMoNz8zxh/BZe1PtSffLuO7rHJFT7PLqPROrg==","shasum":"8d565f422ef19116029dcd5943c6299c7fe183ef","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.98-beta.tgz","fileCount":631,"unpackedSize":3171219,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCydtxjy4NaogifI3Fwiq2P2uw72Z0JRSlVId9tf8ZQBgIhAPyolKpCgA+1th+35Fmlee6rtJ8nbuugD8bXrCVFwbvj"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkM8mACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrrTQ//QM8PC+9GxNycKAqb/Fw8V1g+hIPYblsuZRZEEtutlVGnCJeN\r\nEfHdnrULTkkuEp7Fh5p1Uu5ij5u5YSa4EPN8Yc1l7PJBmxiHFP8AeidueHNp\r\n8r2iFFblAyqzDl0Bmb7sPL1N0pDDR65DFmpzCXwoPsVkxu+lpQBLkrgGX6+F\r\nqlbuSEHCSNTPFaGyTKxu6C8B/vi1fAzAMx5pO7UG0uFvpZnFVaZ126Lb0B6l\r\nDQeyqZjYfQKqDQXYKYrAHobG4S1nec7nfcFRfRz9lDTJd9LgS4GouGV8eOCx\r\nov3TCXV2jRl1Gc1lDSsArWXft3qEI8ZAS2ecsZKXb3mO+QOP5k1rXzCsDShd\r\nDVXT4WAAT4MM4Fg3lOkVinEUx35iBL2LFHPVWQGacpk5C9xSWwYsENuTYCZ+\r\nmbwdUBO1QMwluX/9IM9wnc2y6GAkkK7/fCPolYpmgidJ6zZ8CbvpTehf/Fyn\r\nmh+GNQOj2s7VSXhiCG7iu6bPW1iOyaDK2gRwE5QT4nt7aCC/U72GD2WTYvb/\r\nlknFs+H8dxpONGUovvG7j9Rz7nXUaMnmVrBlRphKLeko2pxw5/A8QXLLUtPE\r\n+bfIGHoCIIpbBV/GCiPjXMsktDKPnZ2H1p+EvyaPvVhQxxBewY9eNg9JoeNZ\r\nlYD8BNIufgs4OLDEaJH+pUbOs6h8rHrEZv4=\r\n=WM/w\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.98-beta_1670434598106_0.8640997390499059"},"_hasShrinkwrap":false},"8.1.99":{"name":"meetup-web-components","version":"8.1.99","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b63246eeb465624c0417be0531ea8a07b02b34b2","_id":"meetup-web-components@8.1.99","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ny6H4rypr6aQsTxvFHVpTvJxFeBP5zvNQeOPpT5RzsHnaTzXzLVx3CMXNVVcOIxpvEOjAvI3A/Ca3vZrcqqE5A==","shasum":"ef48a61d800848a79cd72249a1d1cce7a1a242d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.99.tgz","fileCount":631,"unpackedSize":3171214,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICMxISFxH/x3ce2Y8bApRpJWLWKi8HQNg6pkhM63h9TbAiEA3bUVtD5gGKqhDbnwhnbRtn2YyRhSy5MZoL3G14StilA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkNTtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq8mA/+O4RkKLOZJxOZwIsITtiNeoTzEXQnAIpvtd6Ge9YLjF/UbxbP\r\nfETO9ZSneq9Yy269pf7r2ENKd6tWNSNpniO1HM2usaBGniGt9itfi7ZlrlBI\r\nEVto0xAf3p877Aw4XmGQh2Bm0xWss+1KpQJhP48+md4ZqheE488IENtIPovD\r\nUk6rdtdNzqk8FBShZVl66tGwNYmnVK0097Q3BlpL2Sd7bdyWw5a9L4m22utb\r\nr9sUh2gPfdEiIioe5K0rWJ9/zJdK2+U9ej3MLRDQs5sqTTgN04obQ+GX8FAE\r\nYGnmKlifaqgCFsBHo9fNc3ynbaKR6GGvSOV3VdYRJGIlOnXtYDt8LkIQj4Ai\r\ny66WmzrdEt9kuMftVcx9qHBrzYQ4L/fGgqje/MKOCCbeI04krG/boo2E/WsP\r\nytxkfBhIeBoX14nKZNvebM4qxWlTlICGkojg8grnissgqgiMvM8Rypop3yeh\r\nwln9LdsZtoUpV11V9oE7+18V6KqXgMKpqhWm2ovpgR19AiQlgGGQRlq/ry+X\r\noq1jC2JMOO6bKQap78QKWyodoHWOpnYmvS+5dp+Hc2BKrwiEWLOpAD+dhAOE\r\ncEsQuH8OP9kQksGE+J/LhcLR2ZyTwibFRHxmriKIpb4oS0a3Vn2ekAhCo8dD\r\nEpWeFkV6jljAvr7LLW/bIWq8o0241N3HS+8=\r\n=C0Qv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.99_1670436076906_0.7748468268811965"},"_hasShrinkwrap":false},"8.1.101-beta":{"name":"meetup-web-components","version":"8.1.101-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f87f518f0b67df6107a3ce67e72b3c02a65257c2","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/master/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `master`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `master` and PR merges to master will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.101-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-PXMdYiiCFR0af2ye5AX1rH784fEwKV6IAwkRp89rCodKWQTkQsPXTHUtDCzzEG40Hf96Jd3wF92GzKKgZbOPBw==","shasum":"b152def8bbc43c18312963ddeab76db37bc6e130","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.101-beta.tgz","fileCount":631,"unpackedSize":3173663,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEPOqvBTlVnb+Tx/8qK83GYbQmn+dxPpHwvsvtbRIa9HAiA6LdiGMLoUCNZ4aJWzQcUp5mCopF+IMIoCm2Hvqn2jJg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrYlIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr4pw/+J7GHBhJN5E9Xk6XETnv/IUX8RxDaXIURoeyKfDYRd/9RgzCm\r\netLocS0LjJ90fTTcgQaLVxxhZxZbbeTFtA5Gr4C8264pBeDFBjkiInEh5r0U\r\njtCkSTuHLGPiu7q0pzpq0jgwzxFydil1ReFIYhuqqwnw2cQtbpqPf/x2JoGe\r\nrLrjKtvyu9d5sUo5wBp0Qg4+mPvYlK8PI7g6WebatpGEwoNe9wqhJwmmAFxY\r\nJ2UFKrMCep08782g6T4ZAo+KKP5m1kzNge9UyUoL3p5WqtTZ83LDuMf/cLV7\r\n1gnnwJe+Rb/1GNg7K5iy9NvY0UnJicuCY+1i3niNjvSZ/YfU+stScOfG6dzL\r\ncZ2sLgqic17Isi3opCtNRsOCUYxngFid4fw5aU+AkpOWSy5C0BGRBYINvUGg\r\n86qImRl1oMJngt9eEkY+Wz6PWz6dhPZy3c5IB6ueCdWWylUxZI9cOM7wl/C9\r\n6L5bjR9DVd/feVQpzeIo7wMsk9cdvvXiMipMjgPxTLA1s+Hgc00TSB7Ed+Nr\r\nwy46SrhnWo0tE9AGoCe9WKLtUJhkFNAn8TcYXh05PeWceWdgvb5rnEKgjPKx\r\nED/M94wGfO8M39Lc4MfWNmgYfLbNjJhtWgqfuioF2agquz/9HtQFCQTC+z/T\r\nKxyk++te9eeU4prnKwpiyH0GliQve+VnqBc=\r\n=keRX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.101-beta_1672317256100_0.388665588759566"},"_hasShrinkwrap":false},"8.1.102":{"name":"meetup-web-components","version":"8.1.102","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e08323d36e47e719ca18869260231e0b37efda57","_id":"meetup-web-components@8.1.102","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-cJkKk+bIyS6qg/Z7rTy6LckqIfk6J/HqtMcNQAZGTB5M5bYg0XDzTBYN4JuJ7KxR4neLITYw9zS7NmmF53u26Q==","shasum":"1a2e096229f8ac66c366fa86c734c3f4681d378c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.102.tgz","fileCount":631,"unpackedSize":3173658,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDOR9J7pUW7dT3eZoosag0QCKNMsObAmPEaPLVs6zhzOAiAOVdfW3E6Uf6vicMzs6D4HniI8qYkBbvrq0rxXLrGYqA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrayIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmre6BAAi1ocMd1l+CnGDLGHjbNOe5WtsUUisZa6/3YWT29zYm7Umn62\r\n1iheEWnMI6s5B60+kiyerNbYnD0GRFHiiCRUc21gMmLeKTlPdCpwXrEqZ0iH\r\nGlm0lKC1Foyzb/lxqCeS33t6mzNpl52UbFwzbNvUsOanD3nt7ghAn46wWfEe\r\nfFx6HsiPEkygDYBuIPizJ/f/vvEJ6GX5uAi9UvsadVNtdJkCunvHw13bpM/W\r\n9D/xZU1w3hzNsmFCvmdQf+/KrZ2rj358mkHH1WqIHAyk4+7HGiie6FEdq/bl\r\nAIDCMsy6KW8Dvh7O73mp64/fe2Jyl3Nl3n6Sw8WzFy6Wkm5ivaIlSLpKsmUn\r\nfaB1cUrp8zfZJZI6RW6QKv8uoZu2gmZhQX0sDT/bZBHZMNWtcF1mTI/KqrYh\r\nUKY/rMgCpSRKrCeHngUrydxSnwq4JSm/QjW3yCzAq0a6BnoKON9ExBfuv8Im\r\naufrpyaWfbmmGHy2Q5kjwaPDWwdfisInEpH4tVr6JxZyUbmG7w+E63RVeFOy\r\nfCcOA7YiRxpbW52IKv/i3CtYDxCsAUMJbYTq3G4d+iNlAMoplDj1BOV66iph\r\n2TJwYkKRQA06bIuLO+Tp0OMN0goEgiU1G2PGTKfbG/ritb2fLcKDq4rw+hgJ\r\nhOcEFqA9XGLV3tTTCyrxgZkVpcFY7e3bHO0=\r\n=bOlz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.102_1672326280255_0.1885064439543398"},"_hasShrinkwrap":false},"8.1.104-beta":{"name":"meetup-web-components","version":"8.1.104-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"64d68e87e905914ab397d7f7a90316a55c8056ee","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.104-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-tRceoxCaeNq7M50XNicTdlXnyCrBgtu8sP89sc/zJklEdfkzHhONOEpYKzh47ksFLuQNhz4inGByloI12dKlhQ==","shasum":"3cd5280801f29ac3fef9b159e893f2cf3684123b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.104-beta.tgz","fileCount":631,"unpackedSize":3175438,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPSbV/YtcKjvCsmV25CnvKDQi3tbShY+IOOQ2jzuQLHgIgIKgwxNDVS0pYODqefKVzAF97fDEiv4v7f/5H8825zFk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvvRuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqmIw/9FEDvq89HtLE+krvFqv/gXzLZVccGM7f1/k/vXh1MKORLIhNP\r\nHCqzVhcNkuNlPmqugX9GsXoLooPK2GRiUOroT2smluCDzc4OMbpL1XKVp+Jj\r\nNTqsGyIDT5keUUX6LBh69ETR1MEdOd+3Hm9jfn0qtCqfgEyY7WZK9Vq0jxqB\r\nMCbnZYiJadbrjVmYYxcr4zqBygETxgKxjuLWcQFHEdGAmAmGPsnDtYZIuJeq\r\nBa4kxntY9bMc8Vrs3vvKjkGnWnNp7VC+mAawYZQleYuajsH2Sy0JgT8AoDi3\r\nAQwiBHUvRAth2AeJTeDqWg86t4XoTmhiS9YBrxMExSRFvDD57EEDY42BPbRa\r\nH1NRFjfmIAcC97ZClfJgv1Em07rs+Qjn3+JVkvnI9uyWrc7IANVzJd64TFpF\r\n0sbMD7x4J+rNJ5tXuqILUYbK91is4gOdNMfZBB3LbMjT/3IkEIQfJE5IAcdH\r\nDgKs1eXvEs7557FY8mSsgM/RszveoqJyWULRuR42IQGOSyMc01+yywz3FgF/\r\nNHxLz1ElHSuSint2NKOtCfLMW9gePWOglhRSrjdhLOcuqCtvt27ZnZSg7y2O\r\nsdb7f4LbgFgD3q3Gjs5OZKmo2jHcEQqcT1yLn3A2UnmR4RVQ3xgc5/Kc/4BL\r\ncDWavJAGWnOF3z4geTIX3+/7yJuMHiGWSJg=\r\n=Jof7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.104-beta_1673458798074_0.44048644402144"},"_hasShrinkwrap":false},"8.1.105":{"name":"meetup-web-components","version":"8.1.105","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2c2b20b4f77593d653f3e95ae654f06d67e35f8e","_id":"meetup-web-components@8.1.105","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-q3Vtu/Oo7OfKIt7ljuO+E1ZutwsX311Knn9kJkZMU8Y84sjRrO4mBbLfZp55+BS0DVIM8mvTHmT3wBJcKsVndQ==","shasum":"44d27086e4a5e030de76bd317f47beb5d05a006b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.105.tgz","fileCount":631,"unpackedSize":3175433,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk6qsK7xVVy7A+7bEHvwR26Sr4UWKeejrM1rDjFO1WrgIhAOTW+NVpr/7f5XBGBHCh52zY7dv1dXdgg+ZfN0jglEZy"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvwfLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoAUw//etJN9KSCVnl9Ffya8zZd0UHJ2dpZIHZqlBHMyEfCdte7V+HS\r\nQ/2b7wS6y1Huqw0IW0vdCrI0RUMIlEmol8uZTKW904OhSAFBy/K4hpLtxc+5\r\nW66k1eZGYRHF0AlJWzVHI0mMjpEbKZQMrOcsl/i6n+KByKuYsaaBfKdbNhsh\r\n1X9c7yQBNRwsJ5hLH3IYJBYWLi2K9kZ4M/Gkikl0fLrmFraPBPj+NTORLKzp\r\nDrmtDb2z0/GXHFWRI1Sa1F7YsII6EPzZu1STTiYc1SMTtM0hqYMccsM5wLzR\r\naKR0nHrzIKTxZVqV1AHPlp+YQ9qZhbZFYfZgg2xO+H1kbgE8dEYhoghPRTui\r\n1sNfz/c2v8jkf9sXVhG/lunmysKb79LK+EzCO7AlOtVUNneGqLEq6L9itYy+\r\nj/e1Jj+FvqS2gPU1aT1GomYvMh0lAZycKEEGrlyjb3oshD/9eY69euH9Xtwh\r\nR5Y5Khya335+spErFDjxPnHEp6lwDQyVNs2J0Ds6QXQ4mfgT5zbaxiqawZOM\r\n9cT59h+X4fYgg+dO7gutjUyJ2Ov6z3q0Z9y43gQ1F0bppf8JSnUB+KLRHQk0\r\nBKYY7KsoHXo2LgFS0yWCKYzAhnY3NTWz8DeAfgF/VbQ+u26MuO6sOIdSxixp\r\n70x5gjdLYFkJDPrjeutL/Na6Lfg5kaMYwxE=\r\n=Jr5B\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.105_1673463755049_0.15362910402207763"},"_hasShrinkwrap":false},"8.1.106-beta":{"name":"meetup-web-components","version":"8.1.106-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1f4ebb14de1231da61e380c40c66bd5092364a04","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.106-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9KTajMEkg45+6tUoDynS5Axrq1lvnUUj9s4ttHvwuyphtoLQyoSCO/WLop+uONM2nhpz3khLNYCexMnRLt0jyw==","shasum":"0d45abb30139c1aa5a67ab12db1231f02835c809","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.106-beta.tgz","fileCount":631,"unpackedSize":3175438,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDlEq8cr9HKtWo96mjv2N1tU0UpIX3cdn61E1fMByvo/AiA0dLlkw4QCVs1PhGumIrkXEJfMmjwIuxcjJewdeBkDaQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvyA3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpn+w/+IRXKSWD3rsqRS4aXXCkWz/kdmKL7m2BkQ6KWBUrK6hRTNx9e\r\n1byK0ax64UYw91Tz0Gx/AqsTgoEuDMLOBZ0+I2ecyrH8Tskp62WeuKp59B3P\r\nxIW/idbTIQkr8a2E30XCjThAwcKZr+g69uoCgEwtZVFTx47SJIAp+vItKOW+\r\nTfp2Dy03qIU9vyp+e66I1zcBJyk2hUDfQEUCzBJnMC7+rNFcPC2RyY31o77k\r\nfR7Tli5E0JZlCGDBlyewrbUSl9bE5JKhqhSgNKgO+av7zFjbm9S4J5mxmO3z\r\n3oKj0iSSGaz3lA7S+a5fsdP2V1VIvrILXT1waDg8oa1Aq9v1vbR68PdBgYwD\r\nVH1Lb5ybLTBccyI9G3ZIcUbKK7OX17SAWfAl01xbEQO5fPFvEGrPdZY5n00A\r\nzxAES7nhuqgvkb4+Ik/Ah/Bp5R05rcV+0lbjm1483k4YJkZMDs4mNNoaDAKd\r\n7KeK0RFvE5tYN/7VP4MP2SC8yLbzfIkme0tNj7f7gRX8YHXMAZyxoF/V/R0E\r\nn+ex5jQV72x+U3Q52SYMIaQUIk5P9NVlHRswtx6Xh/obpb77S8oaZ/JRBYCB\r\nCKa3w7Khk1Ei8v1PrPsk1LPM8KCBIZInlarAMuBPJFUGVBm8tdSS24k8XEhn\r\nb6xv65C4J7eOW+XmJHVFenwfr1ej3wfYV+4=\r\n=XaVZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.106-beta_1673470006763_0.7409864373485884"},"_hasShrinkwrap":false},"8.1.107":{"name":"meetup-web-components","version":"8.1.107","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"64cee300fc0a9dde4aa6e4bfc6b7918d4766d76b","_id":"meetup-web-components@8.1.107","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-FLoCZ2+gJZpb4F/pR/Or5x8zdwPbg1Lr4QNr3+o8B59eKbbn+mYvMNVDeQEzST94DbPn/S14XFsBML3sCGjeAQ==","shasum":"fb9093b8d2b4045eec9e21c5f0e11a54a662db00","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.107.tgz","fileCount":631,"unpackedSize":3175433,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzIFuhztje7KLwyvl3Bx9hNHZqdNp6BHJEF5zzYi05AgIgDLUyVOFJJUM0W48YnqSTlUQT1bWtxantx7j9748AlvQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvyD3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpakBAAmXkli/uuNkyQ3eliRDeX5FnPmdcV4Ur7UNOMobSqYZTDKS/p\r\nfjYylMAZbpoUFDARIn6lo72+yU0T3gQLFTQYoqrKv89KWcxaPZjlMhKtsq98\r\nFHn8slPIBMb4EaV3FDfbP/ObaJQ3H8ezrfQ6DmWKrCE4zpGmGMx/P6GqWTbN\r\nMgIH2YJVDXyv1JS36gXRSSojS0ed9L/VgljhcBam/JoKyfEIV+QdXMfsUFnI\r\ndd9RSZwNoFsAVeP6KG+3LGKgWUuTlkgced1WxbvmQtwXk/TdzXuvAwOoPUxk\r\nLNqE317BwDzNN/BdL7tTTuv3c3rnvNuKEl5tslBcxXi+WVzw+efHoFX+10JJ\r\nXEdMxAhrWfsJfhmAefOgugZWHsPTJGzOMP8WCPagSdiXOJoj/HYPcxONt7Yd\r\nEXqqOfNLKOVAFwlun2tokaoDH+FvoNjUpyHALe54jNDOdfdCWmllCNASc6sS\r\nfMfZq+xiK0DtyTrZqfzBvGS2rBSbPIIf9VVgo0Csfmr5TCtdLI3aI3RhEusE\r\nTD27W+PvRc0GUT0WOSNZuF/QGIsnofhzpdi9x/YpjG7cPVmmQ40Ipl1/oP0n\r\nGxIot9B9DcIAp8uBiyg8/nRa52V2jBANGv2REup4W5wO85bu4TyrnSqLSySl\r\na+xMtsghZ+hVzvGqlbSLOZ6iOzo4LYrxl8E=\r\n=fJWE\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.107_1673470199127_0.42217972902812595"},"_hasShrinkwrap":false},"8.1.108-beta":{"name":"meetup-web-components","version":"8.1.108-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f86df4b457a3645f6b88bcb243605e2afb4c3b38","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.108-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-h06qQoQlA7NG/GVtUAJUvsuq8OCv1Nvjxw3Q4i4RuNfq1r+YT3qN64hh8+3aAoenhoIsMFc8RQEyXCqYc34dYA==","shasum":"dd487beb8104f85a91c76601b662a3ddf40e49aa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.108-beta.tgz","fileCount":631,"unpackedSize":3176574,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDERKhAV++F8V95kae9OidnPJdgi6dfkXt36uSlIMPJ7QIhAJfTOfBatSSNhYUgHTZUFVk1DJZen8qb9EjIuuJ6746G"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjwNgPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJ7xAAgrPeJ9UNU7vmUSLQqx+ik97y7O4AWnnfcY7NINADNLfiE+WD\r\nEo0CtfB+kKxI3CmoBTXlqqWHjTfqGHc5rTEvMQaB3Zg4fmY1tC+oCt6n15hW\r\n7pYKLn5RA7pvSAuizo8jVT8dX/XvncYDsBOVrmTqy+DL3lPj0DmxnS0osbC2\r\nj3OIGfPBX+voB+wjY40byBBB9OrOTbUCV/7dkvf36S2IyriuGuLjS1YqpGdv\r\n4EwBtIqF8Bu5izIlFsbRCUBRykcbFfhQypilHb2VvdhFXsWoWxtEsAMLrTxM\r\nQK8Rs3+BDMls4WoecB50bd2K1xEMEKnfpoGVC1JEZ/zBK4cqFZDbuDjlL9L5\r\nq12bcnoBeHlowrhbs8veZfh+HI/PiQKlVHc5Rlir8RhKvzYZwy9sJE7jJwp0\r\n3NPYyYTM4LjyuxXK0bDHEDUVeASs4BvRu6+yhI967vDeBjTWmnKbWxOQKb+Q\r\nJDMb89gUSYZ+JVIHDSFklqqos1JEzMT0k4o+wOlruxGyO1vBXlvQShglydjO\r\n97Hp5cwqbhr7U66G06GO2+KV9t7y9XqBJcwWfZmb/4lTgkFNkSxqAXRPe/S5\r\nkQ0AIpEKCS2rEVk6vmPHi/ujwZOI0QY5yb/VkJmZqbVeXhKKHfpdLPC63fqv\r\nuH1p175cT1bYGKS0lBtm3Iknx/Z58iUSThQ=\r\n=VTsA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.108-beta_1673582607695_0.35948807686720463"},"_hasShrinkwrap":false},"8.1.109":{"name":"meetup-web-components","version":"8.1.109","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"78578293e776c258c6cccbe767f682aa1970f30c","_id":"meetup-web-components@8.1.109","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-lze3SjAVYFgK0lEbzHDK3T7jTBY1/oLasl9m9DSw1jdECElrjagwcIB72Ln/0EKJMRMEEJXHNpA6z6+BtTFrWQ==","shasum":"6cea673032394e0411ca01da943c4e22ab3b8a0c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.109.tgz","fileCount":631,"unpackedSize":3176569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDItXRyvZgwKyUnX8omi9A/cThgAvUaV2iPlBby5GCRRgIhALUazFDI/XAka/vgyJ+bP3lGzQlQos+fjisjQJYm7nuS"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjxrf4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrMORAAm28iCwf/9B2rrE5fasY/6uXPVRL/07KjEW/XjUj+F46n11+G\r\nvFtLpEGDnttpKDOOfkPOQk1Nk9oihIz7JXNzsyobua5CCdlbkv04NQSgJs58\r\nr9dz4MxbkKaNsT3K7mcVv1/EiWW6tT3qYmaWXOZsmdGnzox64DtDjudlHH7k\r\nxgE7ua3ipbN9uDCCRV5mqJ/YMGFupoHF6o4NUkJ4nsz+T1p/e6zhERAoj1xE\r\nwkBFIhSbPjhvCYKQmWZ0pahRLVgDZKF4QZQjfpECD8h6eaX1e0Fmzqm1653I\r\nX+HiqWfc/HR2yiLwg3otMd7LrRZnUTLRzLJalF+036AjeQgraE8QK8Xa2GTv\r\neH2YDg5ZyBdAdKa17s3gAAbmaSmAX44gnSDrB0YlbFO0Vq9txvF+vrWVepj7\r\n5ZcLXWoD3IfUYcLtOrfaUrh71dj4yuAjWJ26AHZMA+MoaPcoGvIdlhrzLCeR\r\n58jevRBHlflzJOqoESRvZMQh6d2/DH1CPliWM/eEkBaiSIA7kQEh3X47A73b\r\nEYtMKUMSSDTrxMAGFh06Hn4ZNbfaS7j0IUZFaJQgAgU/JBmurHRqtV8YndZ3\r\nqI+8TUWkrx+D41wpFiTX9ODLiVksUdfaz03qgPbVLNSeYd/8poBApcnKyZ/W\r\n4stIkzOuHCtowJQlCR+6qH+9eR7G+PsTbCA=\r\n=NO9U\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.109_1673967608494_0.03159996834309542"},"_hasShrinkwrap":false},"8.1.110-beta":{"name":"meetup-web-components","version":"8.1.110-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"489debb54505270e2d16d8f6d3e900b90d19c268","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.110-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-T5RZ/SgzDNHJlUMGLKZbsInipcZqr0JV8JFUq05JYf6sLrT8eJwssfwIbFOzIvoNbaF2Ld/znDATcHN0gj9OjA==","shasum":"65e8eab26a7980aaa1b390ed231e9133d5390ffe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.110-beta.tgz","fileCount":631,"unpackedSize":3177111,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1+TNj69JIVL4hIQ0SmV9MC+VD8GqillTpPPDYFNaz7AiAyGr8/C7Dz1pH1pwI4KTJbmBerOKlFTpx1qrkQu+JXyg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjybs4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrzmQ//UzJOCmjnPo8YhyPkd2mHWJ2xLWWfpzfh/EkpycXG/GeM86qV\r\ntPUpvBGajrufgo6FIxSXzVjMTYyed2bJMPZY147MO0zUsEHr32yFZ0sth8Um\r\nmuMBjXNof4OrJum8/ulEiSuIo+R60+zqbYpXSlkNPrWOADnEWj6JG4okrr5A\r\n7Z+g0yFLUlaSnxXq8w/LA1q9Bv8dFNtFGk0zqxpXjtzVpP6sViBh70nlYvHN\r\nnx9hqAFLbCCguvAOv0E4z0fgaCg2h4B1wx09BmT3McGja2EaMQ5wZPVIOBlt\r\nScc/f3alQg6AEM8bp2WWvq5OxNkJV6+H7tyazv3LjEEOClXhjxp2vaJqYUuo\r\nBBGx4kAu8sT9oYnOY52JpMiLbTIq4YE4F8zNoVKZipIa43zlpQ2qDSGxYR7V\r\n8oMw6BrNF7caJjJFXnnEhxg/fZ0JXOXtVKznF4zft5ti378b+sKFBW3jCfPU\r\nejBZqzN/2Sn0ta3K7PWK2dGLB9rUZRABm2BOY7VomZnPwrIhkFxRf+sV7vOV\r\n1xCu0h/fZguxHdak3tXvmMZfpitBSyx3n4HbTDlkaznZTIhZvAgWaCW1m5fL\r\nGGipxM/afkZ48HkDT/LnjB07FjmBmgHSncg2McGEaHoLc81cJAgsTo8tmpVZ\r\nTRNY7NKuypPuDdT54WDrFBA4poH0ru5d0rA=\r\n=XY4z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.110-beta_1674165048750_0.16960515651580543"},"_hasShrinkwrap":false},"8.1.111":{"name":"meetup-web-components","version":"8.1.111","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a562c524f40e172a140b3095de98913f915e80f5","_id":"meetup-web-components@8.1.111","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-IvjJ2zcNTie65Qsb1UlB4/89nIrBcNnMgXPVEbQ+sNa9OZRf/CgWNfAthtrFVwa36bmAUkTHuXZY8Wk/+Asm0Q==","shasum":"fc5513201d9e6eecaba31232e086d1c02e213c4c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.111.tgz","fileCount":631,"unpackedSize":3177106,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHd6TSHaaXV+TOXsOVSLigDhMJ0haqW2sCF6x/ZhIkTaAiEAqc9GgKsC6/xZvwbVcx12nIrwJT97znq+W4gI/6BbD9k="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyb/0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWQA/7BnhtLhZbPNLE0kFg5/gA30RHrb+cxeCttxJrQ/gfoxU+eB5k\r\nwuLtojGtJTTDkqrVrkUa0rdHdfzJp2du4ObTPbBOlS673ilY4LBi4mZmBLuH\r\n8EeQ5G9HlSoOOHZp2TtsAi4vcXxy67jSl6QLyNuCZ/TFvgF7PMpME7oR5c6v\r\nMs9JvKFtOx6LTnq7jEJ1qHkH/88LuhQ2oJFlfdFBif6VxFHX5fm2S7NXAX2S\r\ndyfjQZj20Xv+x6rtLTqdwuEDaU+rg2L3t+Cy/ImxfhpGqAx7ZeMlDD0ZgmGa\r\nBMINYUfx6zz62Cjq+SATujd82UUufYrbgEXRrN2cu+jC1mKYF52NsG8cfR+H\r\nxQKiguu01+VaQCRzWzLmS/BqKRuBKb7aAwro1pn15sXiqVFCR0azcbqfOh08\r\nB4rO2HeXQOS4LJp9rUq8Ef3JlMWuOt33vsqsbD9Hgd5B8/ELLHckk9HjeJt0\r\nhM0EdIGoOakyb5w6TpBXV8l1CiURLGKnPvMK1eoNbpnlsIcKYtKNrmJYFDAW\r\n4dyMQpgZvCWKiTi7AGdtg0I9SVeH7AskEbKj32+ippSL20PFt2/vHjZx9Ir5\r\nZs5WaLzmdIfDEbn1GZkW2uP4iuct6ygIixoFuTNBzunwFL+zDlGR0x23wUWa\r\nllDxAAQh6xvHPRMlZxF9YGq5FuP1A21CCcE=\r\n=t+tC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.111_1674166260126_0.08918038398507933"},"_hasShrinkwrap":false},"8.1.112-beta":{"name":"meetup-web-components","version":"8.1.112-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bceb2a58b676ab0611a2983cd80379a24ed177b4","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.112-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-czLGntyhWsXbUAm6Oy5fApJh8mD/gClr19DRrohW+SUXjKzVNyCKctZrPRJ/3G7cL88Qh7lUaj61Dp1u/HvuGQ==","shasum":"7343fbd254f432906e821a2c5e2bb1ad9dd78cfe","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.112-beta.tgz","fileCount":631,"unpackedSize":3178338,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFMWvlLGGK3lWPugDTrH2ZFGgy/C0yKgm9f6UCChGbAPAiEA0WXkogxCkgQbDzz6WjGAGiTWsFiVZnAIFjfh54IAlQU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyeKCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyDQ//SZeewlCUbaydUh981xyuKqh/Yu/7/Kv34LxuOMZYpgyFfxwm\r\nDYgWyBupNoP3m67nj2jsRiByDUwTMk4Y5S+5uTYZwlY4Fh6pLk4HXPj8+ZVK\r\nDuIFK7gEpc2tsNQ/34Y0/szVmY/Z/N4XEto3FCJ2V3/6v7eK9y2K9KKA5RIA\r\nvA9lS91SNIpEZOqffHuCQrQyWa9vAm4EEKLQOSA5dKhgv9ACpzgeBcEIQVPz\r\nhvAIz5otLvVT8DJurFzLH7K96otQYcB/489TTHLomTFgit8LnkVsKh7uGnCH\r\n8hzVEA8r/vjZylT2bxooP4gdUWEcvR3gtZcE44ceAHgiEqipIW9DC8jzFngm\r\noeFy9FoUAG1Fqi9LxYxU9v8GIJBI3vkT5vEUOkDFLsENamwR4np0D9ygCJ3g\r\n+sjeP8oyYv6kmChtF7PXvJLxrM3U7MTklrBNJrmCJF3mOTk/yHtP/Jhk3ujL\r\nVg80ZI88PJkXH1Yo26IgwmwczStMZbftJsU3mNTvhKnVXxP5qIT30oBW+qpn\r\nvjRL4oNWDHvG8aoSEBXvtO+iMOJnMIVEe5iGD3TvT3lDrECGlFp+woBVS1it\r\nUQwqkhaY/IJ9auQ2s153LzlelNnbaQaKByu64nZh0O0d380LIcMKAOWpcBKr\r\nQKnXsdRsfAQvdXGZB2G5gBr+RSIRojAmHMA=\r\n=Tgg8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.112-beta_1674175105981_0.7429376058141373"},"_hasShrinkwrap":false},"8.1.113-beta":{"name":"meetup-web-components","version":"8.1.113-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ed3253b35b53a70f41664b62c8b9ad65dcfa4101","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.113-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-HwZmrWJlAlzvwLoPFMJ37iJO2de2wkNsWNX9DVHOQOyBOAt7LsQYeLg/FIyrlboLkgPCKReXv8UFWMR1MkEcjg==","shasum":"66ce8f699d3be3b24dd98366d6d639764564e5d7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.113-beta.tgz","fileCount":631,"unpackedSize":3178477,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbd9O5DFSag+ccBr0GU6cBymdzx+ij6NOXTo9NLkE/eAiBBGmpsgs9qH8UW0tUia0Uxfe1bW2OSw8TzDbk9dN4rUg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjygraACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp7IhAAjQw2BZglhxu0ggldn//7fT+0MasAZREBXEu8Rn0fi58VDasD\r\nmnMN8Cw+RTl58960c0ZoLv9sj8rted+IbztdW+UT41UW7ekk/Tl5HEzCwQ12\r\n5zYcqJjQ4FDw+sFZwWcYB8fI6T2qBd7eMwWAjqrxQ63oSmrGItS1kVW8KIbB\r\nkprf/f9RZYxSAldT8w2MJeRT9PCYvwpAUn1YYi/LphgRkAJwVEV6Swoll4EM\r\nSeNHm7nwQyY0hqwSo4mabqbJvQ4ksdhRRqqdC4u2eu+bFpODJscE4EHVz+jy\r\nR2G3emFrVWPMBZDB+WfM9I8hb0Q4uXt84XsQGIOK/S+MRW1v8YjT9WHUPZ0G\r\n/kzplipOToidwHV84uY22ZAKzpfkv0kUmq7rCQOBoFUcAt4edFTV7PGN/VGc\r\n+bY3u3Cv9luES15FdQrwlShzb9hLNUTUZ6LB+OQgxvZ8+8TNYuJThFFKYO2T\r\nguUT6P+GhEOD7zvJapz7BCH34hvfgcuKOjQiSYC1qw01zXEq6CIGYi9s2g4R\r\n2ORoP0b/c6fn5ewp5wWPPkt3PO5kZboYsmvWN9X7uC2eOXMW9y9Mcof1KGlE\r\nV/xhpELCsgttpBAN0u09zoZ/Sy0sUe7ttUv3mbkRfJsJfL7ZELxRggi5AsGG\r\nE5ktL5ucXWKYyuvP2p1BHnoLDFEYDxsvz1s=\r\n=jXt8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.113-beta_1674185434077_0.35504860527141346"},"_hasShrinkwrap":false},"8.1.116-beta":{"name":"meetup-web-components","version":"8.1.116-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e249052a7c0e27aee195ee27698cd54ed3c3052a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.116-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-OQ3+EEoFEhTWRxQDbszw1RFGunv4tnIa0lli7pu6pLORBmLw9V0+7S3RiV/ZafKAbZCIbSv52GFVGgNQ5PLW8A==","shasum":"bf0d47968f78c85070b98af92d3001a86c411c97","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.116-beta.tgz","fileCount":631,"unpackedSize":3181190,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWgCc+bFGw6RNsNnMeLVt6jcevMgCWh9fEc43D4otMJAiAiBdWmwE9MXZZgpGicNVZjP1WYB3RHhMiaM82UIdyCXQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjzxT3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFFhAAi4Lo0UVYjzc9n9D3vPa+Zb7CA7ZZYzqpk9FltM35/U/DwKKL\r\nx4CcQqWKwRjCWK2PCBwqbg2zpYq6sZcdmBZo5YavKgzE9RPxMOjz1JTlCKY5\r\n/kpUOnJBszzYBdzfbVig/63SuAS10GOCv3HjG9SLBJFvPIhT1t0qBesP63hC\r\nN4u1TGZwZzYoSwOTvd9njKP+OFukRcXbRIvwGPWDfV65mNI4N6rzbTHIB7Ow\r\n86mL5gA0K/XK2HGim9UBMQAWcnqr0muUgrgwBFNPAdcn493GTZn+R4tFpjLA\r\nOKuo9fNDVsWE5FNtBZKNCGIQQeKe3Jwt32KH4OqOAipEqUP3V+2ABORYeJ76\r\nrPd3cf7lKe+Zg7yHpUC3uzuHeolf+j3fr/SmlmzoTiEA2ZzpF5+qWnzAui4e\r\nDCjhd9NQso5RWtM7TPqyrj+5SJflFZUN9JWFNezwQd375bwpWJ/sKv5urGmq\r\nbikhD/vAi7NcuqVeBLkqTp209ozica95VJhthgvBClIffrz2AYyq9oaMJejK\r\ntCq3Db7+kLmUuZSxNI0ElGLqbn4gs0Wp1Mc1PZCSYOPwPoYuX7fqyw4CxHBi\r\nTTjh6abinsf38W7FaB+oE+TYyRB+evhMGI8IS4fBa28soMRSkzd4WTSoGiY2\r\niIaycGWCA7NDz/QTOCYlUgiIJgx6zgErUkU=\r\n=JZXl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.116-beta_1674515703199_0.4240724473470352"},"_hasShrinkwrap":false},"8.1.117-beta":{"name":"meetup-web-components","version":"8.1.117-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b2d1f4075d2b8a3ebdaf677542aecdc598292cf6","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.117-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-HNk1BK6O0UxqCuVUY4JuaSLQSNcQOqKSh/4/VGp42BFWTGfRAfsiMSzTMtHE8lf9V81E9uY4HMK9036LV14vOw==","shasum":"e7f3a0cd5bcfddd8db78d94657703f464bc36c86","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.117-beta.tgz","fileCount":631,"unpackedSize":3177584,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6xQXWa4Yl6x/0r7PKN9/OVTDsDPoOhEAYuOkPd9nSzAiEAttB03ktv+aGVeXMaakhkGLe2H+Vva/dzE0H9ZXXx16c="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjzyVYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqCMhAAi9iEq2MSzFH7w3lM1D1rYFvEpaQ2qyzxVYxKr1N/RtdlOQ/l\r\nqiXa0gurRWFgBJirj2xWXmKd2c2/MAFyzYM4fGQAnbyZJoOnS56eQgykPD+E\r\nPdVA1Uo9qasNRHZHcwPoUzqRCuacTqEx9pH41ZnkVsyhX3QOwBjcD0vv5S5I\r\nwOsZ6UAVlkwaQumiEECrpxcXn63JEfF+bY+gqd7Y+l782lIcl+CIsRBOZ/i7\r\ndzSvaa4rjy2Li1rT+gDoh5eytNwq9vGzgREMmTMdW3ct0VkQzKQY05FPqHyZ\r\nr+55Mt3k7pjedzowVO7J8iyj/OqXDb5oZryR9J9JnyvlOdpL2oHyE5kljKEn\r\nVxtrg37gRInRv936In7m+zvIL87eFBN1W2xvOrTwt/yIPgYIdZN0lainv+JA\r\nNR4fudDlGcKAtywJDbn1CqVcVBR0C7BB+DJ9Kn1siE7sQHwr+WAqqz/nWDI0\r\ndUVl7IL5fua0OXhAUqWN5Iu/8tB9lP1IMeZH22nd/R2NzBwjfj/h4OU0iIHn\r\nMzGTLAp5vRnwgIzvacwTRbKLdM+YS0irQWwMZhRlc4ZIXwLJBTXKwE43ePsA\r\nzh1N8Rr1Ioxx3GNF7hJtNnwbeS8k6irQP/xOt6GQ1Nla+1eu+Dl3ghWm+4dP\r\nFD38LJHOrYEkbCpUcoYXsNeyVU7H5uWuQEI=\r\n=x3aV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.117-beta_1674519896258_0.6158380268489327"},"_hasShrinkwrap":false},"8.1.118":{"name":"meetup-web-components","version":"8.1.118","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0316a53ea9addbc755e2d36f12ca60851b49ac49","_id":"meetup-web-components@8.1.118","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-IBSX7Gcppnf+6DH+dKHBn7y5UWdNvmJsXbEeZV0uLlEVoTm+NKQtl6Q1QMw9PyKAswwFk4zRwBjSPP3wgmuBIg==","shasum":"c57a59fdfadf7e8aede5be0a009164472e5b5c99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.118.tgz","fileCount":631,"unpackedSize":3181185,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1w0PIMWbYQoUW4nm3/yxyR7Xvtukxy6Unz1FPYHDyYAiAyTUvz2lLsuU1Ds8wrL4Fwrs3uho2OuCAqTuhkcpFTbA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjz+RCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4rw/8Dbpq9wwL4SmzctR/cSBQBceNCAzO/XaSNZAs62oiHTtiR4QI\r\neE0InmA8h1BLvwlkU9EhcfsOD2/MyhOoK9PThRVv0lkjDyS+a2W/mUmds3fA\r\nUwE1i1URsj2Y9NNS8WjZm9EZ6eNbCNLonkIBO7TmLlViHa765v2RdIVXBX1x\r\ncqNglWlJfJahHeW5zvJ+JGZ9QmPzJqmIgiq+JYXtTAhy+luqRCnuZKkmOmNe\r\nPjXPWtkpTldzgQ21cTNsQCb5H6G6VJ0Vn1fHFEx0o6qiCOLYtipXljQwocty\r\nNb6y3EUI2amKqKnm9mA8PjUiWZDuc6ALoXQdLmaYfFJZaHbOVMAlmYzSA2uQ\r\n2h54acvJhOHkAejHBu0SIyUCvP9jPctWpCzTTI84hf3+0plI4HsW0NLW3nFm\r\naqy3dY5M+MnZluVai11PSYJVsVvbdBhNvUacgc/4ZYTwxbZcTSLb+O3LIm/4\r\niNcviqo0WRAdRZDwc5xZAyiP4jWbPNQEQqbR6GJNclDcu2t+Hbd9GIRyVR5q\r\nUqKEBrqWei6jU59WV6e7Ecaz6sHXJ+Td3XFm1Of80oVMJiWLq+hxmaIEsTzE\r\nNMsXa2DpRdSposQbNuJAh3IVT+HZmgx+o+RjHwJaNcqHd55tjv3rthiuiSZR\r\nuQTlPeH7PyUCKYduB8ONHurIkzxpuZhbo4U=\r\n=uHLG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.118_1674568769890_0.43771869857597423"},"_hasShrinkwrap":false},"8.1.119-beta":{"name":"meetup-web-components","version":"8.1.119-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fa6e5543351357da8bae86a832bd7ecda52833eb","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.119-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-NwAtxqjO7WzqcCGqsF6YMubKbg5sBJuoCI1fms+/bJhQMfdVBtv5arMT97I+BB6zu73Zem3bNuK3NC1rO+UOKg==","shasum":"4b7e78e1fae337495473abf72ffccb406f41ab6f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.119-beta.tgz","fileCount":631,"unpackedSize":3182367,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxXdCJh2lAZrR2t2nVDagrs22c/vEoJpLAOaRPl2G1cAiBEgArBbGGMMSf5iG6UPVYzYGTlOHIvrtEhXv7WvOrBXw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0VksACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqXWA//XeKy3nbS6i2pWJh25ya2jkwNNwH/HWJzWP8PmIIgKGUCxZ/j\r\nmHTJkepYFgQWgRkJtvRnLnPIgOhW+cxM7RgGNBywk+LK1/eZ2ohuhrwiIPRD\r\nf3ortNjTXYAV92ZRKtxfbbJz0P2lccbTRGb4Wvq5HM5ldS/PxtZ1HjOXBgZc\r\ncyaf3KB6OwU+7m/yykZo5xsMTKkNiYW8qE20cJYsiuTBK5zsN6tDaEDhPWAQ\r\npfH7K2DOnWrABC2eKrxH1flXheqRtG/0mmvebxYg5GS6KMvBdNsrKESfLkiB\r\na6JQHZ+sJzH+KUTrph2nihAFVgYvyK0sTIxON6a4JvyszLHQudNuNAzpChk5\r\noOpxJHNHBVadwqB6CZ2bsRiDk0floChDfFfsAHBPjsgqwwxmH/6UeI3LEtzw\r\nEBXTBhSe/19BowzJKpD6XpzAq1TZgAmlybV6D3aqgspgzwpqmEhsyVv/MNXT\r\nCTBKrfdeT5AEM2q7N7vZVy1eY9sMdygoubQBLfeFIcOEjbLzBMDqzDANfsqF\r\nt1thE5TDcguP0EjHSzko47yc5ZGpsteMwVxlL0BTe5TdEBDYrjVhjuK3VeyT\r\nSFPrTu/nDe7VuWKacV+3la4sYPS9MpPnlZQFo9yzp2TnTE7dw0Nr2I1RQJLU\r\nrRYmoyFRj+ppHywroJl6wmQYU7twl5Vj+yk=\r\n=UhpL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.119-beta_1674664235915_0.7142337440809166"},"_hasShrinkwrap":false},"8.1.120-beta":{"name":"meetup-web-components","version":"8.1.120-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6e9d45d9cf3112f8d10425de769d7ce7841b1301","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.120-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-B3KmitAjTCIYABRQdpng6C/qClcrU8jyuICemtinnbYKalLl1dAsJM7WyvhWJU/jTa8gq8hdipzo7n8hHrP+zA==","shasum":"2343f6d199ed9a7808c4cd47def47b78b478da3e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.120-beta.tgz","fileCount":631,"unpackedSize":3182330,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC5RZmsCaHuNl881+yj3QLPB0kHr1elAuXQ5j4eW5BaVAiA1wuefABqsXihJF3CePaurJ3GZD9vIDxSZIznj8wIetw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0WDnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrDOxAAoXFsIr8I/E9GG8zXtuEFwCWJm/9c7qiZtOZa74SsNRraW3oX\r\n4buMEy7gUPZ1+E+q4K6EQkZE5Ehv55R5uLqdKyHoTQSeLbzH1E8LEppo/1Cc\r\nwz+ry2Un/csQq/S2sCrnGbBcKEBI1cTBkG6rh3JDhEJxEbdGucVYJRFreccO\r\npCOJ9tHvy5g5w5JogTYJhGKnYbvfdXHs3UQl3NyNgWkMdIhcShWg/f9m9Q1l\r\nq06Wlc3d24e2Vm6cRrvMexkxvZzxqryht6Atrf1Midyg3parryqIFXqEPFYB\r\n0rIpjHCX3NQISYEpoJ4kkfP1g81y3+BZZ4wq/DQqSowalVuc5CgIJ7UxoRKX\r\nbgldf9e8sdTT4KrH2aa0A1lxjbkRJXpulVag6QbqvH43isLLAiJ279iV5hiB\r\nHe873wiJX9fYmBDeSrR5/w6JJs106OtdiVFHqBIZclEzFw5DrZhuEuNIWmhh\r\n3XLaNc5nGuOhoVuBy+EUwg6nE8VppJgCZjk4FBDl16sdgyvP1pPq5o0ZVLcb\r\neVGbD2YJra2uJxsLpAVpTrcDFauVh5UwDxyrQguS6iL9smC+iFqBPP7ztj5r\r\n80b2qpfS/+HOwRZq7qsE5RybAr3gq7fzWevKeiA8qEFuwS+YYd+QtWQwivCP\r\nG7Z0wUh5DORzGjUrcNMNLrWQ5d6cnpQmnZc=\r\n=35TS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.120-beta_1674666215179_0.4582133181746073"},"_hasShrinkwrap":false},"8.1.121":{"name":"meetup-web-components","version":"8.1.121","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d64e72c8a45d7fc6fcef031ddba6a45f3818a68e","_id":"meetup-web-components@8.1.121","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-kGZSbJRXfL7kq9g4JphSXs68icrEOyNrXjq7hbaxj7SzKp2upkVBmHA/S2aFVuig2lbKkNx/N7++MJ0RpjBYhw==","shasum":"c0f3fc00a4f8e294d4cc1a6e9a1df20f889cbfa0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.121.tgz","fileCount":631,"unpackedSize":3182325,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBMel0F6inzausgPPftqPWJsUHaXCbH1raH7KW2A5R/FAiBmQ16WOnAppKEQP9ZlZfaT5vdjLrg86TrerZoDrNsXEA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0WGWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrCEQ//StK2mJOzxSNC/0sfItWeBOLGX9yRV5avtmTyjl5U2ndocxio\r\n0gn5tg+1lcZKUCYCR6WEqnzyq0bpiWVx2mxtgNQT3SnUxYciX0QlW15PlqSo\r\nnLO+dVcdPXiGbtre9cb2Rn40AgaFryU+/t1seGWlqKFeo3Uajy3pl8X0wmVM\r\n7LeZkHVQ8jhkpMry0LrOKNptRt1Db0LtYREBehKW98CwAi4Twnx3IXwYvr5Z\r\nZ5yGxU62tLFl4rW20cByoEo7Csrfwn2K71o6ge+hwgK2z/TvMItqeF6qPKXG\r\nO4My+9ia/MPJEZkCe7NOsygsnTljK+UO2HyFBHprhMOVMKvDeceF9vJwtUTx\r\njwcYozveCG/Flu5zVxm72/y8UPgwMNHfeRcdzPf7T6c821dbl/nJqbHYATF6\r\nxBdYJjLpx3eTI1WfyWeK/jlclWr58TARPR+z5UOchEhHb5XAnk4Zs8M+vybz\r\nbzzJTT0NcNj3nIPtJlD+74hqG3mJGK0jzbbwSWqe+7Tqh+jc5XdxDk5TUaUH\r\nfl5/RrB1Ob6+AmS6/TC7rm2irq7ht3vA+t2nlo+faboTi/kPoJK6S34YaWrB\r\nvWVlT1rMRgNAplZtdUESkx534bSkUFZT6BGDpvESs1bNtNl+yKLkBvgpFN7J\r\n56gGcKXOtL8P3aiaiKV4+d1Eu3CnM7syV7I=\r\n=/40f\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.121_1674666390475_0.24056319087386546"},"_hasShrinkwrap":false},"8.1.123-beta":{"name":"meetup-web-components","version":"8.1.123-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"937b0a39ca7b26919ea7ed8d316a5c3268d06221","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.123-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-7HluRENl5d4DIo348VnC0yL4cD1d2NshH9SXAXX/R9UZ1uZnvInsPLCPLc5hPSmxPCy1WQD25j4Pvcs/6EUnyA==","shasum":"64d0a2b81cfdd309cfa1b10fe36054b5af4147cf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.123-beta.tgz","fileCount":631,"unpackedSize":3069101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4rxxSGC6XCSHqKxQtzb4wrlY4Ve8DKiLef7EH4VpCmAIgHglBBYPgMQqIsp+OXqERbVQk8t7cpo2o9kG+hSnjK5E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7hmzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqCCA/+P2Te+Z4hZLLp7U4t+0CH1E4eyfza+IeQbWvU6IuYoZAzAngD\r\nlrqKATWqgluVqSSlXL+aPwEpx0BDYY9IolF0IpNaJzmYDf9m0hy1mateMueA\r\n1Pz2G9hwYvg0E/KcG5WeUo/RHD6ppOKX5Kbvkop7kI8Ys4CxvlFVV4iW+MlM\r\n/Y1M20SY8V3gCHZ10D4OyezFWo6l8IBDYN+2EnjE4H/acjLZi5fqcgXOztou\r\n5Nm23H84VLBZPYyTmNWk1s3RA1xCSr7PFvN/BO7fKpENmTkr4pCkUFZIX6mE\r\nl42mrxHJ3bTA2/Y/3cY0j14KDwggHRD8CzLRLYr4zCcxK3tsg3fivYVJ4koM\r\nsKuPELEJp/6arBSCrnSsgE81lGFS5HcGHZE4ctpd5cY3zwsgZjAYMZuN4hVm\r\noY5ndIUP7eiPrtOi7KnUVf6dITsrXHRW/CoiX4z4ttl3R5dgENBJ2F7mmFcp\r\ncRwiqlXIbwUo3YG2ToWa8id2SgF1NPefLAi0stHgulsQ3JYbA/6mn+ZiCIOj\r\nzhymWOrImPcxGS44Zyp6wMDnges/K84zgURn//gIQFMmCzJEHntcPFXTjnmH\r\nFvMnoYG3tetFGKrkSkJ1GOZqw2TcP9G/gM3BIUJAMv/WWJ/K1ZacY//s5Cy2\r\n9MxXfdybLDeBnuPyruzAGs2/VsRAfKT/EMo=\r\n=TAHi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.123-beta_1676548530785_0.25865898151011857"},"_hasShrinkwrap":false},"8.1.125-beta":{"name":"meetup-web-components","version":"8.1.125-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3eb84d2edba611415219568378bac56d06d62b7f","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.125-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-rs6ci1wMold8k+Eq9YTNcYGs3eN7A7UlxvUQLR3vwBHKe9qhWMIY6IkB8NcdG/+ruhkTSHACmurjMbCTZelaWA==","shasum":"9e484a4dc8bc884f989128db39dfd2efd1ccbc03","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.125-beta.tgz","fileCount":631,"unpackedSize":3069267,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6Ke98SqXqg+LStBS+BfGpNgEtDke9mBU/gbUpKuzhRgIhALungOK6k5e0oLRuAX8Qnbxuv9N+5QbOMowZANg+GPwt"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7hztACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoE3A/8DzsMLYQCTWJXx76IjdxXoKlarrMvYbtMveoxkAJTjR9O0Cju\r\nPLkxQF/YLAjzNNKKJq4kF+gDefWdZph2CiOLVIdXA0DTe9COhNUXXiYAXD0f\r\nPPJcng9VS2jEMXsySFf4FJjXX5vjIDXRnuALkVTsAOW3WFfwG5zVvU11R3+S\r\nCE0ftxj06fIta6UYwEhbYysImG8N5waeSu/JeHhVHbdn9jNq3G+WHOAuvswW\r\nQrmfLtgb0fcyZ2NwgKesaw6TJbkbA2+Y01Omh/G/v81aQYeDJTf4lKFFJau2\r\nxBVisz3nEzDW9UlmKWoyx70/OPl6s/9d9Znr7Idk6TlPIHk3u+zTJUoxW7wc\r\nYEP5ihCHge4hDJaexhH1f8mZvGbQXDAfw1VzmhLtEI2jlDz5UT+AByK1kPOT\r\nb1/O0xdOIh+xE03AfE6Cy3ONy5NRccQQ+YFwBsRc9fNuKI8GXnfutlDbYYOl\r\nCJcvqh05JSkSsT7E7UeSUb2iL1z3Ok1Z3mvVUJ+DtnrxayLCUagQb8PlY7JP\r\ngro+nU8RcB+nXOcSF+EHIiAJDUcOv6ALMnJoFD4RjNZa82l4GxR9pf8ZVyfZ\r\n1s/wxWnVDlUQ8tyq2CZ65cF4le1z1pYlS67q076uGv1KEjV+macgYYLlyYRb\r\nPzw3qdrBQcbmslt3Wb2S5QFjC3OKBaQrkoc=\r\n=d4B3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.125-beta_1676549357352_0.3716622673334644"},"_hasShrinkwrap":false},"8.1.126":{"name":"meetup-web-components","version":"8.1.126","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e75ac2b78fd83dff0c01b968724ae331380ab8e3","_id":"meetup-web-components@8.1.126","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-UtelIYLp6mVEGbKz8dA1Uv/suiZxnvJxTul+FpbY/JWKha7dwDHMkiRPQnsMT8PxRVO0pXXZj44BLjUT9yzrqg==","shasum":"72d028ebe6ea550f4386607cedeb17d8976b9bc0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.126.tgz","fileCount":631,"unpackedSize":3069262,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBAP9IsGElnLcIxHr9tQ/LUmsLYitC7yEDfd+62WYKaFAiAWvYjLIG1vJQgWmP+gXpdspGPOXvsPYjY1Lm8TLFuJUA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7i1iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6Tg/9GNE61AdE+YQoik/N43Bh2uGjvoHg1nHrGi6AuDsDS2QkdJWP\r\nW60hh3+pD9LNctNS1NByDePaaywQf7sk+FZaVb88ATgcWpt3PMFUdRd8/trB\r\nsprV45QVNMNbmYwq9pDUbhqk2MMfJwjnTKudUq1HsJ4iNc7lGpQzoupRwhaq\r\nO02dDLd2MvWs23p+xbehiq0Hg8XpU1QJJAxH9/ZWktYCxamKgUe7iUnewNsZ\r\n87x4LozLmQpAbVLZp4Nl17lu1dmIJAq1TqgJp27OkBDBPxhDLLzdcNKFAztR\r\nd6SFla5Npt1g+v2w3H0xO9/QkYNFiTBLCeTJEPnzQSgwqDIJF7VIEgyUZE0l\r\ng0EJsR9V1gGg7UV+QhHwprtjkrQY+nEtIHEfHa2eatkoKEphv9uBbs0LNZgC\r\nMWdWrbW9Hp5P2baMFCOkenEvreWrXJ/ydjKYVrx+fBKHI+r9zve0gdoDTP4O\r\nvMWepjSmfT7/2A9PN987kLnuwE1rG1si0Tbod7wSlkgX3Qd7t4+ZNF9OVTCm\r\n7ZjLqiShKwi9EvnGsvEoL8ZIXGBirDBWfkzJJJwvSppkhg14Dvg+ZWrNTW4z\r\n5nKjTQED0Vnivz7g3Yy8iqOvGzHBiVDLEup+4QFfdbOaWeYPSuNhUwpC6BSf\r\nV3MfF2Up0FneZFP85nO/MTieLw/p3j87D9Y=\r\n=85Xs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.126_1676553569870_0.9446079767057491"},"_hasShrinkwrap":false},"8.1.128-beta":{"name":"meetup-web-components","version":"8.1.128-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3296cfdf30056c25cbd639a0dc281fdd9afaee75","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.128-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Vhy6EDQtlqasa1hRpsmnAaF/4pQImKYUIg93fOPUggjrffVFrNXxcIoZOeBXQeqecKV6TqToGHEOfHEEGMcylg==","shasum":"fc76ffe53987941741e0362abe09b4a9a9d28a1e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.128-beta.tgz","fileCount":631,"unpackedSize":3068927,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeJ6DogFbE7owsG7nUUza3pyqoUD9A3mBOwaqPzVn7eAiEAzl7knxqhL+2GgaqnbA5wazxRn7n0di2vIumNNnX7hqE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7jjYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmotUhAAh4/IhZUm87z+GYGxIQ//8A1wWhqke2CUR0ACUmLhbYR0K2B9\r\nc6ykk8OdySyF2W6TpYDouuoi/Ruj96cVaAvfgmi1ZQcd6LHxB/ePKsAVVQyY\r\nK/MNbsb17jusIVKCG6xUq1fa0JU9pv2lRjob3uI9pYRs3oWReX0nB63oTm8j\r\njeIyYaJ2ma4/ZGOejDUyMX12hfYhcVJp4UOVv7FPAqnTcTyEYe0X1qeddxVG\r\niRvOolTC+Zo6wbmY1C5yAMX8DxxA0bAFdsoZofxkMGAFPwxa5aAOCanDvJco\r\nrrm2hNcDcwRNTwRvHM2syxqQUQviofsk7HOSTg/KQY0De3n3AIqN0kEIEfT0\r\nJuVKbfGVpN0FQL4t82mNjhCDxbmDTTbwD0zwjjfRNvQhqv2wEmfkLWpfC2rZ\r\n/5DrCqYQ/DhwzfneQCrKQj51dQcYzi7SYi6Wq+oGZ8wI3IDh/OZF6fZzJ6at\r\nau2sxTidSrjghLeZ0xL/BolBL/IGSa+Raz8yAWoRjmCfn4AJ6HT09riupguy\r\ngV/BY1TGYoOt4SMy3Mf5tHSHKlTz0tr1aJH51Rom20GhIPR/6kADVvh9NJmB\r\n7gftEBrl6QG7mZELaAxOo8YU+fxsONctBifKlf7+qLlcmzqCwjlfSEO10wYo\r\nigiBjVZU6EAUbEb8Fb8XEF1jjUj3bqfW+ZU=\r\n=o5g7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.128-beta_1676556504301_0.825413705194765"},"_hasShrinkwrap":false},"8.1.129":{"name":"meetup-web-components","version":"8.1.129","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"74bd43d1496926146b88a534e334469eff1ad562","_id":"meetup-web-components@8.1.129","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-moqrVTdMlJy8NYXDvPWO7HOeMlRgn/fgJCUAGI9TBk1gsbDxnhpOgcyFemndFtVXGkTYKbxy22QcsQrTbQLfDg==","shasum":"c6aaf2b289cc8a1b742699589916b771169bb46d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.129.tgz","fileCount":631,"unpackedSize":3068922,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/CZvn5tI1Rk5Dh3AzA6m/2ALxFZj58S9PY8UU94QJHAiEAwhTaIbPbSmvaVfzTq9DEZKsGnmJ+lI2uTKwkXCpK5Qo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7jlaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrONA/+MrPjrRyFn7wHiY5teQ/pgfHI3uMHUTPHkZPasFew9tGSI2AZ\r\n3WNG4KRxa8I9RbZfyjXbmf6ef0LhEAAci2cN88RKtKYNQ3jquTzL/90K3ASp\r\nYeJHeaFM93gybx9ykMNChMG2EJBbTTGt/gdTPiFiDkK/pIx1GwjR6u2Ua73e\r\n1WMtuL5grDZH7oL8Sq6DlNDuTkBh0/tReDZP0vdSGkL7wVi7EdIPgTkLz7oQ\r\nVg9WZaFSZPiT1EUxU1/d0J6zyYPbaZjwQt46gC/RSsN7hh3tU+l5nOBjdYQ7\r\nLUkccOGJRqOmG2qIOVnHu6SzqC9GF/emQUwoFgt9hDzfLUl5CbJYErHyBcq/\r\n2epiyQLJVK13rQ5Dlpm6Ja+X4I/JXSbtJ9zIn2nMyxpkH036Dg74jo8/8GKF\r\nOJXlXhnKJPRl0qxCAcXPRopV0qgJcCkbmk9Jp7ujAI6TcoZjwbiqYYVLLh8Y\r\nvhjG4vyMPlpMa1uixbdQ/3s2Ac+vGgiWFWoqCjbboAYYg9ChIgXn3se04Hs6\r\n9H5ga0j1E8nUeXZiVc6cylroA+IkqO1TzjrMSVupDFU8LAkwQCukIfXQBAu6\r\nHkZGcXBTZjHY8wJAQz/2myYSDdH8+bYfEOX3yyhrFt+0DPUsLodT1G/r/Z5f\r\nlNi0dpn9jn2a2JYmOX++PeyaDQgIqLcEUio=\r\n=nJRq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.129_1676556634192_0.437874841916311"},"_hasShrinkwrap":false},"8.1.131-beta":{"name":"meetup-web-components","version":"8.1.131-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9157178dedac96a50d0529d8316fa5af1f9e24ea","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.131-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ma9eoK0cgJwdwZ2XPo8/qWeUSGKePGT2Ls/Di8U+mOig+WKw1mjIAlifSTCAib0gw+xVpXWkGad4Ao5S9H9w6A==","shasum":"93d115fadbf0d5ac0ab0385dd418e095554d64c2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.131-beta.tgz","fileCount":636,"unpackedSize":3625611,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8AMqi+03FTGk2VuwxuSE68Vr9A3liLQymteRL4YJmVQIhAJ2Fmun4k8dPZqaYWKeixMRr37c3X+fQTe6aJ8BRAeAi"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/T+uACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2pg//YVauH0rDZj889fHOStT8bb7rjGAvBbjo5s6p8iAl6NJy5NXg\r\nbdMiUuqu2qQotWFkuDq58JDttzWnlJM0XsD0hd2NZyloYQt65YL1Pun53zwT\r\neAHIARrnd+qCQLqOGef1Pwp+8ZdDt8HxS+Y3muEL0UX5+ZamJ0pTgqbq3H/t\r\nbo0gfQRHxoA12k/AijnikiuL5i6TMp+9cPgkikQ27NWvs6xhxb/gPQc5I2V0\r\nkVl1CK1WDyPukPwTrnNWhlmDR9675kD6AglriHndINGZPSZa3dmIFXLkgvDY\r\nw0LKA1kHJWpFAfD4ubmyXuGe60D/3ih273RLq81AFM5BQQs22WfKOUXDROPx\r\nDXvKVvY0WZF/bYASILqQaEZJfs5nq7sT/5Xl+nNM4Rh+pu9Eytk6Gs3b19AX\r\nfav3eB81upsNNuAugWy6Y/BlRhmQ3eNim50gSG8rY1g9ICWBhjRhQvvQ7u9v\r\n16OtisBN69CwATcdl88ybUl2igz5OdRCW+CyhIIDg500ZER0eT3HoO5YLwsC\r\nxihICOnTO0ShPYOndSZQJYCClnitLWmQ1kFIgGLfooTVOaNd9YEenm9fTB2r\r\nyQ4lYhPCu9pEGizm6BnUJ57LO4nDNFowPJxOK69xdN+T3NettzP0eN/699/6\r\niKoeSJmG52XeNlx0DO0wIcWbfjtJizU1Ufc=\r\n=yVOG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.131-beta_1677541294093_0.9447803252853717"},"_hasShrinkwrap":false},"8.1.132-beta":{"name":"meetup-web-components","version":"8.1.132-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0178e47d82e7dce60597aff609cdd100502a12a1","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.132-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9IWcLawkY2TVB+ailh52VtAwcN3Q70pfWVW80098e6YS6LjNPfrFdcjRuLGxLLthbV9VPTNgvuPiXI5I07Hi2g==","shasum":"408cb476fb44b1b98d42336ac03ae317a535c38d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.132-beta.tgz","fileCount":631,"unpackedSize":3069347,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAfVZEtH/UUXtVo+zoKFCPP5rBLA8zg+3aoyZLlnlPzYAiEAohC3Zrn0iG5b3zs8ON7nnGxa1jaxzpYmH8zO2m+uMz0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCa/8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrWvRAAk2W528IqdhxeavMo5h568lqUGfiNlnmKSRxyppO/Bfiq/qNM\r\nthBvnzIFf8h7zoD9dcE4mZASUOrdgNG6rhslO56YWwFFfIoiS0xB6XgAqss7\r\nI1lqQKKq6FuBgujYBSZZ/6ta/BdhYf4cngAfo1W247bmQ7MNZP3T8AnyY4PK\r\nZvskrNctgusF21LD/fYbAvWcF/fFWc2779hwITU9lyCiy0VFpYKi1D7OJDYg\r\niTp0UIk4S8K43p7aJ73S0G8pj34/YvyBfg9JaUNV0Fh99J67Wp8GWgPgSpG/\r\nmlHYPhNchwVWzuwKpgxcO3NegUUJmz2tysyGsgQqzpF2kdjwkaAeqrJY04DI\r\nBzIBC0i1gMRVzK6K3gBsnrol3//DVxf4WgXJdkhsf5ZrsWXU3Y8lZN5CDvmG\r\nn71K61/L6VJK4k/SXgNOR8zXz5MJCTAd8EBiAQI4iKnW3sk7I//3RdInsvMx\r\nCVQlb5zdElddVeO2nlOPuJ56xKMRB3EY1jum/PBbv27SdjRhnFJCya7W0Xz7\r\nFTtIO+grl2mD0TDRbep7+KksreNqEsOsnXf6a8IxXX8ICdcWbA2VxI2X172W\r\nsUi34Xil8dnuAfKrodq43XIa7X6exItk4c4fdbHLvyo9Lu31112fEjSdI4pe\r\nCg5nDhosScPw7Hn+xKUqTgu6ZNNM9tWYVnA=\r\n=B5Bd\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.132-beta_1678356476065_0.11075887785938687"},"_hasShrinkwrap":false},"8.1.133":{"name":"meetup-web-components","version":"8.1.133","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"03353ca45388e77aee3b1677fa9217cd542e9443","_id":"meetup-web-components@8.1.133","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Yk9XeWlK6XnbZRkLya+lq7Nolwg7hm+jiR5ClteH2QBwFyMx+7rJ4JfFSy2eCGk3YSg3o7BHsqQfmGojjOOzZA==","shasum":"b59f49e5338675ba3ac58652ce9cc6929bd0a3c0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.133.tgz","fileCount":631,"unpackedSize":3069342,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIQIz/OVjRz5Oe5uuwVfhoxjbM1NXXrpblUftdBsoxdQIgH64hqy15maHHmDATLZ8xKw8FGyCDVluV4rw7TAMYEbA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCbfEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+8g/+Ih87qc9s/tZ82JXBx0NtkWkH9QPXADZwBgdiZe9G9gUYPUYf\r\nvZx/j/MdxmhetzyK5jF0Q58snA6r87NN4D4oItWvNvohVRR+os3iuJvOwPA7\r\n4EVcUJkNJAxIK5C/mZ3OTzST1oSmRil/vcqcuSzMYcymlu65SCMrc4RZE5g/\r\nXK2XIktf+SA0X5wGSxi7QiS7FDUMtdTicQbHdFYiX5Cpj6utpwPh4Yy89ew5\r\nVkrBuu4vlG2xg7soIlHpBK0LtXDaH3ZuQJJaQDi44Ypy6N/Js9CYYfPgaXz+\r\nLmUnqaL3pE4x63K4SY4k+TCU8YqoVyMulZxaXztLDvt5biimkoC6jsjSpaSW\r\nxKzVRlcxx1dJelx34nrFn51Eplmmh38tuzapyu1L9CSFh9MPGfGZllMtdWOw\r\njIEYMFcCY37+nwYGk3v09n189H6+tUjfi1QiQL6k6M5o0zYixk/rKHxHgmKP\r\nAMvn089GPAzPaoYGyTB/Vc7S3qgGiP/+mfuHJanOGS71GwE16/d9W+KDguhK\r\nOmJG54YVIsqD+f4gPifwX9HEoE7DdkKKxyVOYJPsshIej4moLkymAa1UxrHu\r\niAK7ulwXrmhP7Mr3F3MGfP3csv3EK1Y7ukkP6xu+j5drTE/Ey598MaKp9dlf\r\nFR9mQ1QbOwtpFVGItYGnIarD2TX+LV4EDbE=\r\n=2p3C\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.133_1678358467987_0.8312825201378911"},"_hasShrinkwrap":false},"8.1.134-beta":{"name":"meetup-web-components","version":"8.1.134-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"21e41eb26c4bded7befa13bbea2f0f38fec81fd1","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.134-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-oilTdPsXXvATR7ytfnSACWXYi/hEndDNoyJUjam3pLWJIUKDEFZSqE8Blrv/bdk1xQZL60uXL7Iu8omYq3zeqg==","shasum":"aa847ff7808c5667b310959451229b2d19521f99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.134-beta.tgz","fileCount":631,"unpackedSize":3069531,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2rmv8JvIQGqdvwfb2nXNd+BjwQRqlzrHEJLCs6nt+BgIhALnLdMKUCOjQTKmJIDESHdxDVEv88r+K3L4cGKkJw0MI"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCeASACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+1w/+OgSS8nA/x4iBRF7ngnD7ViPNIzRZJJdGT5k25iHM0SPFJzFp\r\nAvNmjsDh5BjaHMfnuejcFrMns9EvAPpkOpzBWt++Rwol8JRnaJa5jPYPXVTe\r\nAqyBZqB1Re/Fy9TlHe2CgJaUT/9zbpjYZ1D5jD5TGYxkRLcZMXA769iHB1jD\r\nvI9cnu+DJIVPEngWpam4tHL5R9e3L61hudeahaIHVB7qwr6lVR0+Nyt2F9HV\r\nvDw8tdb0z2wk6JJaPH9BJUiJQhPfzON6AJymlROO4LuKF0OO5MhJx0PfJO8l\r\nShxUbOaXaF8o2cye1ZLmdSSNiEbBYTo/frJbXSsTC2AFNzxtYqKlYXcIY4C7\r\n3m/rsBH9euNR5GDrCs/Ji7Q9kzzewWhcc+ned+z6qxEdg/uLZHyzOvsKTAUt\r\nPefLzPbHJcA+JCBlKfrlLva9fPGfW67tc8yT0jyz9he02cijzDlQ6XdLvvlj\r\nXVuLbSK8mCFP41I6q4Ybr5Ae4aTLb7gdQ1z83HUa1NVtgEHv1eKN8AucX9Ex\r\nTb4hwep3RBr9JDW1XLNeBYO3Nx+Hxs/uKHEDsl62Vmv6enTSRTf1UFkziSSM\r\niD5RgGPZwgXUlQgtH4B7Ck71/+qeNpLcoTVtdYj1f+xy2FfY+3vfOX99ac2/\r\nYVD+sP+kqxuhhwIDoMZUXSwkMsf+STk057o=\r\n=MHaF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.134-beta_1678368786025_0.9742035362691015"},"_hasShrinkwrap":false},"8.1.135":{"name":"meetup-web-components","version":"8.1.135","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e0b24f757f17d11af21fcee1d3d724b33ebb7c39","_id":"meetup-web-components@8.1.135","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-QWxev4nW91WD0VyIkze4M+quK0AdjmZMOLaCTxSBafZS6gFgbAE6FW01hGHBW0u9vUT3W/UGshr2ZtA9WyKnjA==","shasum":"5d778e50257e27ebb9da6dd109d27b8931e38e9b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.135.tgz","fileCount":631,"unpackedSize":3069526,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC3J5m2B4JM4YDc6F2Qi1rtYp+NHuZyXq854FXIE++mGAiAD843pG6Gog5DYnOORBMZOgccfkr6MNNzX131usnRh1Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCebGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrLow//YSTsNvkjx1oIpfSElN0+wbe4CQN30UfBFi84WfAS1BWNA6Yc\r\nps+uaVU4bZ8OfCDg1n1DQtqjosQg/E227GI1w7dO5i7yIrw4WKJtS4AgzNQV\r\ncdwNEEl39n+J1vYDqSmiL2FuU221ifiUvTs8wgPG+LnaW2ACHzF/h8KuozOl\r\n5zS5/AFuqtEBjjkRdt32o2m1BTkAWX4jo6dgatk9keY33YMOokmBNvboGYO8\r\nE7OswQSMExvy/uTvQ6iTnkXrTW/cDQxnKlmuygBf7847pZuBtUfJQD3g8VZ/\r\n2EwCuivqbQsXr/DTgVXl8tW4KdjrBN8TRdDW+0K5OBY89oo8FSWRWib4F+Ey\r\nYPv55c5sQ9DZqPBDtZOr0j4lAsUasCCyAvDSYcvscOkK9PCFiN6ZmKn3EKO1\r\nFx62jHpnzqG9SlLR3E/WggaD3IHftG3p81CTt951y9lPEWaTuCSl0CcgjsE9\r\nVE0f7oZO8M7X+9uMOrsdYmMZ7L3bit8bfWq+P9u0Prz3rYz3SbzX1Jsv3Hjm\r\nUjvDMvabW7sC8M4jza/s+7gNUjNlCBZEK8ce7SAoYbdF4kYdR9MIdyrjixKE\r\n4GLFxsTlQTY8MCwZBjpQrshf0JkcOoAGvNAuOltM95EwUl/2mqOpwlzj3F5I\r\nA2xfErOctH+1Rya0biGuPSFY5+2WOzyd4UY=\r\n=7HBK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.135_1678370501882_0.4093968463189337"},"_hasShrinkwrap":false},"8.1.137-beta":{"name":"meetup-web-components","version":"8.1.137-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b167ace27aeebcfeb421f32169f7002d9c6dba93","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.137-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-7yq+oqQlhI2f96ICTstWqFyBptH7UzR6Zn73xm95KA8MulTR3MxdXjHSSNl80QsdOX6XiTgj7pXb3vy4oTNZHQ==","shasum":"15e2095fd9b70d6e334da5af8f95668b0ec7141c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.137-beta.tgz","fileCount":631,"unpackedSize":3069612,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICVnXnp44crI+PdZxal2bEZjR7k8TlaeBnoyJl/GVW6AAiEA/bxJkdzF8yIyNv5ynlnkgzDJDcXlGLWb6KFFxyhvqw4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFNePACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrIQRAAhhHWcLf/KOycKza1cpm0+qPGEhrgvSNmhq0GDM9sdjF9TUoK\r\nLHg8ylh3wctAkZfaIQ+EsYJjFu0EOI7SOjhsQ+kjs2kO4GMcA6TH0riYc3so\r\nN/b6JqTgBunl4EAPE/e21te/wUr0zQzJbLzzgE/IUUiRmuGm+hbJ2SEEXoFG\r\nd+yEvbqF5VuOp3tlWTYUThpJ6vI5732xvpexkQGh17U6dRE9KgfLRjxcpw6A\r\np2JTAtl3YIgnKgficWtf88bxH2LzG8WkX2S7IrQ3bozrOuO7gS4QUaYw3lZ1\r\nQmF67jnCfd908NlUALPc4yVFqUAeRzj8gMezNwMFcV/nfdLg+8+rluQeG0ma\r\nFu+UyYcRvkIqaCjH/BXVxUoDPDFHMF5AP6TRwm2ZsmelO8cjm0zzsgQ7uwQe\r\ngV43mcQd+TXGrEISnzHrtzQbxHDN8c/5XDA4xJzjmSo85N4RcdTM0FIlQksp\r\n80+VouZYIvzc8UsCZQLoNFSDAbxbwBFkzl4kw1ZqbuEoJGDVFA7jVH6vR2S8\r\notLCwTwcPiBJEA7W/kwltuYLV2JHuTfr1VJBFplEbhras3ovSujI7xOHasee\r\nCRPIdSKnFvpi6x4kAjCaK1JO7LlqXjdKMSHXCzG9J2ymQJw2a/HbPUZYYwp9\r\nPY7Wq8hIXQ/k16sTM+mNiqk1Lpuubro1DeA=\r\n=cAuw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.137-beta_1679087503341_0.8552903325936665"},"_hasShrinkwrap":false},"8.1.138":{"name":"meetup-web-components","version":"8.1.138","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"504e0bd56b4a5596d19b73c52dfee9817e600328","_id":"meetup-web-components@8.1.138","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-u5UKf59q3Jy3aqUP78DaXCnsDjifAOTU44RhjRRgFnV8+ghvDZ1u/PdubxEmTDOSfbinfI51qClpjQ2KsaEwoQ==","shasum":"afa8d7653af7760b356a3e935e33d7331d9cf3f5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.138.tgz","fileCount":631,"unpackedSize":3069607,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/9MkpaaSSK/1bLB1c5oWiKNLFQimCNYBfDTeZ2nIY0AiEA+7wRXqzAac3q73yuHOMH62S6Jh1pzYgiUAU+P1J/tI0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkGGk5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqrIw//TJDgchlPB5gMkjZVqe9/eJ/CmYdtz0/e1S1wScJYADXt0yCp\r\nChNDh9eLoZhtWnVDkTxK+OaQTA9yDe28K08/dBlO+LVqHt0x5Ntlh1iJE4s0\r\nnLz98q9r30toTfhNQRqm8GKohA1ZiM2C1roJa0mGpRk/p00grBXEOBu9OM0V\r\nVzP65y0p3CLCA+Zyex191ysS778AiA6w00ri6ToX34LQLoKDvTj8TwQ4h7/9\r\nrRMfSmlDPZ9ckOwgPxq/gYOgdxGDoFkXWpIz77STfKz9qzimkJDXrzEU3Z/0\r\nhCsYQMZ7gj7ePp0t3QqNK5OJV2Pe7cbCivIGFoq4Ujt1sUtlgpuFaiur2Ohf\r\nXNye1yuuMn2AzzzU1ebOOxbsU37eJzapbykHU4xW453st6yB5ziw3HSvCK3V\r\nxoEslM9u/kAEksCU6v1XYah8pAHb1gXedDCx48wWTSNVPOb+UredZJ1BZex3\r\n0nwRSpr15QcYKXkIcH88B/NXyL7DajLXvB+TSNWNTUzoM+NYa3CRLlm6GJzQ\r\nd8nzf6lokryiNuFtr9f/Y0z3YUqJFYcgTcKRlCmQKBuW1ukOwM30vc5bu9Nh\r\nOW7GJpO/NuLXPCx0TTTJ4+PdwVAbseZRSZds7yVadCIHLy3wIjcDHL2VGJcb\r\nDXGqIWV9kCLaAogaFhjpemRmHOYCBzkvBPg=\r\n=Uf5Z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.138_1679321401537_0.34429214460479174"},"_hasShrinkwrap":false},"8.1.139-beta":{"name":"meetup-web-components","version":"8.1.139-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7b9d9e2ea11a3a5b7d8d838824c74fad8f66b6aa","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.139-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ZKV/bmfa7XPhhfz/Rkg8H2PWX7/lgiur6g9i9kYJ+k3C96F6llIQvYP4IdJGkcjrC7nSKht9djyeyivp6/VRQA==","shasum":"048679f504c6190ffae7d8f14ab655395b94608a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.139-beta.tgz","fileCount":631,"unpackedSize":3072012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAJOL0/j9ipD3MmUPhOdUhclo8kked1jdTHEeiFr1uSAiEAn6iWq42hwSwvzQDfQ31ODX6MhqpixVx0mSvkYzO6HWE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkGHofACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8GBAAgdcPouWF4vJ7NmYdT6hxTEbZS6MIcoJOZeZcw3ZocqNfGGHF\r\n8irtAxqMWcC4x2ozkU3b2wWPeQJsfbY4uL6u69hWE2fsGeGH3liwI091SG9M\r\n56oHXVGtYClDjLFCngz23hz0sFvXB+yK9iIPZJZcOvg2AMkIa14k1fWAXmiR\r\nUeCKJH+JhNaDmKSLIkZYIY/4vLObd6va5BYqdx45aBfNvwpVkEZ0/jsSvWPj\r\n/Ndr/lHjl40gOKCFRm5pjQqDgOVUCva8OMQtLQtJMVODAqqXkS7L9uTkmWkB\r\nTlvgca2tLKjeM8eIjbLYkC+ZSCwBQ8cxiMFVNONnt3Q0qLuLkT1t3Dyn+AXo\r\ndRl+ZCEvRPF+LIrTz36SRai7huYSeyaxunyTHr1fObYusdt+zKXVgVPbQEKb\r\nXPPBXdB+gO0PDpVIOGEQoZCP7E7DVPtdieSEkU68Jkr4DmtcIrtLptWOTbHh\r\nlmoqx7bJ5eKJLNBlqoAlUab6RJHg1VCD4etooXgRM+5c3olOQPMt/C25xp/J\r\nSaLZ1dYCWwsTVAYqwusJN05tbd8c11GgFUjx8WG/HV4NYa6xrut5MiLUE39d\r\nKEOEQ8bZqTF0MOcoa0OZJ+efXGCtm1N1GyjBjvLL5duggUL2jyGh5D+pISHa\r\nXBg83StbHtTZQJZ7bHNGoMI6mm6jhkEKM+M=\r\n=w7pA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.139-beta_1679325727467_0.9462220529105725"},"_hasShrinkwrap":false},"8.1.140":{"name":"meetup-web-components","version":"8.1.140","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"daf769d0c5d706bc01fce2c6431f25d578043b58","_id":"meetup-web-components@8.1.140","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-lRN5Z8qKiPENDJ81hMWGYd6xQnOKB9wQdzYnEEn2jBUuq3c49nHcbs2fASc4WTHiEUBgZQRtGXjUZgtOzwFMpg==","shasum":"35c306b35cfaeb147b6ad291afdd36a14b72c34f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.140.tgz","fileCount":631,"unpackedSize":3072007,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDnOzeP+kRfqC/1ZHaUmvsH3Z6JYLH7lQPijc3V2gLfwAiEAtKC/mtolbJWN2jVcvN/DXzmh/2NKeorwOJFUCSjWeZ0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkGIOQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoSTg/9FVgsBujhJeIYSSywW5s+EODPM7aqOx7zRhKebxS9m1Is1bHA\r\n4EqHqidPVFW3LhwEuolJEinRyEjJQZxuFbe9gAmjA0M5dLbmpv2yHVcOYkT1\r\nWchDvrXQxkiBRRGQ7iOvIiI/C4fM2Z+g/+Xwo8FaazHz4wMttj35xXeFrrTL\r\n6hVwjU8nPaxub4FfI2kMEwZ/Ab3UbGP8u7z+yBDFnoxh1IVGng6bpRMJ8Ygg\r\n9iQVwXKFRi2hmgevelIN8oSPlPcoAeXei/LiLcwamtYi76FevygU+3D0J/Sc\r\nj6ChRtlTInlAAm9x9YjELvQb0uRWInXyJyXWB6/JPVTqCBhZCZLYiS4v4r3x\r\nDXKZECO0pf5ZAYuYfQ75pqUEJMMsqvap9Gmf7TCUoJv19HlCSpmavH6z+fvW\r\n0I8Y7UvVBQOVBlS6KsWqGdIqlnHPY0sLhHzI8NNnROTDsVi+/jGoRmGnfDSC\r\nYlBO9irAk5ToB51VouM6LpbJ1qpVkW8VG/txPCV0PBbqpUZJ/XbhTDFT0kZL\r\nmj3hSGaAveol4aRMLh4kUP7mZt9dj8fcXA0xhaIjfE139/nKr53QCfn3TSkq\r\n7vTjnhpRKY9umMuDwL2X4cKVaZouFpDL3hftcCX2vuevsv9q/fCfC/JJ4vug\r\nDM+eXG5ilK088qsJN2i+u2YK43IAGI8YQG4=\r\n=bApv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.140_1679328143790_0.5748596537627548"},"_hasShrinkwrap":false},"8.1.141-beta":{"name":"meetup-web-components","version":"8.1.141-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"070ffee1d05f52d360ba49d9a711ff5b8d12578a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.141-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-EHfxVnVAi0v05ldDrMTfaCcw5QwVpRWHeCtsc7NyGSIgKsQ+TgzCI/nhVfUE9YDzFDJLUX69sXtoBziTBnm9sQ==","shasum":"6ddc40b1a2d34854a00b95f319da4b797f1b09ab","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.141-beta.tgz","fileCount":631,"unpackedSize":3074313,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/BmDVfwqSOtbvV4+AR65GM4KKKW66ObjYGLabXSnRvwIgFkzy66Y72sBUeBDgiI8GDzWTz8iqtHWaQabeA3qSAzk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkI+Q1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWixAAofJYwfFcb4lej4Xuu4lrLa2ZpAmmr9DfSFjUZoYYfnMU+fpc\r\nk2Kcgnuodi9VUDhhmJJkOkxU0U8Bfo0G6fsVmZbjGKBozL39YapGYCkUEd5n\r\nv8cjh29c0aQmmAIkeYvAwPaTaGJJ+LQuvEzimxF5ZX4IFefM2liq1FvlNLRj\r\nH+tGdoordxPapl2tO5PtCfU09xdu+GQ8ub9WXyJwGRLQf6vH6j4JjeZoZgAf\r\nq3WIT75MtW4KyG8P4rcR1gToSvElldKY5Gvh4xVlOzxA3xuBaVC6B1UHr1Ry\r\nOntD195fbzC9IGuTQ34NrV8bLEHwEJqO990vKNBlPq0ewg5ecuFU2UHv3Rp3\r\ngTc0Rm/jnIxZw7JfWDdG76KnIk9ZZ+C0dSwY+xjXheib40FX4m4deJd79lZO\r\ntqCsKcVlQ7bUspn33fQu8dMJOfXRm4mc+YURLa96yys18DLPsJQUmN+5JUiQ\r\nQHqO8yoWwBIJRSrt4r4o74UVZgzBRC5HY+kK+oW1B7uOXzxR6iMsCsbsYlla\r\nz/CDomq1Rjq7K8JFFw8MWa9sO2RbM6sPOu3Rr4tSNC4ypcaeHjocCRB4S7ms\r\nELNEWdEtE42S9Su0W92JQfT+ECxHl+vmyuJa5l1HHC4xLmVYKkVmnRkyEcRH\r\nXoZwpIuaKBr5JN0HhrODuEEnrg4aO8s/SQc=\r\n=geOd\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.141-beta_1680073781456_0.09489091864299803"},"_hasShrinkwrap":false},"8.1.142":{"name":"meetup-web-components","version":"8.1.142","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f8bfcd82cae7e6fa12f495f571797b131f59c7b6","_id":"meetup-web-components@8.1.142","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-m9Kp5RJUtaC5TNC04Y44h7zkF66OWHc81Ux+Jc+NFIxsyMY7tEROSmjtlWCUFGd2v8A6Y82bgM00sPtZ1+QjTw==","shasum":"00acd8210cdf40cc35681a005c463500b4ca00a7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.142.tgz","fileCount":631,"unpackedSize":3074308,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbtAuNh69o5KEgb0y31KTokDbaGiv6TgBODC4TTkcTegIhANCcGh+Y5RRkb5wRhYP09yPwKn0c+mEmeKlNLl8DJXLX"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkI++8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpOpRAAmkZrQa9XjL7KuJGn0jILV3O5KLcLMUyFOPxZqmPG+hLr/hS5\r\np3/Wi+PLD2koh5bbgBcbWq3uSJjhH7vB872o6/ahjZoMqVkidnS5po/sQKSm\r\n2sCP5hHeWDBp3fnEL+1Y4DWIwU5L1LtUFuzLrFShatR2zhWUs+Fo4fA4EiPw\r\nFnplXXbGzfwH5IaZ9JnoLkDU+ASi6mZ4TnEe2bbP132vTAOuNIUzgxw+azBn\r\nYAn3IoFYU2HnGnjRDTX3u8eDQiEp3oWbGfa8VCxqMHIyyieH6TBOA+DzQhTA\r\nzN6tb6sg0ZOWH7n1Dhb8PJbY1MAV5qZhAweA7fQPAhtyiIyxQ60hVH5XinCt\r\n4gY4h1ZodjkGAGTIHoYde0xam9HaRK3jtbAI8W2cwQ/S7qO1XrmN4Co3G6qu\r\nuTaBsnuCriZY4oM1O2yKH5LUZJHKDPXdC/plfz/TjjZqjOlvRsviIHTKT/BY\r\njOWKPh20GdBbNinZlXOaAY0e/7klYKznL7bGlhTidVVG1Nze5TaRZ2Y8CL8x\r\nFRSde2gcHadzNAkXZ7cPF6u3dHBtNCDAKFfrLKz8fS0frjDNQ/TUQP8hW6IB\r\ntIPLt5Kbg+z19HWXPscHV6R3x9vQH5wVMv1kTYtcsKRegCgKu8+d3X9KlNZ8\r\nUFOVjCjKcLnKifomdfjJP99to8ZK5BfXzbQ=\r\n=5PDA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.142_1680076732503_0.5108014260395315"},"_hasShrinkwrap":false},"8.1.147-beta":{"name":"meetup-web-components","version":"8.1.147-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c2218bbf623937af29890d5bd2ab4fdeac902e75","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.147-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9kbxXAziqPRVy9cX2Iloy9KUW8B2bK7LKdnhINOJa5M0vLsoc26HOQUSYwLHP/6KCidTz9qJQxWJ+4RbCyj04A==","shasum":"f09c485b5a09ff95a5c214619cea46707a309d28","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.147-beta.tgz","fileCount":631,"unpackedSize":3074597,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHE6W+1ZVLuS1MTuVtbTVsG3z1vc24Dz9dSSXtNwPMwRAiBvTuSzabAe49UlbLzr9i3mooTON9o5Guc3vK2h107tcw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkKrFRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqBjw//WewApFI8dXhAkItcyeGdVISyLpJENVPXGi+yFIVgDBJ3irdx\r\nna7zV3LYgunRjyyoq9xuCf5O1VzZScP/qUQ5GdFvltD+Ljp84mM41glPe/Ks\r\nUhabCp8fvX15Eszf1/NoHXEWe23ehTUTNqZStvperuMtIqmKlUJ4cMXdtsgp\r\nM2sQc1qKNEWGfjYSPcfDeMUcwuXRIcJYRJG3T/lLVnm5HPYIBRlXXz9mKt1R\r\n5Rx8j74Z6YyocyQ2Jm8fzzXA1MNhCwUgyGPuQKY5LeVpl4zjipMkXVvkJruQ\r\nCb+cwG4VrkY2CbypjMU/E8hP3WEpigNhO+BklCRP6eaGDgaWd5pmN15iY0Ea\r\nngxtj8vH3MrqniixfzATiqY6CaqfJNyPk2HGj+dCp7QpxwYUsAbuszfx5lGi\r\n9qh3WHBTDpu6bsWKSBQ4c1c2rcpGEQt0+WPXYoW8TcAWihpKXfYWhuNmRqSO\r\nfQpp2wRoOJTJmTmnNhQMnxCSJwCHZU53MKqd79JemkGp4X0y7n9mFp6jG2/d\r\nhSfz7XvTZmcIqFjpUyyx/xpM0S/3B+sYszNF4pQ+slof1meAxxkB/HMieCEU\r\nnkhI+aXt+ST17AHKtlxlAvKtm5QIx1CDMvGT1yTXTf/ey9lO8x/QZGSO+3C7\r\ne47VNyrPJDm19/FO9iwdG99O/hA6g5EPBoY=\r\n=R/BJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.147-beta_1680519504942_0.9605534904900737"},"_hasShrinkwrap":false},"8.1.153-beta":{"name":"meetup-web-components","version":"8.1.153-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"42edbba716773748a90a32e64500c59351f26910","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.153-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-fuJcBopvmk8EDtwypUtryp7e3VkughtD/SxhgDVh1yOodfJo0y7b+43bbyQHNgXsPTV7KSrILeZvfoNvFf3q9w==","shasum":"52e614803cc79b58bd26f2b81ebfbcfaee8a717d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.153-beta.tgz","fileCount":631,"unpackedSize":3074597,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWQ/Ov600pajWo5Xo+8dixa/uBB1erUDKh9Mi7xZOsbgIhAO1vB1zZAB/zjMh/VPtYlQlUsnMaYTSRDfsGPesQqXMp"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLTJGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrw3Q/7B7kUhS19dIl3cb28FhesHAL1Z6JgKOgdrI38qNP81DN8YFc6\r\nORFKclJIrEEKY0nZgK85qA0QHQ8aueMoVtICu9vAXjs5ZQYZgmMKaROJnXi0\r\nF1MJBsfX6ljQcnc390/w56Y3az+dllVLskEMMpmYbOPpIvx4URM/f3EA+Hlj\r\naIFbSz6LweFsDRY4Bt+Wbcfc+50p0J7eTxP7dkQfpi9JbpLd/4L3lkh2wOAP\r\nTL2kOyIAGmhsGD0D12yn8bunDqhyYCSeDDu+394vzzjgAic25vQZACSrUTzM\r\nmr1MwbMAuKZ/UtO6KCiiDr8xVI+IEmsuX1AXqp2m8q0SqIhZ0pZ4cfWlBcJe\r\nDS1GuMk5TxzAT5dADV1jvncQJJge3KI9keUkuBPYCb+HWcVzdThZN+xXVgFK\r\naOUorSbUnHn2CvCeJxWWDyUOYFCD7IEwtc1cGTzigRpUDwPqybTUzbG2H6YD\r\n8P07u7Vp07yWwi1QmJzgxSiA6HtqnGpnirem77bj5/uMWnev7FZzTIPsJn6t\r\navKfyEHXEUhyo4Qe/HXbG5lqOa0ndOguQUa0vL/LuU0Erlm6tWeZoRc2EbIP\r\nn38pVlrkT32/gkv+PXYtt2Qxcct0UWR+qNITzV5jUW3mG6LTsj48EfuAcDzM\r\nOh+qoQTAWXq8S9pn1U1Ch7fy9hacLOsXEqQ=\r\n=Wfpc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.153-beta_1680683589978_0.9363862408289938"},"_hasShrinkwrap":false},"8.1.154":{"name":"meetup-web-components","version":"8.1.154","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"10f08e42c85d6e96f24081a7aa9d27147c630681","_id":"meetup-web-components@8.1.154","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Brqs5yNgY4OJX+mtb77I4wnBPrVTi8j8W7TrWTNQAB3CQuOWMqH5IkizSSbXHBBNFTKn5yTkSy7K64yvgl/4qA==","shasum":"e7d1ddf36763892c973d4313b7312483f62fbfd9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.154.tgz","fileCount":631,"unpackedSize":3074592,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoT/cC4n9WiFy9c6C1ObLHC5yvE81V59V00Zpnkr1ydQIhAO44gU0wJkRz3mDSfciNRyv7HT1KK1u1l+i4/8Sb/uIG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLTMUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp5Mw/8Ctb3nTvq5q0SlfbFeqg+39YKPDIyPQI/8xu+TKUYFE1kGTuO\r\nIKm+m7zqyyrqz9W967WAYI2w66nk0JqSjMLsk3OQ+R6WEoQ/LO0OMfI48a7O\r\n1ncF0o69hwByYNN8yuNFB2fCoJ/vHt2xGleInFup2Pmn7o3imGDhaFayAtCs\r\nR3pHJ3+zml1SRhjbRMo6QTbUHOBUEVX/zUJO0nv/HKrkbHkiJSHUI4pVHe+N\r\nuuPWA2hXwZxAhCgCUH2zEW5AL1JMTM4TNorODtrxCwMQESxzfoRTdr4R1CKj\r\nhr5zzRHlGYZdUIC6pehwQ9kVt+jZ4W2UdrdkRcYsoKjk3vtf5VYlObH89gtH\r\nZKgV+p/uaa+W5i7kle+Qon2D/+DpIudgB3Wlu1oRQGhM6KIOjMTosjcfdKtg\r\nD1ljw25WISE1wJ7/y7GoHjTp5ea6QECKYBt8xtqIZ6T7jJMC6ZrjKAJvhXFo\r\nHSB2OrCIpXxn55aXK+hR2kVRHfajtOFT0LuL1dgOP/8cDkD/HQ42jpF8jQcS\r\nSoumBTzkCik1ZVlqtluU1psH1I8SHfIddP+kKn2iqczMdgrQ/erkSO99HpXD\r\ne7z50CRH0MQ0kdHkNZa6Z8+fR6YkJu5TqzSU5rwpMkBHRAkfad7W36R9aY2C\r\n/eE8fpdwDwWVCN8WwRg3hWjoJk8i4i0LHQw=\r\n=teyH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.154_1680683795816_0.8143364952880765"},"_hasShrinkwrap":false},"8.1.155-beta":{"name":"meetup-web-components","version":"8.1.155-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"31dc8329543c96f14b2c0026750fdebd549589c9","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.155-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-nnQQfp4k4uTucuZ+anL5qjsKN4OpJ6WWpNGzvDUy5oeZM/J1SO259Tm2ct3b9kLkMEWhBAENyt1pyGn0EeJzTw==","shasum":"7e61152d1cded509bbb2988992fc8d3e4326c675","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.155-beta.tgz","fileCount":631,"unpackedSize":3074532,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDbU2Gnoo4qAFDUYYZ8KZPgU/Y9xLTuAmMVtpyVOMh4AIhAJoYzca+Flj6aOdCyqaSmF5LkY+UeYHhsc/AbSjalOfU"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLTXWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxZA//XgRbaBoVkr4qaAOTmpDxl71au5ahTA2yDwnhNoKSHw9VUzXZ\r\nJ6X45bvB+n2ce6joNJAjLAUSRXGzbP2giblYVdd7bSyEzeIsNClaTCF9od1E\r\n3Ky8QmLQpY03ExeY++hdQTtGwtCDC5PEpuUIjCjioiuGZFdfnN4upalN5ycF\r\nEv/jIpG1OMwH0IhsA1mY8+VIf1Go0lPkPwlV1CpMvwMDty9L41Vrsl49W6GY\r\nyIYWjKXUG/ux9PqJMt2mrqjYL+uKIyOKJTN9xlh2ad2OFTH836mPaKgp9fit\r\nOpN1vz1EBVZuoAEGugL6QFwh6tscdBUqe1O4lt2wnxzkMVeyvd4RWFpN7YJj\r\nz6JAjs0slMqSrz4Jd8rCzFEQHCvojkLRCGn9sNioVr0sPsERnU6dxlyJ6kan\r\nhIVtCr0cr74M8mvT7Rp9fMgVN327PywqgNvVoJV0JkihrA3I2ShMcCL3xqGD\r\nMdrOuFsQIH/p+BC+Kh0qJJ4/zE1uw19E5AT8fhyCTAvGEp3nVcNNIIDEHtuj\r\nxI2Esg/W64mj4uNoFMo7vkodYaj0Oeo6mYzmXPW3FBOQIER+0r13H2BWtxIf\r\nC5oPLUHg3F8s19v5mBhbfVQGeC9lwT9s8bSciyzLH6jfBEi/bO2gOkMUyL9I\r\nWwgn0Y8nCzR77xrXBs42C8kcYAeJx+isjgI=\r\n=LYDR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.155-beta_1680684501819_0.6485563339731937"},"_hasShrinkwrap":false},"8.1.156":{"name":"meetup-web-components","version":"8.1.156","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2671ffd632fab2b973b67d34603878f1951115c2","_id":"meetup-web-components@8.1.156","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-5kYNC+jbwl7LPS2q4N6y8Gfo+LrZ+9AeVYHBqvq6c4yGcGNRFU/YDmFSYdPV5VY0lBv92nuDn7dr2JU+H4RAew==","shasum":"e3fe8950da8aecdd1e4a0c672c8908f38dac1366","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.156.tgz","fileCount":631,"unpackedSize":3074527,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8lV7bO3bU5gibZB/grQCpINc8T7FyZc14vqSrhEoOEAiAKrJS5yZ4xbRZWwHuoIE68dEhxJH9ZEpR82c75JsTrqQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLTY/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmolvQ/7BBKvlXtaKrHcHgRDdgXMRVR2SQoaWMtyE1C82W9eScTf8rYv\r\n7ZKKjkW9XRUxw5KNhEStlWl+VKOHUmJYAdMC88ljxwsK9IOPEk2ix3GDGpe5\r\nkJ2jK9z/4h7hcJCw9rcLTXBwUVKH17dBZlokrnd29dBrRwJfXcA5YaDVxX8a\r\n22JO8opaDrA7jUSe/ZIpNNbgNgWwnWATHKb4HuTcKQCty7wcnjgECwUU91Uz\r\nBxA0kYUt3Qt597xxhlRptGooKJXiJL0hRLeYrtDYieIUpCPXV8Tj1YcTXSEu\r\nXpFaiKu6IpxNNuqlSMZ6XJFhWsKWxO1G3Qtj9uufktJlnIhjDBKRnKCx8Uet\r\nMCL4PqAdlNIdLbUYy0ywA73IDdnt4J7pGOCN5WFPY5+PkPv1Q0J6vxb1PwYl\r\nocQd+21/iUwubBQyAjSb7S0HGtbNDaQbRF4c8NRUG2El53ztuWDmBy8menoJ\r\n1cboGhyKu3ZO4M8arKpE5nctGLZHQ0tXAZ9+kdQ3xzMhVEnhvisyxa+ajcaT\r\nenpWb5tncBx8zgDc0W85fqTy6J6L2FZZhLGhnJXuHu/xjefTnXxnWoFY6iQC\r\nx+2ilIQUfZOc3B4nPNG41Ad+LhHttuAJaeixRyfX92gF9/R3odz3IDLbE+vo\r\nQOT5eShyPlIragrg9w+cw4wDW/+Sow/fJWI=\r\n=57jO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.156_1680684606803_0.6107133849872599"},"_hasShrinkwrap":false},"8.1.158-beta":{"name":"meetup-web-components","version":"8.1.158-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d51fc070ac89ae0b0702507a11c8ffce6b2e71f1","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.158-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-DGf53hnq62+Wnwi/tlS7g6hDQbZy459nUrQXtGrVmRvGdzNGQ55FRC+a29M1Qa5aaSvdrASNJ3CykbBKliAtwg==","shasum":"ac36c69233aacac17130f4c79ab7a3223b5009f5","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.158-beta.tgz","fileCount":631,"unpackedSize":3074822,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHbJHpCZtvpiURu6WYWGt2pz96Yk5cfrFpI4TuDhYGAKAiEAiik6WQnrAwSm0o1BUsowcivDfYcBaSOL6d7E208xW/U="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLTtSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZQQ//bFVKjGlcU0L1yhb31Iot6oZim/O3ZdbWvoP1wQguPvbS44AY\r\nMMYSSjbZ3PQ7F2807zS4cE0uEF+OAPUmI4nqnTKhkXXiY7bgPb/fyjjJH8TR\r\nUCarKx886Bvzc3eNziTaFRgu7b4go9Mge4DKxzV0sUaBIvB1w9TeAir0xGie\r\nV9mkWoeU3rhX90fe/PPcDK4ZYaGPcfrkyYrs05Y0bXEwzaskzUENONQPfpYQ\r\n3g14QaA2YKDymDm6dJ0NIQ/FUti76SG5NNab3/AMwDRnJcF55VL1ahzhSadD\r\nkfzZ406mVafKI4OjRrQxmn5h6TL8/jyr2b8jsuLe91sGNLDgGJUX7zrrQMY1\r\nvMd+C75zwsDVQAUVkLa64xkYuEeDM6DGXaZA1pcGRtvnrvTP8GuA2wDr0iEz\r\nD97PBll+MP8EkxygeAYLafhpnP9qYCijtBGkQKKHFzUMeBHI4tuvzzAQjkFw\r\ng4z370Q8v9lZWfNHmOxB2dF7w40riAIXUWFwKqXXBK/3NBMiOPI27QVIdtDT\r\nsnDelR5F2Z15cqoO0G3EWrHM7/b71gbBOiwsYJm4isWpJy7v9+FexwHxpOgC\r\nSmnLFDs+8DD74tVlw4I0IW1UbjTKoNEna0YSs78BdMZ+SWS1jbhuEgboxzH6\r\nEzfYKNLbxlHSv4n6+nN3kiPNr2UyZcnrozo=\r\n=zWcs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.158-beta_1680685905979_0.32877125095684256"},"_hasShrinkwrap":false},"8.1.160":{"name":"meetup-web-components","version":"8.1.160","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"32d3ba74241eb97961419d7d0f2b7d4fc7a290ee","_id":"meetup-web-components@8.1.160","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/SynFWKUqbiwrHkJ4yVpLbI/olJ8ADd/wyXzL3VbebBVQmNUqCIif0sy3ZTkcn6Q3XrYykr3Y2Ad6IxzAXrPyA==","shasum":"e34672bc815e95fcd43e66d400a6bfd0048f6dcd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.160.tgz","fileCount":631,"unpackedSize":3074817,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHo2+PZVwIHqDPJLl5vzP7fqSGOzJg6KU6OW2MQzqJ0PAiBzvQ2oNJsNqQF9EPLAZBiSNSPUO4IwIhq4b8UqmQ+KVg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLTyjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq71g/+M0SRGdGdi8QqwYEOaS91NsjNWfNyk4QAunSU9A7LDfKTLcIU\r\nIlXaWUvLVFQNqtXy6FbztfNVMon7HkM3nLPCXPysJDMEgsRNHd8A19jv31HL\r\nbVjMTCjzJqRLhhtt1P4DduReEV6pfty2lnUCqBosRTR8s2WIFEhy07s4XeTA\r\npFCpgoC0unP0c1QccafO8EMn2yp2GHfR4qAFBMCZLOcv34hv4jqh30xe5mU/\r\nW7L6DDNvwUZAYHT45kcyab99V38wZoaT5z8vsm4ES18AIfxxVGbvP9sHFnPx\r\nU9GZJW4Io84ffZRlK9mtl8zjLidsd5bDuyvSMzooqG3kXBiwTEY1K/+nspkz\r\nD2uz6w7hAlWmCXExjdDvk9j1DmBLlms63qoiCuy/m1S+J+gW6FXTe4iKHnmC\r\n1qcP0ZymuGIqLSPP2nWyahT2hqi0kThInZtWoTuolFFmoFy4w5GgTKr6ELDw\r\nARDJXhomeNwFRQPY7c8XRsC1bCW1GaeAUR32Sx52AEUY77NNCnBWTUGAs58F\r\nK3tsdT1GTmDhXHAZRVlKxSb7O4SYaNZF3W3xhuBf5b7a2pnT+iSu0kKVJhho\r\nXgVwePoczWIQ+bgJDkuG2NSNw0mAa112q40ESDrRPtv4/iywCZvKkbDcn48c\r\nRJvd2/OaPLDHrCKcy/S57BgxKXrD+gebx40=\r\n=vi79\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.160_1680686243197_0.6701573961496152"},"_hasShrinkwrap":false},"8.1.161-beta":{"name":"meetup-web-components","version":"8.1.161-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0e088c017fe3e7c5870675b04ab12a37877eb335","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.161-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-KalCBXIUWICe1qLnnb+JOR2qqwO5sBgrsqdSNv2zg/ww4YZMFPkMhXKU3U13PtxBcg3J/BOQ3s3He7wm3chUeA==","shasum":"173f2cb13ba3e689824018ebbaf32f4f444048a3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.161-beta.tgz","fileCount":631,"unpackedSize":3074878,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNbTVly8Uq15LqFQK2rmXQXX7bGTQxnMJrptpD/guaaAiBr37nfBI9wGsgRGO6cIUzfXY9e59mRPdbXdGoDEP+dLA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLp5VACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoIyQ//SBfut35SHHZb9I1/Dhc6TGxhrUEwhZDjlbde4wqnQcds3NNL\r\nZHW0hP5UClkIhnaf4nxzctllKN5S4r7me8D4udtXM25+8oOezOKIEbMG72jI\r\novZGHmZw+e3/lEBOROh/B+OFFXPITu550PInNQ3oHLCpgqGwUIWE5UW26Yqd\r\njn05914ko+hob2ILvZCIrv2cSv6yxU45gHkKfmOECNgxzI7xrvRMB2FUJIMe\r\nv3Z+uyrJhr269ReupGz+641VA7yk3SV5MP77JoeMnW5OPDHdciZ3giEZvR/d\r\nr4aMajtlnaHXKAsAzy1BDVFO24laO4DY4Rwn6ha2nlGSFqDDnVfl8IUMoWhM\r\nMtMKAEzlMqILCLiVMXgxaV53onYovaWRgGGeG3Tl7b0zYyaX4ElHwaTV5dA7\r\najQDg8DvNVTHLRc4+UDcF6whW1p3x87009Jxl+Njb023NCshluw6CLcwTL6W\r\nYeBr6YQFsWqflgpxNX/Ri5P3m1rq5/edLzB+Fo1OopCZ4xAp/Une5XsDF6AM\r\naoDupKkR51H6Voj4D86/25XqKa3YC8Dy/K6ctT1dCwVSADwqien+8JQbFmdt\r\njnQMqbl7oHW7YjRwbRgWRA4vTKhyKNDn28nXsp59VCS+lB4aZb8E2lTiCK4K\r\nebIUz3JTu4ZcbOYhhwtGs9/gEVXJYkCTkqg=\r\n=+bC1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.161-beta_1680776788700_0.6355471293276567"},"_hasShrinkwrap":false},"8.1.163-beta":{"name":"meetup-web-components","version":"8.1.163-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"473c6a531024e32c06800f92dea9dee95a5ae396","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.163-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-7c0fpHlbpamaxjE5B3wm0CG0Jc75LUf/9RyJrP8TnCGMIBy1O+y1GU2enT3W/DQ4UT7MupW1apeqQWyzlOMJCw==","shasum":"92e28860835aa723cffd501a393966aacb0eae4e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.163-beta.tgz","fileCount":631,"unpackedSize":3075268,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfFTcjKFA8uOUi1gC8ffekJ27PzqJLwPIko5KDsTIFlAIgSGcgGOJcNZGlVcFgajFY3wcBahT56WItLRVJ/PBFkvE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLuB5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+bxAAggfAlSpZQ/O2xWpsmTgH/w9RY1tpJl+aV0uy+YE+MxlngCRY\r\nKRl7ICx7yrvlLS5JEldjTZEWFmF4bVmcbgFXuhu/y7M91sssPr1VTH/hipyp\r\nFHQuRGy88rnosdjPCqNsPaPoOROqw91uXQw5lzuPRpsnuGqBRyZAqEgJ12Zo\r\nsPma6P+ZvuD0YleM3nGw0K14V5rWiGSg7XtbvsToO7lh1hdbGuPfhrKy0PWX\r\n0Y/sO0BGRwTthzmovdX7muoarlEeEd9tHMRf0xCu2oMEB2PjiGNyGZplHpU5\r\njsrX/+CwmF9GkPqpyY4o3+XxF4ZNNkmYGx+d2FhFcCWFv7ZOdWTmbdhX5YOS\r\n2dSAgkmZ7WGOY53tn5IcIq2d+WrhcoyKLd3rCLWJVgIjQCqcqhlp81mNhiuV\r\nvksgn6WHJ9OtuCPs+gmLi+m7MhiAaOEJKfY4W8SMyO7d9WUvYsDPGjLOF62Z\r\npNEJiBdM078Gm59W1f15AJ1NnyrqVDtQjnofgtJEJd2umDoZouHpnHHBpBu/\r\nj/9gH93lh6j1UlVkcmsltRwd5hgRKxqCpCxs/smNBDnJNGPfLVeniUaUqt4d\r\nK4XOla3cP65MWhgYGz4w6uBUxeXGl8/tq1aQCksxDBUaGzLssJ4XlToWXhJy\r\n6A5c2gFXsn6fBX5EKpbVNxrNiuT8oU53M04=\r\n=hXwK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.163-beta_1680793721320_0.7673768311305413"},"_hasShrinkwrap":false},"8.1.164":{"name":"meetup-web-components","version":"8.1.164","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a6bdd3d04ae9efddb0bb57fdabc9f2745c46c28f","_id":"meetup-web-components@8.1.164","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-8HUFqsjerGk03pTom4PnfHo9T+Z4fqk4BjAQH0967SdT1vw5oSulbjfw0jC4JdjCIHUXyg5V96X8+XkdELuqFA==","shasum":"7441fe0884dda444c84a11280c91f54ead6308f8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.164.tgz","fileCount":631,"unpackedSize":3075263,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkBLhfRLERO2UBXXzPmubu2t0yAZO2dV9u1cLYzLBJPwIgHUS++0EYHdmj18VmaEOc8+BP+5HQEpPpVK8fa8fv1EE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLuEMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqW6w//Uqwu9Y9qJP0pAAIMeNb9dRMbNwWxBgkI/ysBGVv5dp5EX+L1\r\nNSY+JJwGh45Sr+nWHiyP06BwCtrmQQlNeFVpl1YovW5teDC9Ym3LByR0se4I\r\nBfiT6F9mMUNrjqxmajqX7nnTHweR8y1SLJ0I534FJMkVBOsvhw/EqjPuYELj\r\nFUsO16ivyk69hFcx88Nit9B5soWbNHmcYc+47uC2ouoq0Q6FnwjjpKIev3Nk\r\njPO96aZB1jcBJYxWH+7q6qzw68nqoOE+WQXe1/pLAYl/KyPvb/dtkulxNiqm\r\n1o/Y5CXPGh0YjViy0+WIDIa9o/YpEgyWUujWQIxoVxRQuBXe4JOqVSeAsPeu\r\nnZ/Ti54i25hS0gpckHkIpUboii9KNOgTqnsBXKEuTOxbg8byKG5aMHfa1/8u\r\nQe+qe7Vui+jfCThHqerTaizVwl6autjoGSuPmSfQq0bIW39mwxCdPavlI1J0\r\njKnBX+wlJYpnqcV9J/Da0njUFOnai3HytWkGBGE6ebsIWJah9FxhS9mAv+IN\r\n6769vv6bMuR3fkbSsnM09vkcmw+ibhhYLyhRc0ds6KllfDI+FHEwKY/XuH3Z\r\nbZsid1bgwE3N4WKTBDIPEIcQrtqEi+PAnmV3ZFf9YCg4jPPfHjRn2hTkoAmM\r\n4SfpBrb7w9laOYT2tMNqdXtWobhq/o+2P9g=\r\n=gx/L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.164_1680793867942_0.3286866724088575"},"_hasShrinkwrap":false},"8.1.165-beta":{"name":"meetup-web-components","version":"8.1.165-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c9d722b1c351b76990661448ba1c40496eb54941","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.165-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-LO9rjVEAa7L1nhFFjmt9oe4J79WibxgGWTKl6fAaoIWoW39q2Ht7P/iXYQ31j9DfW9TfLGigsyJdUZLGp04CtQ==","shasum":"6e4b0dcad20e0728206ec726912cc8725b1f7915","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.165-beta.tgz","fileCount":631,"unpackedSize":3075481,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDztsD7e4IksLPBbKfBPy3gOPQ/5O5HUCpneOiLEysCIgIhAOR4b59RH6EosGCRMzsm/KHR0QpoFn32CaTz+uZuqIQF"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLxSTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrcRQ/7BY6/MOx2jojfYz3K2C4advjloky6Xoyrxz7zr0n6u4nl3WjM\r\nsBx6bEFdoXzLJZ6i7WV/R8hkNXdD+7DLKFXqpU6FPw6XcnNi4rGxS3tGBjDI\r\nX4Feo50o+L09P4O1OhRc8IMxbLaTAckCMs1ptSJukwORleTdOnF8+7GsCeiE\r\nx7tQwvd2ARJXyY2cBHMJVhSdo803C+pwsUCkaAqZ/AFXh9NPCpx5NHWKUc+6\r\nFD14b4Rp/2ZlcuqjYIdPWnURXlBthoo+0TlBi6qmrho+6yhTdB64l6hO/2Ca\r\n70q+AwkfSvFI3YzMCg6xd8ctiBJHbFZviDodn6F8xJvqBRh79vutQ22FDn1O\r\nUY+Ou01xE4/1nni6zJp+A3PvZw6xDb6XYrBOqXFBzlWIPQp1yOpG6hO5qBTw\r\nTbg43XYVUp0WN6DBcrBS7X+1cc/cNZbcgwLXN4e7IQ/m0K8LPL4I/pnulA8p\r\nmtsD1gcsEWpugaep/krLn3ldegCGLB1q00RRyw8uWg6Y98d6U99vwb6gw5iK\r\naKE9ffvxwTkOXtHZ/ZnyQS3pLmR5dJpT0CRAySf91lKOhNJZ01JQsE0wBdAK\r\nvUUJXOqx4MLRJqtzCO5LBfko8nvMEoyhVI+5lo6Z5qP98OMt+ZkL6E8Rne8j\r\nTaRRNd9ISa7SKtaEEX6CpE1KK3ymH0hwUz0=\r\n=BhfL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.165-beta_1680807059361_0.9188428377773794"},"_hasShrinkwrap":false},"8.1.168-beta":{"name":"meetup-web-components","version":"8.1.168-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"547fc66583bd05756078532d1cef47568fce1d80","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.168-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-RhlINmDQ9WQsDUfi140Oyia4EhsBFSLdSXVeD56JLmiUaDAnKR9EZ2KaY9DHHp++VjUIBe21cc8zQcFMpy3f+g==","shasum":"d1de81e2e488c4fd6c879c28f279a8663cd2ed99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.168-beta.tgz","fileCount":632,"unpackedSize":3078619,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDUZO8G23q8Md3RNFDVRI66GKYpFcFsEosMkt9NdrlLvAiAOvZl8I62eFsFQefQKm8jOPf9jo/PfzT71xuQ1bf1PRg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL+VRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpI9w//a3Bs81f85UHysQiXFrnF57T/d2UjifZFr714Oc3An2tANi9P\r\nNYVoVcY5gDh9wu2SYeXnxNF0ZfTq1lKv8CINyZNjrU2UggNCV/iu3byHY5hA\r\nqe0Yyx5YMnNbdzIpoyPmk8lhII8Aj6wdrNRM3Fpj7ErzpXvq7XvmP2UTuz1C\r\ntSriNj+qk+2UfmVcf2lKqyShZr/RpQansOKaXOeHSDI9nClmr4U5hUH1XeZh\r\nnI7/SwuOzLfNfAk7gaBdja7qknx6xh6ff+KoWzUolzMNXNkPglElwYoAXZOO\r\ny/GdW4GIhaBggJhN+o7mxyBC2ZssMr9ihEi1cB5r3aj9zQPMnXSUiorZ57G0\r\nmGTNdx9JDaKgIzLFV0R1YA7Ps3ybyzPBgvLv31OiNMCdK23rG7ksMDwPXAcf\r\ndunLKjFnnEFtmkSmrC1WPqLco4rRtSLDvbTHMs7cExkYrjGYThgZOImq/UXV\r\n1RNFPn612UUDWJZ3FK7ZOCsNMK7TrjJvLB0rbxerCap0dfrocIepLat+dPqh\r\nmb6ARcq3rimHe+M75pb9cdYUhLkv9JHXss0B4dTrveKbfrCeZ0Ti755iNL1B\r\nQ5l9G3+ycG+XKIiQsHR2qjUBsVc1AeoIafswapav0q/t/u3rQfiUvYoKBhU2\r\n4DuNuUdD3UmgCTc/o/IvgamSFVVo86FexSo=\r\n=6eKZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.168-beta_1680860497457_0.7223489821347846"},"_hasShrinkwrap":false},"8.1.170-beta":{"name":"meetup-web-components","version":"8.1.170-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4ca9f6b02c433dddb029b9d8deab32530547dcec","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.170-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-hejnKog6u+REgARGj3Oh8irG283F2OlUbZIoihOkeIeJBD3ZmfGaQGhCfplD7zIKbnmhR/9t+PQSYOq09nExVQ==","shasum":"ca8df36d1b2842f56b8cce5efe963387598ece6e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.170-beta.tgz","fileCount":632,"unpackedSize":3078887,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAbYTu+JfqhUzeo2WPl+oc1ZI3Mmn/ejtEEmt9E15EtQIhAKGdy9sIkCLk/Im4m0SIaxxIonswu3GB19rmElkDWQ0M"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL+6BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYdA/8DMoNPcrnGUy6b5MCfFxpFJ7E3hKOqTTsUTmU/Sm7uTigCDgt\r\nNeDstVZBOWeCX+S35ogUmucECEZjULp2rBoBWWHRUKr2AiW5lN7VsPwVLcn+\r\njxgLaath3Jbxorjt5SFKtL9GAUaAlUVR7/y5Bn+CzaoLqqWpXDUZ80oX3Si2\r\naV8FKJ4Iz/W+9LUouN8ctY07JZm1Fmt65PTv/oix9kVIK3w23oJZ3HITT4PX\r\nuULe79YiExFyYiMV2Dl5fATX1xYyP8r0i3NbN5m2kav1fcatm7kfM6pyZRPD\r\nbl2V8eBhUqIteM/k0sWXNbJmTOx23IvUpM4KPeBIM52yKjwkr2VkR4YhRSPR\r\nEXzcEZKXehLRGWuTMPPd5ugUoCcEOYCB/pdbydpfmTSfKjhLPGTpq+pfNr77\r\n8pBelRnwUQcU6iiKhvSc3DsswzuT7dpAYrQ/VTRiUcJ3kx4b9s40tB8zGiRA\r\nKQS//TT56b4iyp6sIy2rkPR96H78R0rZhRoOGw/NJnt9tXdlro7OARrp0Fnu\r\ncC0yTvdFMQ+heAj5zVl2RfM0yh70jKPrDjiaLa1EJ56yjKbwzxJfS6iUB9Dj\r\n3qLMt3LcNZxnduJtO6xqENOPssR4yLUCXDJgwf5B6bOnUxoQ/5dq1vIPNfAQ\r\nM9kLb3FLwUbSoTb2kKxE54RaMKVXjO1z4vA=\r\n=4JTt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.170-beta_1680862848983_0.47793114399787373"},"_hasShrinkwrap":false},"8.1.171-beta":{"name":"meetup-web-components","version":"8.1.171-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0db552f3d68050daf7ccecba43071edd6a1aa5f5","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.171-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-rL8qP1IB8ACyzfekBLclUxHx1emjE0bEPAuRLPficzFmtG/arVwfwutxB7i+eZY5em0xatdmpMNnhAl0D+eFfA==","shasum":"602877e54e1f5121f175e88fad3699eb0436c749","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.171-beta.tgz","fileCount":632,"unpackedSize":3079384,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFe0IwLgE1al6rMUaCwlemZnsVT0gcIeO+3sXSQmvmqpAiEA2bXad6J6PzfZXGvrnj8WfXfuNeA4FjSMGZLF4QaJrXo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL/JOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmooRA//SlNDZjRKmd3rg9x5qiXrwQDm/fRglv9PAU7uA2IyT/VM0Som\r\n1et10DG7Uf3uZWl1u+JCSG1iknAwEvQ+KYdpFDiVBRvJn5DpMn8rGNNdIdnE\r\ni1H433xRnP/HlRR00DDt5rAPqLbH3uvF89OjdFkNauWaRNjSryR9HvlwEFkJ\r\nCBOzhKxxcIvL6hTueXXXvM7aS9bK47apUK/iBH1IrWWILL6D2h2tTYlWfIsR\r\nCIKLaTPsAixpFipE4b1NL5VRqjHdhhcgRs7sQcC73ZJWgQk679f/u31di4+a\r\ntmiZS0GzU1qtyOCnuxe+RT4MczgggV1nraE0BL1mIIrxvoJBIWabC3kmf0Zz\r\nzotsLEAIQPYqKCnAOYyHYoFJwJcjAraMaunXvecP/1SeVTKLG62iYvDBVKR2\r\nYLO3G+qldVmmxttcVYeHqhmq6B+YaSP5tS2iwIJ3dncXmDHkjNKD1W5Xdisi\r\nbtbb6PwyDWuEdi/SAQIwnuBXCtujZW+b+aD5V2ZUeJIAy7sJsP/DrRO6wqLl\r\nrzyv+DKzaWcwWeLYnw36Gp/mWj1EQL3u7KcqhMnpgI5OGXF0vn5O5U4e/tVM\r\nqabRIwlgpyTcX4Fblf2Za2uGbjou0KQd9kNYUjj13etdzeN9B5oGbCdWfYu9\r\nFdmKiC4xFmlb3Xm9JkwZCqDk6b7RV8F3+oo=\r\n=vOtl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.171-beta_1680863822224_0.3106724395257441"},"_hasShrinkwrap":false},"8.1.172-beta":{"name":"meetup-web-components","version":"8.1.172-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1f72e6a9e72db92e5b5bd54253c311dc7b348560","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.172-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JnKl23sEOxAkpLxmQP7kbflyddiUIqCW/KjwCIU6UecHuEH1wfy0do9sRD5RriYXQc+mx+js+cAsTpCaKmChBw==","shasum":"f26525d6b03a27052c45f409f470f22aacd48f7a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.172-beta.tgz","fileCount":632,"unpackedSize":3079414,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJNMxMo1mg+jkiLwH9+wZW4f6xK+nRGlDhemcjH6jIwQIgbVSqT/mF3MbD2Hey+OJ7Uiv3jJ0l39PyKCPQV4TEkOE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL/beACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpfyg/9G0kIaWkbaOOE1Xlw3Wl+bKYTE0lZKmKfMf6FqIhB92Hc/ks4\r\nzn0v50yVHs0wkYTd5eZD3RvdXYLKpIixuO/oym5GAhKxwZGBcUP9FJwMQP2W\r\ncWWkiOuFoJLvK3ez/ptijmDiwpq9XTaPoJCO8lh32EC7hMVgBI10/amLb2zi\r\njDP3G55NgX/aog3rG6v13xsqRBCnprQ6ajXz/bfBTlPgCPOKvskmjJf+8PIw\r\nEtFIa4H44f2LsZBuuGIIbLYarpCk9LZIlbbcgLawYCH74ulkal+xu6nMBxKA\r\n5Cwxyw2IaxGTuG8koXTVzeHYV67QL+cMbrvgvxxFfFoJ2HN4uluA7ZcvIiK8\r\nSb0aLcRxNiUexa3jKhfvkRx/pBIv3vORO+wpruHFVhBMawcFOxBUykMaSjwD\r\n7u8A8DheiA1kW8wZblBaXNhCOGLhwmfGX+unZFpv03NU/JQTnjfq9/F5d1kO\r\nx95x2WL7Bk2lmEVfBe7r+kP8m7Yb0S5tSEyG9WQlPpKI+meCyIOf5TjUno5Y\r\nUCb7SeB8kEUTtpQ1nAOjs5aGgxx4mnymrrino+33qQor3DYzJWrvfH5z3LRv\r\nSxCWY9DcIAnyc+Y2DaCqHiOO5fbqpOirk8ozLuF7eGLBwE5RqrDne3FgcFZc\r\nJchtCHNPaXXAEVM0adkzZcU3j8pkNF44H0Y=\r\n=0cox\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.172-beta_1680864990345_0.4517305955187416"},"_hasShrinkwrap":false},"8.1.173-beta":{"name":"meetup-web-components","version":"8.1.173-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"48f13d75efabb80e7cc38f61358a1b71f046728c","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.173-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dWzTCW3dwZaXpCAz3Mtkh5xC/ugylICFqHFHo1XoEK5TFCLZfOW7SxPFC7syyFOb2nug9sp34RcIenM+j6m/cg==","shasum":"d7ddefcda4a39394a5fd7a4e43d2b4ddc3a7d5e6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.173-beta.tgz","fileCount":632,"unpackedSize":3079398,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBT1fQjBkNmWy/fYcNiln3OXfYMSxZqWFdxjO8C0Go1pAiEAzAtCeX6akXPw16JsYvHjirMdRqFYjQaeGZymphY0n2Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL/hWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqgqRAAlwN1Av1EtRE7RZxZUJuqrahTO640Ox7OXA59ZWh4uoA2gTG5\r\n/fF9anuKdOJpJexTQiOZBugYxYSWwbwER3znIG6YPN3J5cyZV6njb33dgydQ\r\naWiGkyQbu+ePYBlxJF4bkMc7kRB8wpcY/OpYwU8/liMyit+csW3EpiVa06s6\r\ns8FnpyWLQWugA3t/FfWLsqWY/PXsMYK63FS/39LrpqicLt/ryfLWXljoewEY\r\nwQQNSl+mNcFpH0oMmbt8Hu50vb3jZQ0PXdrRm4wAxXJeEN8rw2hQsge/1p2s\r\n8bx6joPEobYk2weCYRRvd44dsKfMiekEuYhlrVknPdrwNv/MzOlWwG5CZT0m\r\nWHNwd9mChi4P30pMFGMJoovcaiL73yfz2R/ssgR98SKH3JylN7chucGMMTyg\r\nu8WyGq8Y/D2k2AiE+bSNTBfYeY1SiQ/Z7NELY9OoyVklS9T/mC4Hub9wvTw9\r\nPEGVUvHvzdv+zx1a7CUDevBkl6nT8AWd0IpGbAUh+R1ET+HApoQ0PKebQ5Gv\r\nm/OeNqBFmtSCZ9uJK0zdGKt/W1W/ZwtSrUY1YL3hIBqfQIMSp4Gpzt3RRQ86\r\nePqErZYQ0DY6SGCOJENW366Wxc23/GVsxLsxAKzSvEvDNECUT+tygCUjwXTn\r\nlnzw7ZciGDUDklFoFp3zpxRqlXT3ib+Y2Pg=\r\n=GB4M\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.173-beta_1680865366184_0.3732797397682397"},"_hasShrinkwrap":false},"8.1.176-beta":{"name":"meetup-web-components","version":"8.1.176-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f46488996b8c32720508277ea3de1a157966036b","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.176-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Ww01cgiS5kof6VpnyP05lCvTesaPfkXejNktA2+00DiiNwVPytIhDpUMZC73egsD1f6RKNV4ydIEj3CY/Vx79Q==","shasum":"9cc4ef0b81e96c828f1f0e86530bd545984a5532","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.176-beta.tgz","fileCount":631,"unpackedSize":3073916,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHDHaHkdSGQOFXfmmJTKi77YHt6Z09i6c4PFct/vq1WQIgPxjg5riErX1lJ/PJXYz5gGTCXHuVIJeWNFDNla0+WZI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMDMtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3eBAAlYPEunLEEP7DYYQ7jjW7Sb/bfJO/veNr6UTxdp7aUYLP80T5\r\nuIaBYGKKCmbmKOfR9Onk3T/k9/yTpLPldapRBimZxetji2DR/nqElJ8uTkGg\r\nTAuUnYzjVvBt/hcmyFudOy1J4So6HAQBrgo/TSton1AiZ3GcHl8l4+uPXPQ0\r\nZZ/jxjt9b4rt1CigcOoK1NRduYQifijiTrsFaoY/gPNUSxYGeajd2yjNfefc\r\nmPdv588JszwUh/V2o3OO/dIWKo/b/VGHrRJspgwHtcciquBah/Ud8HyzcMTH\r\nDXtHThhN1SRufZ0oJo8Yk6qK7EsDSQuYUFji6qKadfG6hh86zqM6VLRl0USi\r\n9fH8eXJsLjuw/A82gXCXEpPz+qDmu9/mUMiWFVflWSnJiLzdBXC9D3+9WVHH\r\n9iZo0id4ClFFCCpOsF/wrDR1woZyXSstzaFNRxYDJM+XqrgyKscHxoBzNmqL\r\n1aPxieOO5uPHGnyk3/BHC9deF+XU131BZ71F8RiLw5iAgaFASo669ZSkVvq1\r\n/XsNu7CiGsUgoJVjdwOtb2GH7txgLbS4YIkYLA71hha0XJw1c6KhwvxytkCQ\r\n8CJmjNwj++cRBXVydio6XSuOwcoBnFdSGl0ynsyGr6O/8pp674k8AsZf0RYQ\r\nzr/sc6M6aejJ+Wvb4197mYz8QCt4fqg6HI0=\r\n=1cd3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.176-beta_1680880428952_0.7456396813309938"},"_hasShrinkwrap":false},"8.1.178-beta":{"name":"meetup-web-components","version":"8.1.178-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ce568e94299c124a386e07508c8a613795a8352b","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.178-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-vHPkoSP92/7p9j9V/QnaFOXLBcfcPLqmA3AaMoqgSbpkJJ+3asPgBc3T2/ZH69BKWw+W4Bwaf7OoDkb5RDq2vA==","shasum":"9c5ab9ed91fa562249fcb978efd2819e59d612bd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.178-beta.tgz","fileCount":631,"unpackedSize":3074062,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBP3LF/Zngn6hu258A3+PpH122uFQXzkL4LnZR/QskWQAiEA4c69XnyNYdvksF9TkohEC4H1Ceua9WcGVeJFtSh+euk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMD1lACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXzw/+KDdh9t+mWNcJOFoLshxGospEOjr79lUdkVS52fT+3Agk4yZw\r\njDohulj8MvkMbQX7DmeRQlxnU1LAl/IH3FCOVYkiIgVgTk5ZjLKKJSTrTC1D\r\nu031o6ql7raAm8VXipwOSe5F1R6zgiyZwdF73TIFrBi8DctgKXJ4m1QO+LEG\r\nEyoJBIO052L7ScrSaGfeun65UN8sFF5goyqWnNt2GOs04mnvketQmbsWg+7w\r\ngSM1r8d42y0m3ITA3KOR1+n+vZSCJHeLRxnXBGvTaEvqPZEidwTMwJBsg16t\r\nxhOYj0jiuvnOtw+kDQ5ZZGBI3F1FK0lNUL5YO+wd9lcrO1rUfljfEwDa0b5b\r\nMcDZfy/KpnKdlyiJBbIFLPOEjJhzrAKroaS2y/7l1nbl3li/HiqGXdHTlbkW\r\nR4Pvf9pjkyGaPTmRiRoWB7bWj+L0l+oETLAOPoM8laLVgNNid0L+gnjB4ys2\r\nIm0gVla1ziPOglZfyB64GqAIZ/XzOI+RkXwbHkfk9U5yEq7skpSVl9Ovu1rj\r\n+kwzUTt8k4L85hXuIvzJqLzbhzOBDKqrpII9hcd55MH7lw8P4V7clTmWM0US\r\nEpuKbVunEp5nI4UzsamdTmClCT9JSKzbWwfkHLdvix9pLgIgJOjf1gOTTJSe\r\nFKG5mbl+Fsf9IkPQMnUFpattILtPLaR01bE=\r\n=834S\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.178-beta_1680883045063_0.19418071915425328"},"_hasShrinkwrap":false},"8.1.179":{"name":"meetup-web-components","version":"8.1.179","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"203a015a28eb664e7bc54f814a1ad8730119cb30","_id":"meetup-web-components@8.1.179","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-85NV5XFoONYBu5OdQjOwjJvBhA3nGTzGd3UIlYu3r4VtOnH707K9HdPiI2UYtw8MTlytEJCAei/qcrgXZxeTnw==","shasum":"fcb621e2b48eb92bfea9da22bd731d75edebceb6","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.179.tgz","fileCount":632,"unpackedSize":3079393,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7pIWNE/NVIJEb3sTE6fc8I5rSF5Pw/v/NXayLYklztAIgOvnkwEsgqaHBA5H0rO+dwzUqXtgYkwOTgpV92W8RNG8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkM75KACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoRQw//VdcOlOrDxzdCiMpUPak4kmJzMoQh3qXsxJoMjnM3As3U1+/O\r\nI1JC1yXXIt3Px27wz0NMtisTzE9aAuMuNzku72jmOjsPe4kcjG0oIDSgiyuj\r\nbUmY7eqxNkffde+VM70xQTa+3fDVEIYgunkdkrbV9aTF7QRHzO/SMr+Mfv/8\r\ngAFpwilB8yZYOV8nOXo9Yo72MgvzWFX2TV5EJGAuStshERtvSQeMlHuA+CnN\r\nx5u9jPkixKho/H2zMCHLfNTxHgIt3ItCxc2nl5VRBu6k1a9+trs30P1/v1Gx\r\nbfVvQyJs6gc23MuW8qsKAlQlmNQhsb1zn9x1vXzTEmgOgjaRawkG1mN4F2cY\r\np9OlwDwxsUrpmZ9SmXsY2quxtXOSIcEKRUuzQ7MihoR6O4hPFLXPHCuk0Ize\r\nGRRq5QrChsxwrbwaLisWfFDMEG7ecHGByJYdARYJI0gDIHIzRV+/0iNF++4Q\r\nPvNxJ6Usmc/Rw5pEA6EBfhEf4CHQhdTonGi263nZgFr/LF1W5BCHYH9To+lU\r\n+0fi7VqDlxTlB5ESiaV1U/+PrijSM8ebzYVvpBqdw7SsqZ9Yu+P8IOXfgtFy\r\nR72kVhcdFCN9QqmCk+eV/t8PKQgxHgGdey0T8JcHS9pQ7KnjNiUTNOECeHz7\r\n92rfloxenU3C4CtL3sxVL7b0SxBXfBcYJ1g=\r\n=ehdN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.179_1681112650546_0.1509052565804665"},"_hasShrinkwrap":false},"8.1.184-beta":{"name":"meetup-web-components","version":"8.1.184-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e882eba8c1dbd96e1192ae604b32b54927a5a146","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.184-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-7kOXPpn37lOqafi4y6Lk1FnwWhv6wROaZxXNp3lZpJkDZp+O01t43pn61gkOmFdB05kTQ/W7vYnU1gZ2EnUIog==","shasum":"14ababf8d83efca17d96a8543acec1d786ae6af9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.184-beta.tgz","fileCount":632,"unpackedSize":3079773,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDabcH5GmCznJq1rW4W5Gjbjtd9AjtJxeT0bCAOcKQ+owIhAN5N3LRKnN56KQbOXLUtoHo/SPAdy8m1Hk3noWOJTB5T"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNB+2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpIZQ//c2oBqoM84AusbXVStX7DM5kJvZ3OYVuF8aMEADIg2LI5dFh1\r\nC5UPr7+bdnQLqbjN8j4Lfeh5tLD7waP71VzH5j5kZKdiLKUSdyBgic7tm/yO\r\nxWqWElT2KMLtcpn5TO8kIbd/p/mrKGEDinTwGoB5b9EyUoFioWwXZxylNh93\r\nmSJ5Rbh741AlVFoHfYdCipkhwjhwjBozbf+SEli3U5EdCCv+7yWOvMGughzX\r\ngug4Rr1FhjzHHWw8Fl+FyHYhoVhGWDgw1S5dGEtIa8ozYqNZJhtOSuDEf/QB\r\nyuJyAZqLrwqHSRfS3o7zFbOU8O1YDWWP5FMYtXigD1pvDkGyNraVz/OLPpCi\r\nqYEoz6ALiXKQclTbQSP+K+p4XhsHEUjf7bO1G/RR6klPfiKRkt7EEX9HmFNI\r\nuPcplJmRT9GRpLOahhSNqPhixQyrOHunJJI4fSGjfpS2D1gRkOyRtrI2SHeN\r\n3IssW4hTqxFzztziQLBg2vq6R/62h3vTwP6NT2tfB4UdE2Njp8PR4U73/TmQ\r\nwZnlcy2T5NE6EZWjK64Li/zt2+MwfqKHQvewH12EqN5CIbmVSjstn5NTz1r9\r\nmGYbG8fL4LMgUX5IDyQ4mN3hxfILoVFOaLk41Co+krubE4eV8GNrzOYpegty\r\nMyGlJ9DGl3DjMho6+SHjWqK0LsKEwHby3c4=\r\n=+Ie2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.184-beta_1681137590616_0.22026585835911594"},"_hasShrinkwrap":false},"8.1.185":{"name":"meetup-web-components","version":"8.1.185","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b21946318878fa8729a1959e4395810c316dc3ff","_id":"meetup-web-components@8.1.185","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-HeqFc5ShCe2+UrW3Z1SBvhKsvfcqACWSKXIrAAEvDUWbwqmx7vjEL2/PPSoDL5MkFRAkx3xEeNX3XS6qORx/sA==","shasum":"0e6b15df133030bd7992917599194c24572a4d8c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.185.tgz","fileCount":632,"unpackedSize":3079768,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyByaHL7JVpLp+8OBpJbmmRqrTiWtEYAtGP3ZK6RW3YwIgSgxtfNOuMshzEgY57FP9in9ncUQpRPjnoAS4H6IvpUY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNCAsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmowvQ//X3gDR1ZcJvLgNNXqxEan936wsGI+1kqq2OIMpmOFWH+Sxr3H\r\n3NL8GZ7nazXBBPQz1pG912LFLApYrs0LEJnQt/j8vlLV26j8QKsXd1XHVuzj\r\nN8xSmRluxnYs3IOY1PWR3NXbfxr1zWe042/5e94PMvuSN8xnUSoF1j5gZ2e+\r\nZ4pmW/t+LemZ891Ux/qpTQg/K2CjhQ2KHin2h7gzRkSzCjwDFl2CWdZCKkM8\r\nZYRL/5gLUqv4QO8vvwo78+cfm7kTldQ/r+klRTtnDk0gC/ux62nws1FpWzbH\r\n3aIwefZ176mh34Aa5caeab356WVyTcsBbHkajLYGRYIPNrh/hgqdQ+FOhOz/\r\njG7VAX1ZKcizGD2IommlvnSwZ/bOkj07pMpCosAhcTR8x6BgjZaFdFWorlMW\r\nUwUWTl3pQtux0h5PkTN2GcGHzlDk5ONmvAicRNKksb0A88h4MKlWxlW0hdQQ\r\nEiA5NoDB/9/fdl+0OtZz617fMnUAQRiLYNjGTIC1K4oGJwJSrRcyntt0MFtO\r\ncx5d3eThjzQxpTRQouTebdvUBWS69Z5qD5DkFo1C92eip61UDFpKW/FO/SNh\r\nGozeBr1DwLcJiSAkAOHAsOBKDXzxvO+7OvR2dFZ6fDx08GbyYTWKnVclI1/w\r\nD/bvHrGXZeSvnApWJIaUD3QvMMmwuf1mFcc=\r\n=eBq9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.185_1681137707753_0.2392021662195647"},"_hasShrinkwrap":false},"8.1.186-beta":{"name":"meetup-web-components","version":"8.1.186-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f1dcc588eab28304da704084cc806ed34b190b3c","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.186-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-UJfcC2Cin9grHKd9p513+JkOAD3iqASGChZnzRHnasPwGnK+6o5YGbuU8icpnOyqsyT591DN82bJMCs75NwWAA==","shasum":"492673e1d4e5e90f3d1da857b7b9fa3de848c1fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.186-beta.tgz","fileCount":632,"unpackedSize":3078314,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDtiYf2VGYR+cFChfeZLPO+0g6ivEF7Pp/7+/H6D1H4fAiEAizFKy1nOt1NRZuK+isHmKdd/fYH+5KHl2kn9Ac8ewiM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNDL+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQEhAAn5Xmmr37bidh2t1kYa+efJopmvzxIIolVKMtD1NaUYvY7BrA\r\nfVmahday+l+XKa5LL+Gi5uG+H5KhnmFl63q7L2v/Jqd2mqgBhe+jRVVmhNHB\r\ncH/bMx4w9TTDJ4SoSrODCPLvCHHk9I+SOQd7DfZXxhQqZbjGwdOpnsnUL0CF\r\nRvxXEo0SR8E2SaGYzZSdkDScY/g4r9wYAmQYj2bXvguYASfPWz5Z2FQPPE6b\r\nXCh33pMRUZurclbqwrjj9TUwbute07SAaYSfrmSoo92hDNCygDdsM2Bp4qX9\r\njzhB/ZrEElAQVwIl12kE96HBDrIyPs0UG5Ts6Ydr5bX7pctGS5yjONfvFiLA\r\npdXLxd3cwHmGY5YxU5fh2h4rmnF4y1gtoQlcTLeG14SR3Rvf7Ux6WmBbtiqU\r\nIjAOpDSdLWrwfXOI2bI2nbXR3fNrDwPkjXArgYRUYDdvSffol/wRjiy+b3Mq\r\n3rff872glV03uAzWrN5Lej5P0uiN88q0Opdj/wZHJt6Q2tkCMUOLofT2mXj5\r\nW6dpJYSN7unfIIURoF834XP0d7Uf3TsBt4+x4SV/OIq9FxzmJfW+wLopd1+H\r\n4f2caRCZPLPOHyKqPsny2Eu4EYYOhLOiKz7lMgU5qcRT1N+eEFudpM/BKtzy\r\n1H8JcVThs4mkiZ9V6//gaI95rvKmbFOhBCg=\r\n=BZ79\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.186-beta_1681142526474_0.5800585048619884"},"_hasShrinkwrap":false},"8.1.187":{"name":"meetup-web-components","version":"8.1.187","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a1cf44dc0131c117aeacac58b4961f98c0276940","_id":"meetup-web-components@8.1.187","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-A0e/dgdE5XpCo/Nj3bHGEJxBdeuCuCxiImJKGJrmBDJOBvucMD2NXf8nYJbsj6z/0sgFHP9BRbQ1YiUxzfz/rw==","shasum":"4e6a0138bc53b7512f17824f2f6c087cfe0c489e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.187.tgz","fileCount":632,"unpackedSize":3078309,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDcsraSidNHNTYEI2z+RgjjHH7GcihjM+ajwrzlVS2OOAiEAvFtwfpIgC5lNqJFJoF/qfavi9OwgtldmsBKQJMCz0Ps="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNDPZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoVtRAAmTu2tlLNxVQlnnGsjb9z4q/PoyBefEpJDSHPBwIgNWZN71Ol\r\nlq2X4TT50yZmo8ihGsR7vhctBBHH8PB3oZ7z8CWQZtbvpL73wvAroeGes2Oo\r\ni0XSeZBKpLbqmkzSXUzTQlQtktNsPZy/CouqelaVLi+OuAzw0GTXDmm2sfTA\r\nb/K8hTOiwE6U32wlzuXp9xM2Wk8uPkzmjPCwAWTWWpn6xjhvO97N2PbtDAGw\r\nJ1SKAktvdF4DO0i471OANcea3Y159ZKw2Sk89lGUf672IH6jOb46VwhMc7OK\r\nl3UzuQGiTUQ5ZbRvk4JFWtkZjZNsfBeiU420jZcv9AYDpTnQFuBZBcMjMnmO\r\nnJGTnc0nansw2PKmBeTA50EoDco0bND3/4swa24Rme+O0JK9vsoBqzj9tswC\r\nedonJFE65liD/8E9hN66lZ4myK9CUScd7H/rtJTZPfrGnLEu1X38pLvbsprF\r\n5VyLFNmHI6a0/S9zO55DENa1larxTzSRGY/SzmBZlHYUMmohYVsVusaXcg2q\r\n0htpXQ5sbRj3vI8vV9JX1KiKfaZitTwwzXWtPDyXd3ZeNDFBbeAp/pTi49hw\r\nWoVat83KenaFdMHW8SWKw12pk7Tp/LZC8k+FwiYbv/hSVhEWuHHBDxPk4ydp\r\nPaTUtQHQ2V9tAZIp8KG0ZL62FAp7K8w2yLY=\r\n=yZjH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.187_1681142744991_0.8426299993302622"},"_hasShrinkwrap":false},"8.1.189-beta":{"name":"meetup-web-components","version":"8.1.189-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1271634df51016812be9d6bce6191a5b1774d59b","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.189-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-x7RX+DvooMASRwsrBc8/UEHcAMW9UY+A9M6tUdqmuANMJ6oSo3359LMKxPSsJLHjRJnFEaWbk8pVYaLixda43Q==","shasum":"0ad00ec5f36ec5b9ebd7b08a081d2f0d855555c9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.189-beta.tgz","fileCount":632,"unpackedSize":3078343,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAHoOa8g0CRuev2dtZVQa6Jhc3KwAoBekuFplmxY4RXAIgRtAC1JDGwat2MlNbDiyNBhwNYmx2FURtgnEdz5BFCAg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNRIiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpB5g//eo8omQ8sTflg9Gycomdd6kpr2Et/2DrcwIkpFvEwiV0Gue1o\r\nmOuRkCPWe2YRWMqJXd+3mGdZ3jb4MCzsDGwSlpxCCO8zNx/UChuyt4jSuUaX\r\nPsTP0bJGWzFv+JpXooTnaZ0n13CLpRZu7oDQUqmms19gDj2C2Ni6AISPZjbP\r\n1mLqDoRV0CfAfWY1AeuIeLpTvNRg1sgDFbVSzJmyGWrCIzK3Gh3WkcfxmQP5\r\n2u0MClCBIUYY1ViwVHhVehE97jQh8Obszhzjwd/XD4hdJFsLgrywsJ73RYZU\r\nH8xgAj7Cj78B33S5eb8hfrT3nCjHyr8IPJllZA3sjIRrNjRC2VULk13y0Idv\r\n0zN8y3fGYCym7T/Fu2FUP2Jc16oLTg+YwcyVpQKpgeYI+bTh/BmKUT6l1urT\r\n2WeO3JgAvVHGZQv+HPJNPBP6bPmdODkOg4tYBsYVXfMdh+zGQANuChd4F8JH\r\n8HenvumCwkyW5Ur361RKRMHaQh2453tZTIAVW3FdCRBm6xG/BPR/s/IT5aga\r\nc+Fyw5FN9dtILIUvuDreLzAxZxqcynWOwqnNvScWNCA9spEBn3PBUsyuSY6h\r\nyG/+kP9fLqiuC9MDg3jmKd2aUzYTuozJhDN0/u4sXqmjPOtizCrU136tmzF7\r\nBmAm55Ic3KmUqYu0lFiYABdvrktcbWhMZoQ=\r\n=kccr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.189-beta_1681199650331_0.0606826631127535"},"_hasShrinkwrap":false},"8.1.190-beta":{"name":"meetup-web-components","version":"8.1.190-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c74c4b750832c75267dee7b783fc8d6177a2863b","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.190-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-je6/aCmEH78YPlyvHLJk6EBqF+5Rcf+PRPhd9TW5c0UHhG8yJzkleNpWqYHZJrJEIWQ6fzhQS7RWyLAtT5gePg==","shasum":"519d44bac3305f696c4d349f62bd7b503ae8f5a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.190-beta.tgz","fileCount":632,"unpackedSize":3078365,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBR4gbgHaL5/5zgGNMvc6YXDeHNJr1Cw+zUa76EkuAsnAiAjqMZWj/o01q1IQCsacOL2iyrDHHWvRQz7DuRS7EhXpA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNSehACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXHA//Wg4gMth0N+cXZq2C1kBgShg4TdazdhsYofYcQQ+9QtYqD4ox\r\nvWlw5LhOeEdU+Jv2noC3gvCxwtjIkoYcOezQnfzU5Wljcdmb+lIkEoOVez6n\r\nP2ukuc0vDpyPsWXZ2I5jvmFqg9Z0VjMuhLTm6mr/36imyAamN17o0uD8wKfb\r\na98WMUTcFsyrmkRcHy2HH7uJDJCTPoJMJXI9xsaH24Q6tyI7MHvrJXXTY/Xu\r\niqgZeCp7r/2n73AepZBJ5tHcBIUFSd7n8yBpZjDGzz2mi9PFfFyj7+d1KcQw\r\nvCQwzRHLX2AOCGvtHmle8ByIbF/jRiU8LGTHENhXI4+DQRuPdvibn+PTh/1J\r\nW/VeNUsooTBOLGyuICN4gup9Pn3Gozu2leIx/Z3QhO7zYtyobFrkcNAV5hR5\r\n/4kTH3wCZtrBVfF956GviFO+H3EhBpwDDHOlOeqvekEAcxCzX9GOTs+ZfPEk\r\nWgbu0RRj1Eztob6bYp5+d3vLCpYA27Fs0Zvel/7u6ucrsB3nw4KiK6SDsNYk\r\nbOq09gsTubIkHY17lAAEAcad8Q2nVsH7lPnyKfo+ov35VZGEASnBco4bSPia\r\nO6TZiWGLFXs55Rkx4Cp+gNHLF7M7UJM21d92nZMmoDiQIQ+JhFvOZWdKFX2j\r\nj2ZzQ/CtBpUdy70udxN7pGq3LyPKYLb2G7s=\r\n=G7sm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.190-beta_1681205153388_0.6894177923389129"},"_hasShrinkwrap":false},"8.1.191":{"name":"meetup-web-components","version":"8.1.191","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d0cd59fbfba848c186b2bec952b5d6c4c5961952","_id":"meetup-web-components@8.1.191","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-DpqpVWpo2lVdMArXaKUD6c6ko/KQBdzqj9sb+DY+qUB/kqCT9jcyuYtPRdpc/Bv5jruQ2iLBks9/+F9vwgqeRg==","shasum":"d9c1b15ba77b13edc8837995e3e9be10c498f941","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.191.tgz","fileCount":632,"unpackedSize":3078360,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDB5T+4pms10fLWun0AE9wU0WGFweUacViEptTks2WhzwIhAOvkj2670TAgTfP+Ilpz8clu4zWSwCUgOPxEMYPLbGgv"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNTbXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoyChAAkSwhcAd3u2ld4+UVRy1VuPFLOfosGq31WjWt+qZK33ZGSiqH\r\nV6kSx2+/iEFbksBz7NxeMAXNbCyVbjBE5HlYzrL1j17TW7e5+wQ98lbA830J\r\nvd9nOV8VS5ueufDCnWkMLBt7VrM/8o5j+ZkniMB4wd8I5rXbR9RDUc6Vkfmp\r\nfFC8FaxQ55GG9/UPtpFOssr481nSC8wvo7guhGWz1e2GEeomd4OIQN3xAVvt\r\n+nygzoF+dJnabc8gHEtzdevcanhMh7QRnepweWKfydALslcUgTCrNKAH1E5w\r\nXdXIvvJXpQ2b8mWeSyKnebqWgHlExlnJYt4XPVmOxaS6mLtBFSDVYbgdoMcG\r\no5W1vOejGNW6Q46EgfcC/wQv8Df5CU71oUCE784T/a+cIElAMQwwXps3Sjhs\r\nXAbnldhXoLUFWj4wuGl3fSlqXyLDm2gHCx5+NZHUdBG/BLVWofZT1zz2HEZ8\r\n652dD0kICmr+zjVqG2cC5M4/xZbOiw3WSkVPb2T1keT9kJWyxmc7yW00VJn8\r\njz5xAMiDEcatPXiGfWbvepb4FT95rWlNagOejnyXLCkRGC7irkyPxrwoXOZB\r\nVUTdxR9Q9TIibxXBQwocPCwWHpMCLX72K5Ip7EPvcULFHYQSXgkZxKAA3Z2O\r\nfzBh1eYeTDRPP4ONuWaztvBhfdt3A8A6xMc=\r\n=0VWz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.191_1681209047463_0.7793063180502156"},"_hasShrinkwrap":false},"8.1.194-beta":{"name":"meetup-web-components","version":"8.1.194-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f54d5d24f5fd17f6689380a0b14e23451f40a721","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.194-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mAFgKC3j/ibatqT4FfqRe13dcCNHEYDHHJG2VSw5rSpcr/LbI5qRrmwgvQGWw248WHOKuz62MrSRWUck2ejY2A==","shasum":"fd3305aec0b5cbe04f544e15cf6141deb129b07c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.194-beta.tgz","fileCount":632,"unpackedSize":3080719,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFQ80vXRC2lnKjaQ+1a9Fi1MyfH9QnRVXdqMGvK1pNpwIgaDXbghaFpCVE+zzj7DBP2eOntKEPZQ1PRXrbusHz9DI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNx0+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdGQ/9FLHECVyuffM2GAdoiBNhi3vGkEOrZ59blqgIjEUk91IFMN8B\r\niiM+uWtBteFUiYSDPHlNFKZ4kBe8ev4htpVx61abufu62FVoDR5Bull0dJIx\r\nIIjK2deUajE+cijZNdJvskRfg/2W6G+lxWUAiIfF9lbnVh+IOwiGcl7t2RDo\r\nJOnlWKF+CQpZV8Xyw6xtFeUW28uXCVSrMGXmK1p3x3k69MjXTj2RECSrm3g0\r\nn29oDlhRLlmqWFzPxOXALBgSdJRbaetxUemGi3pEu7pzSvSINCBDL2pta+U8\r\nBtw1lnsHXgg/60/YwMRWAitdIi0Sm7VgxZV6CrgRVS8QDutz+WNe/UmIoQTg\r\n2OH/O8AIUOsyyKnV55vOwgkdMnrNzykvi9keDpetKKUCdUXqwxAgTR1X8p1J\r\npAig4PDeJqqvNO1KaeFBiyLn0ZKF2MHObmeeX16QvJrRAaopu1Nhe8mWvNRI\r\n8CQHTFJ6Ur+YhFYrIobqYzrtOvOmzhqvpKKNt+2Oec7IlP4mCCdrne2gff+3\r\n02tix3qjAKRvup74lLXSVdSfQF2BfNX/60yJY/qoSl93CbXWIi6/elpHQf5o\r\nKhubvEdMfHPJK2d21EcikXBrNEU/vbXUG5ZxXvFo7/p48rk4CWnoIMsLaBap\r\n9e6q9apJ4KOVt2YyYMzONFyzdm5cM7ZLSl8=\r\n=hvY3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.194-beta_1681333566162_0.1436385891089118"},"_hasShrinkwrap":false},"8.1.195":{"name":"meetup-web-components","version":"8.1.195","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f8c2345dcc1d3f7d0bafe4c2a80cb9f252d89501","_id":"meetup-web-components@8.1.195","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-UK3Pgc7767dG8d414SalOPxG510xYnI7TzgZOpLUn+rJuuHYIcNBSW6pMSBnLNXo/U/F1Jn8UbyhEhbH4W/TdA==","shasum":"bf1913c07ac4e68c7a4fc606ead9a8dbbe28efcc","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.195.tgz","fileCount":632,"unpackedSize":3080714,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLjJV/b+rUBrdYON85Ps+PiZOvMByrI0UFTQBwpdwPeAiA8/3AS7jC1eTl7BuR6CXnjBWCNtUC8SMgBxvOjUwJnwg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNx56ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWNhAAo9zwtEaxYm7sY2fjYE9dGMOEILdbZ/Wd9lEdn2DjPWptISIF\r\nPy118g7Fl744zwOY2cR/UeCFnSrkp+m8YHUTn0sqL0jsq+PRTJMTBWhRLTvi\r\nuYtiZ3JA0KvgR5zlmLrAvczPpcPn6z5/Oz2hrENgr809hGaJJhGonS0XtVPJ\r\nAxNWVbZeMjTYMIs/eC6MEE0UWwolvt0a1M3+DUDjnZ6gtJxycT23eUH6ZHzS\r\nAgizxmaIv7+cLls4ItRY21+e2/WfwOEqe+M2GY5YawMZbuB6Xbxt/grjWHov\r\nn1xXZmaa3bf1aOpwCmSyddNY0QwytSipL5PrLISbmxgZbkYQ+YcZhn/13jfS\r\nNHYJEhkg/dIssiEwLTne1ZpnbeiISpK9ltVaSizPy9LltUNAlJ491ZOdDykn\r\ndQFV1UyUGiD2L2IUgNFulTmr2dTF22rgYjCcq9PTXErDb/Ep8yK2lfjKE8/j\r\nKRg88iy1P+xeqBPCbauXmTKIuIbhrmoFFK8h0h6FwewTzuwll1ov0VrVP78m\r\nc6YhHcpbvPSLNXk/xRu+yD9p78XpgGh7iQwTb2zsnymLUEIu4aaJ6bwj39mN\r\nnQ2wXJizStkedPWins0EZctwpvzSBRq+u6QeqiSt5amYTYyI57acqrP7AzIB\r\nkZCn2fM5+67+yeiKDUwOovSzocp26yVgbt8=\r\n=Gm6t\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.195_1681333882232_0.13755286419444435"},"_hasShrinkwrap":false},"8.1.197":{"name":"meetup-web-components","version":"8.1.197","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0de9c0af12b8673b055df687cd9eadeef6d0878f","_id":"meetup-web-components@8.1.197","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-x/oKUsuMmH0baGFa6rEck45VoYCWyTpbkHul8xWSYS+MU58Gt1qzS1yIyguuijHAb3QbH6a5QyhqrZnvMZV8hQ==","shasum":"d65d3e3ec75241afb9846562cea856aa7ccaa3d3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.197.tgz","fileCount":632,"unpackedSize":3078360,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSlFY4vunPyefeB+0bntqmZyDcjdgrBHc09Turv8s4/wIhAMEFhVr7IbU/7Pr59G0BWAkln5FbSW/4cucIHDIPP9S5"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNyoMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpEDg//bpiGqJnmm/pUJoPODeK1C9S1p6/sJwKCYuYsRtD05FUYbANp\r\niXeqlRpKDf0WOMHrwT+asmNfgOmg+yRyIt01xSgk5ap3IGRpRgw7g2/epAkj\r\ngQwKSM3rfrZkOMpJly/Mryfx4G0D+IRs0D8j0nv1o1sWrrZ6C6HEtO+bIgE/\r\nTUMJL+Zi8vbwqFzLhLrFt+AAwH21I6ZXsvTPjQaAF/yW1Tgw0T7686EmuY3H\r\n4NV1GCMBZFUs4nTRCBl9f+FtTVz65MX/rusc2KPNxV9UJvlYQhzl71Ldqj40\r\nkS21XcMn0fS2of+qOhNgBdwUnfkymzZmIw7CJQ0e5IZupsfI6z7FJKKz6HwC\r\nmKzfWziqGz3rdW14K7XtkeRZkysJXpnnVYOs2ygQ8c8ExqCy9FrKW63avi6E\r\nORvgAxiCSzua2h6gBQYdHoOFcQylJqRnhqw4qsVQ7H+nmrJQlRwIcCGCKcjp\r\nOmfQcpx7wroRPt70raUq0lHbOMmxTxq1MrE2YqrJuTW9UG1v20g5apU32YL0\r\nNNooIUbkGjXdAXuKxcrSDXihb5PvjaH7MxAqGUPu2CycHLbIWmKMbZibZFXW\r\nSD3+4MMSGu2ujcgJ64Fu4Ekq7W+6xaEcjCLNbEV/2UyZFfRY0SdVkkUjzSvE\r\nyXfQ/uskVyVmX5rnozWACFhg8VCcDK4DBtM=\r\n=RuFB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.197_1681336843764_0.9780495924072639"},"_hasShrinkwrap":false},"8.1.196-beta":{"name":"meetup-web-components","version":"8.1.196-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"58f239a92b5270ca32c780f3a3e4c3e669bcf4a1","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.196-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-LKzSu/anXTb7kITIIk6QduTlkZLgGneeL+yhbJchFgQUF28qyqO4bGiIGlba4kgjWBOjRxtSLJ+7v1sPLX7GJw==","shasum":"3f304cd7e19b5401f69b1d0a3b7e62f02d27bec7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.196-beta.tgz","fileCount":632,"unpackedSize":3078365,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAxlW3v6Q5rF0PIVyydkM9bhmVRlxuoAHIBVf45Oe5wAIgXJqpU78ic06QJ9XPsPILcmflsX7vbJ3XQUzRta/Mo0Q="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNyomACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqotQ//dFtqfaGaxSICk0thZwswNoWxKKKz+RIxEnQGZxNM+9LhvSZO\r\n0Xp7O+BpmA2AokcaWFqEXHbRPz2u07K3TCQOUEFa8Z3vyiEmN9c+eQoUbz8h\r\nstoqb7BJnUbMVz2LKhfiNDGF1ub2VkRx5woSnySnpRP3kYlXa5Z29eglDtQe\r\nRrZiRH1VaRAHZYF0QXjV0s9aGh4uaFG1Yr38fh24b0ASjHjMix9ZMBrZdn/A\r\nmcMZihw1YQ1fs++Se4YUcwkJOfjho0LgQ8vu0xQ7hLULH0fUKINB8Z/lWraw\r\nnxh/degCTBHuMsXE4MlAg70zrYA/D1UlV0rY5Qmm7fsM4dOlpIqgA5sLdNGG\r\nLmdTghWS2eQoVwX8PhAPhYp2GHFmaKaFaV+4nPShqlixqAi2tN2Sfr7xZ9DH\r\nUy9m3PvXP3olIwJPwwGDc54wUMPUYGg5ih1hGGwmCEBvJcL9UMYmWPjW/y8G\r\n66/e6+Bu6aadsQmM1+fPA4wnTrBd/Jr2epYlsbtV9My/Rm2DgREBeSRa4KiS\r\nA8EOWIwbH14gRahBhQ7Dr/5YJ4FxHG6eFEtVkVBFvHrQjStQnYR62AEhV6ih\r\nqZsQSfnEQZBWsF0B02nuARJpz3forQeNcCfVqICVGqW0bphP4OESsOa9A7UE\r\nkaYI/gEzzS//ALdIbbfQt8rIkRqjqiWCX2k=\r\n=GlLh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.196-beta_1681336870082_0.1935315645531308"},"_hasShrinkwrap":false},"8.1.198":{"name":"meetup-web-components","version":"8.1.198","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bb46b5ebd75f76a78555caf7e0dad71a2abeaa60","_id":"meetup-web-components@8.1.198","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-3Aj4pK7KNVLIXJdEGarUs9uz5gbjl3j6W932VSqHThkKXxMlnVkMYepcNJkq6+5/J/tVPTzXHA6GXoK8FUp6JQ==","shasum":"ab750073b86c28524e40ad86f2219c4a37e8cb44","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.198.tgz","fileCount":632,"unpackedSize":3077154,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClCRFWQcjRzSDrF5dEUzcTvBYfn2cnKKl4RzUqPYP6sAIgZdLz2vBd3T6rS4fBSFaebjxV/LbyYz+WWMkBMXrkqTo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN7+ZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyrA/+JUH+HG2gJw43bd5G733g+lXvXMZc2YAnyTNR00Us3FhRdkAw\r\n/zF4QwEAznX9Lg9nXd0shOMPLdsbd5gpWPMbGUXcP576YH9AT563NA6wNyg2\r\nqve4r4A8WE+LLZkEXlZo2qLuwA4Y3QATqvo8vgJnfq/pZOj09PIbbtf0i8vd\r\nP9sKsd5cTel8m+jwZuWfGvUFAeh+kxyvE6L2ojWL20CqSWOjA/sv07I/fr5R\r\nbCquPm6gGFUpV8xub9sYhrpTVRkbxlOG1OzZ06MkdGZh0rEVOoNwU9i4ZXKW\r\nEyyMZ55eYiNkRLwPv/IkM5LzpuZBUdojHzFLPU1jaHSZQo9Yzrx3tyDFjkOq\r\n2nhpWonQeVPJR+scEG42ZimgQM9CZPCFPb+CQ3mJsPMA0p2D7UdXrBJmQzmz\r\nzsSWoot3flj6txHuF2i/NgeJBQVPvhWnskOrhHDgLfRurBZWNjW3Cms+xLJz\r\nBtTidZehSQCmkxBAs7xn2TdA7j6X0pD9ki9k/JS3hMI9o6wMafGBdyUVNVPM\r\nLttmpuehMPhIf+ZORVSJ9fdVWZ3Qrz1+FMCQ9/JEW5+49eK+AqtMO1w0uJle\r\niprZ0tFYSKL9SUvqFQirBs3u83KyOyW3ne5bF6e2SL8ZSxo1AsGFXh5P1P4S\r\nwpXlgQSP8mu4Mc3xVQ64bLEsmN1c6DJl3rY=\r\n=4uvu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.198_1681375128938_0.2993673805129238"},"_hasShrinkwrap":false},"8.1.199-beta":{"name":"meetup-web-components","version":"8.1.199-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2bd537822149d6b234d557d4fe64bcf6cc54f0a3","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.199-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JeIdcFYf4eI7G9Wym7jwFNTAMAwxCX/702AIeKbaQQGDxUotzZeu+tRGeaWrkel+R7Oi+azG5b3QWyJ8BszaoQ==","shasum":"092921e759071457dab087c1f1e78c211ac968e8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.199-beta.tgz","fileCount":632,"unpackedSize":3080393,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEoJk+CQyWGFV6S53N37l1nTx9EG5h5WGYZ8Hoz2WIWdAiEAiBFWb3n+b0Cvt7UaFsqDmkj4g19QJToFO1awkAm+pAk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN8C+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr5gQ/9FSWkwTs20bnjhRBIe2USC25rB2oh5eZ3fy9mn3ATnb4VkPcs\r\nRFlu/SHIt2IRY3QtO3tutl6xC33YPTTndb9ugy8gZda0pU1i6Y87QNXD2fyD\r\n9jmp01taIVY15256OISOe5yTvevA3twYwDEKK/Po42NiiflVzh50+l0Dp1tC\r\nSJ4P1ySEXiebOl5mk2S89fjVVg1riKyu0Ugxb0lYT5JOLECXCM5DxT0RKBwI\r\nluu79k4f2lWvzz7jaw9f5x85K47x9xvrM9In0zahqoV7cUHHcem8yOhzOrs2\r\nsCqAt8zSBhiGOwQiDUqBCI7bS8U7iCta5lEef9l2qtnU61Yl1SHQo7h/mhmq\r\n+pyJDbxHo5B4vh46Dps267l1Ka5BdfxE3SamBPPbZeOV9OB4+0flM/GBxKtN\r\nYcw6fx0wgvSE2/4LtCmHyU9QoVwj3db/1s0m6YjuqCmyH0yeFhBiCR/GavWZ\r\nFy+MqEzr/GblZvJuiObkfVaGL+TymNgn1+yG3dibFRvUE8djZuHNJVYLvWh9\r\na8p6OTMj0FYjhPH4ygV9KvQVpH1egMXWjqvR4BLvXDHJ+8UzaM7ceDg8RXBy\r\nQ8Qt3aCjQQ5UKahaAxACmmy1FrXdETYwDyTuMUPKFuQvb+poMmiSmhCSMci9\r\nrjAkYnxF+EUZ8a1eLTsKdS84CG0ZsfEVsFY=\r\n=ohvJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.199-beta_1681375422292_0.9879971044029259"},"_hasShrinkwrap":false},"8.1.200-beta":{"name":"meetup-web-components","version":"8.1.200-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"16d9ebf1d3d44fa8d37cf7c10385d6edbed8ac36","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.200-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sa1zNJB05a/vMxlCmRFu2jjr7wEcQSBJPZZ9GpbGHRBT0uG2OqtZg5NvleYjMZaaDCpcewAlQtpNzYh2oC1K2g==","shasum":"32ecf75e3a24f85718e64f6c62a1a45befc0b95c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.200-beta.tgz","fileCount":632,"unpackedSize":3080677,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFtFrc5A6voorEJuEUokli4NWk0stwkFg7yzKXB3rPKQIhANRHeqWl4hkj44HceZumJwbiM0bfSlAcQ01Dm0HSQYze"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN8UcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqBww//Sh1N5kg6oMsKb96ubheXkLIR37HUAfYO9dqGtCIgdIQBjUfz\r\n3MhMPi6EbhQoqPJww12xPj6hq9r5sYRmXbp0xCMJ2EdrAOyZaVY7qAZcr8zr\r\nJiPJtvRt3p+RjhFxM867oMlzP8NimWZBCy68JQjWCqMdsU9qwDPalZxyrI/y\r\nGCa2C+BooL3hMG2D+dYoW+00Ih6nLlG6ZWwU4TFfPU65zB/FZWL8j9P0rI7T\r\nNU2J985eoHsHevr8rJS2QWdBLRd4o+k2TTP6IA1MLAgSMX52f0Q6dpKi5WfR\r\nOa4op2g5vYWKIyT8IfmiSfeNN+1NNw2R4afiM2c/g2OsUiT5TkLzl7J2fd9R\r\nueyROPLjPRnIYg/5QcGXt7+akHusjn68wBlhJMVu1WjxNkitC4sFXhQqSkL8\r\nfAint4dyb/HDiVD/ZbgY7qgBih7B/v8WAZYpSU1dJGg19O4JX8SA0RMBxZwy\r\nFfiIn00pTjasPq4GYHysxi2UJgDyTWJjfdGwUp4BKxubJk8JrXm1E17KexwZ\r\nP7MhYENl2wpejRnhf7w/qNcFj2gsWhAeXYWulxFT5aAeVwtSE5QfLAzfXNeU\r\ne0ginldaE0zkOOKMkPfKaYgbUVwXX7eY9t/NePiw5+pr5q/2MvUDO9YKugRX\r\np9X0ArilXl3AwKlwHixepdrVF8qBjVqTopI=\r\n=eplt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.200-beta_1681376539804_0.9135926676027508"},"_hasShrinkwrap":false},"8.1.201-beta":{"name":"meetup-web-components","version":"8.1.201-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"734c6e2d56ff14ca7f9daa92d8bf2bceb528c93a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.201-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-84CISh+qv37fmxWau1R6sW86qQsrn7VB/9mOucSiJK+G0GTkbfgo0W4v6ZNZZhA1TNftYE88wHMTzoC1YrvMRQ==","shasum":"24edae1d77370e6d429aa59ed7599a25f7c1f015","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.201-beta.tgz","fileCount":632,"unpackedSize":3080686,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDAfwh8JFkGlS5uFamhovgHzVGrSOjTYcCmrwK5ubV0NAiA5ix7c9/MFjMTZMVAjP5fes5zMtcElNXwsmSz4ld9VbQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN8xDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9fA//c8xkGpEb2Yxf45gFDRVqtV4E/jR6L5yWnJRF/BST/7Gy/+fE\r\n0YoomucLQVdDnWbB8o9wgWC7C2SXlxHas0PDxKi3smR9yIgtp7ON6JFQj8Eb\r\nKzHW+sY9dPiqGHso08NLSTYnJwfPvTFwXAo1PTS3ZGPqjgvtutxGqryw0A7h\r\nEYGodNThw+gRmwTlyC6rO0asrleI0dLICq99TN3WfwCPdlI9mWi6xtxXYYGR\r\nuJ4U56xaX6dgfR5lUSRTWKmEpxkPm9vFCd6X92DCO0EMSftCxKdgSE9UqMdN\r\nWiM3jPPiLHfLtVYnBdjARZHqo8wYq0nQIvEFcqw+/IuPCmtf7FgXL9Sk3GCT\r\nwCuP4zYunuq/Qx27NrM3Q4OoMPSdNGBg1UvwGQncb15ATqSUs2T6gCume3eF\r\nARbiO6LFIterZP42nY4GEl447kwgIcSx0C6xQgUBC4inSSVuUvcN8i1evmai\r\nHxBSimBn0KgfDSZ/YcF0VL1VrtFvGolhEFVg3eL5PtoHa4kvoPw+CJlXs46g\r\naVCzQq475c/o3OKPECY9wE7lvhjTlDkgg1wEJA0GC3cXMw8bAM2cCQbW0GGk\r\nMJOwPFm2MPdmJ8nf4JBxencv8mYRBdw5bfNGTIJLh08yetm8VZDn0roqXZqF\r\nDdpoy8KE1Wp+ENKYeD7WrqjjvLZKuWldfhs=\r\n=d91y\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.201-beta_1681378371336_0.2106160304955118"},"_hasShrinkwrap":false},"8.1.202":{"name":"meetup-web-components","version":"8.1.202","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cd42ca24a1ae8409f79e146935654b55ba368def","_id":"meetup-web-components@8.1.202","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Rw3BvsBDjjAEjx6LKBFoeuoqFTxNRk3XHype1bJ7DRdiSlnvvKkzazQmxlBt2CDFr4S+BSSkflEfervwSn9trg==","shasum":"ae087ea1ea1759d5cd46a638d3dd6061bb91f7a4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.202.tgz","fileCount":632,"unpackedSize":3080681,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuXsCbuTXPtkvG2+2xZqDImMqqJvNY6MZBUoz1HZhhygIhAKqXIEB5wSPs67xnsO9fYHXLUxPParc7cqZ5Dy34V+pX"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN82uACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmob8w/+MGYAZ81Fan544/d/4FDdGiXmMo6b3+mTvY+Vhv3REVQ6j/gs\r\ndIIgi1+W6k96Gs72cFdGPwt0JBMiwDnXj4W9Aa/bGmqzGie7UmkSG+MeY/K0\r\nsLGQpKaHznn8eVGFCA66ZDlZPw935uki6AbnHCgBAOFmRj0WvyqOLvBFSvtX\r\n2nxHMrxeyvhvSckrEKpdtfLfI61XXOJPl90PEeEty1oBoPe64d3iso5B2CdH\r\njf/WtnYb7QGH/KSe76yQb+ka1U36ARYB1MeMy5yGsGSZNv1B6r7y13nA38FC\r\n0ufGKtzSyXLsNXwBFQ3wa317OgECjtQ24AIaisVutn+jgPCdu76zU/4D8Xzl\r\niQagkjKak65hTK3Ei4L/0qBTttJF4Jk7NdyS6tnNenQ3Y+7gSYVF5XSowiyu\r\nAttAvdBj4zHkjMALfnalyiZV/Y2YgnIkgWhe/JEfC8+MJRkyunfmZGPidYUz\r\no7xYjrGmOn7TyLZ/yrnB2tbPdUgC6cV11Jzt13ucLm0PI0z10CdEPDAwbC70\r\nSDQooknjCh0PD6JzLKGjHgXitC6C+Om1uSZfkXlF8wjjRxnOi5YbzZbt9xBg\r\nSmtpPI/+PIWMe+51WRLk5p+dHbgaJZl8GbYJdH6TC4JuOThAx6RHD02RYUp3\r\njp06GXO0QZV7PN645MTyvw/Ww8cXpD+re0E=\r\n=gbIc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.202_1681378733660_0.9489482028406855"},"_hasShrinkwrap":false},"8.1.203-beta":{"name":"meetup-web-components","version":"8.1.203-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"90a8815fd29fb9443f4963ceac29ad75d395d1fe","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.203-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-xxYkidjSxM+ggOZaaXnzwcfejG3G66jn6jEPQ09QqeIpP1XloGJwk/8hU7ItFZ0tY+atEVMWQ+kEoTpIZ2KscA==","shasum":"c53b47b25a0df41a41d043edb1eb386d293a84a7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.203-beta.tgz","fileCount":632,"unpackedSize":3081569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFFUwGwKKaZDPnu2UU3KbYbzEJi7VliB7lzjfGWdFtYAIhAJA4k4W9NP6HLwoU9W+CbxGIsfUlCnBA5vxJAr2Xl8am"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN/NRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmombxAAj9W0sO9QETV9h4Oz1crKxDjHSoq82l027z8afPWmzd/4Wwdu\r\nosNTT6JEUENZ/NrXzyHY03TXG/zmcpowbJWTNjmZAGFfZPHoXgdOUwK0VLy4\r\nOaSd5HnP4I9bKi3hjcA60g/bPk1Cc/rWNSX+G5283mnN8ZAPs9xcj/DMLh1R\r\nDsXc3ixdlUGygUoIgkHmClh+ZSk9/n9OYa4KYSwURx7qdv13lw/zNGu4EdbQ\r\nckGefcwtesa/7tnkJl4DlNv+7aCZ8FAhPqMNd25AV4g31N9hIZce8BtIeVVI\r\nUnz5I6n6s5pg1/QIqlxmdA4E+YM4tePQ/sBoErrzvKKsNvg17X4QDAiKRByJ\r\nkjJROqdOIcf1uUa0Mw6SGV/B/saRJlIbkSQytRH5N0WDl12XLy5CVg5HRT+a\r\nu0M6loFQZvHHPrO5ucBhiUereb5OXbvVJOmzvfBd+7abfbTslPPlS7DtRrQQ\r\nlIfS26RXmrW76VKdXnLAQ+6bb5JZqBKgYq73iEor1WVhv/IV1zxGUcj6ja1q\r\n9j3l0JCiMkPkWibJaW5AtLPh58iaGCuCDJj/4YHCTlF9dfALvgsqeyJK3fQV\r\nb3VTtcVpZNFwVcVVAyjjNI/exA1lTeHy0M5nrzbVPsjL/f04KgzC2PrPO4lJ\r\nZddG5CWw+cvSQHbjVXG7mx+1WbkzDRTGvME=\r\n=I4RP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.203-beta_1681388369530_0.0019885776638202124"},"_hasShrinkwrap":false},"8.1.204-beta":{"name":"meetup-web-components","version":"8.1.204-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"398c5e3df0747e636c045e8a476f70d49bedf759","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.204-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Ct23c6AKo/YeXVw7YOwpht11ekWx/iYBVR3ON3QI1zXInfSMc0Xv6K/XckeuZwvPx+4m/PPbfYbHUeiycWCIjg==","shasum":"3104fcfe822f01761ebef1e7a6acdc07e7ea727a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.204-beta.tgz","fileCount":632,"unpackedSize":3084577,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2fK8+l4aM/5KTBu0vKwHjBli/yIJR+KgzSmUEKtpb/AiAd67IZnKBJxVX3XTSIEMQ2U7Vk7maGtmYKg2Wwr2Qzng=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkN/i2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoOpg//X65CtrsBki6fTWBlEfV42hAKHXrpvFjqYO1XTxfrEDLrblnR\r\nR59hXAfFk16Au23JlTk9VwfP1nYlwtUU3F3LACtTjcTFrEhOGSVuMDhd1QC0\r\nX9G68eR3l9UszGjhsHkz7OoGQTerVy4J2x9QVBvf5WF8bQnn/Iblhlc5Qk7C\r\nPEv+RSN0puKEKNEbEFmaDcDo8KWN+V3fZy9wZNVlxYJ94kbU+sQEFboaQvIj\r\n7yeO7f1kTVJxhc+J/tX/KdAaMx21bjbcu/O8bTX5lIYFvSdaY5hgY/N8pZ8J\r\ndVWL5Puzegl+hon6acSdvE7R8Ah7WDjBtWDTLxZh+Fjv2+hnJGXqxF6pVIfo\r\nwmg8WhoRH/JKroW8pXewPmhMxkEjn33vVnR7suynKMVM6hqf8GoB26DPDB2F\r\n5bMrf6pz+5LrLaCr5b0Jj/dvTjdc7+0xUUlDTzrKgmpBO0/p1p6Tc5B/3jsu\r\npMwrPg6c3brTTA7XxdaRCJHyw1vECYb38PiL5Bm8r+0w4aDFfQQdEFrT1sqC\r\nFNnHOkvOLtSSgm3Z9Cl7LNlvMUneVEmgJuZDXwj/JyCzAhGQWwiAvQdKL3Qi\r\n5oh2Wr9QUcQbU8PI0mzMRXW70Sd6eU6wtSOCUuDCdoEo/L2ssUUVDYGL4pGR\r\nfRTdbWAKG4Tlpa4W1mK1uqaatAX3t+td+qA=\r\n=wPw7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.204-beta_1681389749840_0.049685674986054806"},"_hasShrinkwrap":false},"8.1.205-beta":{"name":"meetup-web-components","version":"8.1.205-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"36ce0eb0c26f914edeedcea7c2a5745dfc3ebd49","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.205-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-fdzySYhmbumy8n0HU4ddtOBLZv59gGgs4S0VOOVOK+w9SVOAv2LcpFduZ12o5b/8WCJ0minJL1qt4Eb8wkZfAQ==","shasum":"415e6c2ed42999263d178587cba0990c69bc629f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.205-beta.tgz","fileCount":632,"unpackedSize":3085313,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYp3FQhmkHRm3zlEO+Fwwd84PUMUqLwab9JlbC+8SS0gIhAOF3OIKejewtenkBFJQBcc5rXhmiPalf7v5HMOSORkzp"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOAVFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrV/hAAowBBh7q7UNH/Jq1pB8zpeFGF6z8Hl/+2xgO7RpK+eaP+mbWZ\r\nCRwT2rCifGul+cQ3eeuA5JyrweD2raXhaiC3GdfflNzhEjhs1SbpTagxNPde\r\na4Hu6Eqvh8lXcCrh3WyhsisRB2FfoT3NBQ2es3J2XEUnQTRUWIN6cBAATra5\r\nyzujPnckBkMPszH1SdG5QC8/vN85PSaGYkA31ZP4RfsbKAjnPv2e2ss228EC\r\n9Ef5u2ZY6CqtcDzl64lBDqgFFey5ymQ7DEmRjHjkVuffYTxZRCnYz5u14Y2d\r\nVWXZG/wJmF9+bYmRKgZr94YD/LFfFgdBLkn4kW8xjo/OkkyQWajl9+hTORFX\r\nxNdMfgaQsanZ8u7h3WaDP6izB4PEE8uXi7gZqR4ELT5T7F4xRUVWqVlg9/lA\r\nIzb96POsjUOkGxTv8KbJ+7hPDDRns035/Qg/V6qlgVZuYJGpokCy0t7TpJHs\r\nNR6RRWFsNBDhKnOFvD8CwPZPNAW3GtVqsOS6R3bKGC1OIWcr4HYaePw9Kzmz\r\nkP9p4Y99TyAUghL37vOSL3HhbfCu+wXa4fCN7SJF5NVdAKySo1hMn6YZjKId\r\nwHIGGu4tD9u4ODUY4GrkvUwDyIYgt5AB5OQ0jcdisvICVSXVL4eQmyHXlISN\r\nhcMFTnPuQ4ZvoqfCpNkcuD3HwXrEfzYcgEA=\r\n=Cbw2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.205-beta_1681392965186_0.9830867108633505"},"_hasShrinkwrap":false},"8.1.206":{"name":"meetup-web-components","version":"8.1.206","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bafefec3cf42713f4297049cb3c60219c2b5cd6f","_id":"meetup-web-components@8.1.206","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ftV9hU+oriJZgnPi/0RRWrcBGMnjA8V/CrQomoKZPfKrPVoBzkg5dQgZX51hiSc4PdNcleLTY7jUCkPCEAR/Eg==","shasum":"3e4c15dd5447c72773bd90305e8803312b3aa8db","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.206.tgz","fileCount":632,"unpackedSize":3085308,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwlq6HuHxdr5uOOP1U7JqkBI9exHzZ1J5CAqftVstZlAiEAhhQo2RT0aqT2c0T6r9Wfg0OD6bejY0oDFSyqMQ/ANZA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOBBaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrRIRAAimTJNdbNcOaqvTuFn8hf7AcwGHLUmuCUFCYPJNaJc149j2GZ\r\n/6RfRBDg2uVfVEhtA0Ru23dYS1jdXcfNj58rBSSx8T15leUBTkgt+jXAJ5Tm\r\ngU9AT25E4V1EyOTZjuZL0j6Ll85EO/9npBiA7R7p48fj1kCvjORAHoAlw9gI\r\ne3pnlDlEOncC8vNr8KRu2JFKxCQq0gvkdknsHQwYKjS/q8XyMIb/PY4runSI\r\nRZqMbJg+5lfFQFLVZqcu742uQQJZfpulV4AWC2c4Z/1rdergNLbiUQTJ2oQs\r\nF3d0VM1GBL+pwT0S/LphilNpMGvq+hF5wPRB8DT432DFgcRFq0NV7kktOIQQ\r\nw/rQYYOY5V/tUC4aeFwj1WN96jmzc2con1i2CzRsGn9AlsXle+Xquai220bc\r\nF2kL3w7bWFbcHYWSNFUnIwLaKXf5wcyfJfll79h6wFd0ZeftZAbGfXFhsJgq\r\nFf4nVCD+Iq15o9lnUEIEpXOFpl+TM2c10XaAo/q7KFH79sFSt97Rp4Sjlih1\r\n06F8LKENiAyvQ/1UTD9Svk+lKsXtn8iTw06DbR2pQKSHVHhcNfwimOUauSWx\r\nauTbkMKUBPPZfnyGulGOvWg86mA9NBe6Ubs3nXYgIebf544w8e+lPP8Yi/xj\r\nkjmRGLgW0DSm2bEiH2WpmtAKXqSF51YqxXE=\r\n=renN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.206_1681395801730_0.9651925012462594"},"_hasShrinkwrap":false},"8.1.207-beta":{"name":"meetup-web-components","version":"8.1.207-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"305a9fa37689f009fb26db477801a14c604e5991","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.207-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-hhulNZbmV+/lXDJZ2lltLwMaNWBP3cFxhA444spI9vd95qOzYJFvAVYe2D6SbMQQFSemJw4g8mAfJI6kZUnvew==","shasum":"fd06ea4ea1fe528ee0b6ed9184badc2ce750c106","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.207-beta.tgz","fileCount":632,"unpackedSize":3084211,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+gg9XOAc2XgUAroqM3Vc7eUqXOR7EKgiL0ZJPjO6uDAiAXEVMHFKtj6/fLo3p+dQXHvjf4Z2weeo36e5+6T6Hmjw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOBdMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqY2A//VxPMPxz3VssRv/NhuFno19HWb6MEAUXjiUbF2oxN8+nLYGW1\r\nW/fpQzJv0+1/JStCYwkSbxjUW8RspB0BH3BOlvveepEufHRiHCqqg50L4FKV\r\nuccrTDO0PW2tpq6IzLhBU6spyyW8qjEWFovEEbQ/bOFAInGeYRN5VJ1Y1T/l\r\nSYN30/8ED/rf/46YEUJmHBuB9HkrfU25gpDvDjeMb+2MWDX0Y6BN8xFrk7fq\r\npuzRdbkQ5GkbI9Ag5c3rixgSSTqD2L4CEKIN8J+sUZds5J9MWMYwnCggO4yo\r\nom4gyKaKgi55fgui6MjrvRjiFNcRkBwf1ezqPbNzznkJ2hTR357WcFNvS7dm\r\nIPhygcVP/uXHNB6fCHYsedVBuAl7YImn+GcfLme0u+VVG9dp0FtvNul2TGcb\r\n0ycBDS4o8WmNJkqIIWSLCnRMkrDLf55KADh74AZuBz4gR/ee0iE4fI90vPvo\r\n7HltoMELc3StCCjRpdwNVIfFEsHoc6gwvDLBzVYImTiz55g5s4zQK8eBqdlR\r\nD/fGOpvC0M77rboswhvwwt8Bd9QIvWVaQ0v/WeT5tPCLle+wV5MPSgVCZ++M\r\nhusmo4ElFkH+gc1PL7C1r8/gQi42yqbDRZaMA3adxKGoRyzP98Feg0YgErHA\r\nRxDHsSQfiNgKk+h1C6aEKNCAE44WzaBdrfw=\r\n=Z1Gi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.207-beta_1681397580012_0.14082032768253483"},"_hasShrinkwrap":false},"8.1.208":{"name":"meetup-web-components","version":"8.1.208","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7d3a982b7a4d2b58fd196d5b8a5f0c288ceedcf0","_id":"meetup-web-components@8.1.208","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/j5eXXor+sfJ2rujNf7/dWFwxJbqht0bx0ehfRlzJf+qzFUb/gc0A+zfr1hisBehUYqWS2tJPzHTfgFWAdTbuw==","shasum":"829ebba0066491a9e71dd8772d92ea99e60cb7f3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.208.tgz","fileCount":632,"unpackedSize":3084206,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdYY5OdiObhG6SC/ZZSmQkPLyPiFdEfRGxcJyMEI0xHwIgcGL5Fh92DiePt+HA000zA1X1x4CFZ34cq4rWjTveCRA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOB/RACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmptxQ//VyySauzv26gd2s/E6pAVpHnMUXr1Auomw6qmF/fkRr3BwT8K\r\nsh1L4JQrT8R1SNiKlAJKtMGN5qtaj8QvmOhJ8wbudYKH1KfqnH08Dk2UmzFl\r\npvpiOdhZ/Tu9Hqfvnd3zNZvltTwqCsI8M2ZV2lSCGm0F7S1hx8CwlvexKEej\r\nzD23ZOPhsGMFy0MzOv1lV4ykVqh+2N7+rfv6v69eiYo9feFVdeu7NNV2msOD\r\n9Ux44iIQIuhD2DUmLYQfANyHDwuTwcpUMU7d3DYDjIHimJA0Y9x/Cbc9nFlj\r\nBMNi4Lhq2J+E+IfMuOlNSPA+GvtPs/1kWPFpRQDsPqQZhh/oevP6EzvrMhHj\r\n44kMQICHzLSoocw0exaecdgV6FSMO+uHh5qD4E2TSla4mPf14WzOHgQZmcSw\r\nlExWtkKP1PkZo4lAdQSxn2t2y8//GZaOY/FfZbbHtRAzYDbS/umElTMR/Nvi\r\noxSv1H0pWzmpv2I2rwAXsu08x1OrxTttZVFLsWNKwY3a+P9hXqArZgCNKEdA\r\n9+EROG9KqkYTGC8aFAHCVpa8/DALB/yvPaHwDF9RLX7+so5iQ3LHD8noj2LN\r\nc8cHEwp8cRUnmvY0S5pSfo9yxBabiHyvql6ceG/6kuLPLoCUw57lNtpuvqi8\r\nEwRSInMNf7cGFZkNraiPJj5nfl+KGhtFzFg=\r\n=tTHo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.208_1681399761259_0.985124949835051"},"_hasShrinkwrap":false},"8.1.209-beta":{"name":"meetup-web-components","version":"8.1.209-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c72723aa706633728a0cb6bb005f98b10d33c534","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.209-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dAgM5s1Vnb5pAJt/CWr97lLNU3e9W2t3WNffkVmTapYPr5aKew8k4IOAbuvdknCg62YDNrb8pCYM6gsuLOyJrA==","shasum":"3d87ce8b078b837185d7acfad050828cf4da7cc8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.209-beta.tgz","fileCount":632,"unpackedSize":3084583,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgenAnp4Sb3Z6+G1QMBETg46sT8pzvxEj1t4dlIBqhbgIhAPhYUZFwODWEsRXSRZKSteyDtcdIxJQxjEReOl98b2R4"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOESQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrq/xAAnvuceqpcBEdhLJEYnzFKs/nAIzPoaq7N0EK+cQcXV6IwCi5Z\r\nESRBUAvJ3bOsk1gOtRQmk7YkRoj89tvb3HqkvzCshIjzxIB3i/Qq9QLtEM6s\r\nUWzZu/6nq6Kxv1fVUy7DBuMhwtGznnn0U0c6iSLVpvwTbWC2fLhsxI/Rhfln\r\n3pvcfoxCKn0IXA1fn5ZjHXxCcdhOVuIGXVU68LJvxk+wDp066HZD2LMi2UE9\r\n1CYmtAFQv/mrQbY+9vEJN0YiSADwRIx4T5S3CUBGmQIT/VuNyhL8bBlyB3JV\r\nvIEofRjg/dgSfgxqjqNP1XSm9u9O0zPn2xx+trJr53Y9yQUKNpTqY/OUNtb/\r\nurh98f3N0xRzwu+27dwajso4xw19xwnvByZM8ouXR9fz+dpAuQAmsWypeRvk\r\n9IZBwLsK+ivOO1yPORZM66EqG2ZxCP7HANFGXsLa+hvBOXl6fo29bPrahFE5\r\nBRVpuFyxxROo/YRytAimBuiqUV9PWPAWMwr1FpEDIK9yJ5Da0CjOJB7A2svf\r\nmkUkh8Au6y0bdXUp8NGxsjBGrw94hBwHsYl9+l2QpgLG/1XKVyR8ds77CuaO\r\nFeJ8rJns5keLMgZlYmaExQsUQt2IaYolwoJT8IH5d1f/r/7Oov4RbUG/D3pi\r\nit8gGzU/UNk/h5pYYaj2U3s8BfTj5J9nWR0=\r\n=egG+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.209-beta_1681409167989_0.9118440528705685"},"_hasShrinkwrap":false},"8.1.210-beta":{"name":"meetup-web-components","version":"8.1.210-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e562bb31926ffcf3d8a60610e90048673afab60f","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.210-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-0QjkrW+NGCwJOBbZZY4sO2PtQ9+2wWH1t7fhEbNTBNu1I+Zg93SCOuzdL8yAc7OpEMEQBZ3Rmx1cOBQF+Am64A==","shasum":"3d39698cac8dd838983993b321073174b829e066","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.210-beta.tgz","fileCount":632,"unpackedSize":3085504,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwOqHUkFHl3AlBgJOmznsGQB7yH+EwCoA7l9KXyzv3YgIgDatiNx9MlyZ8ZWOLLf/YAdu8ahgj3Q/9kW+u8Rax+uI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOTbDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1+g//T7/sLlRtO6f0CsH/CtyRJ3kquYVw0Bd11ODH98mF1n04Ugj6\r\nbDGFURqBoZ2Ribw6Ff6hNth3/WtsZnNmD9awfYGQbkBARIqc6PHeTHhuUXMd\r\nFjYE3efn2Z59UAydnxSeFRJKnhlqm16BmT7Q7eVUqHCPU70ZUCN3p2Curqz0\r\nsK/Ed35FwSWrGqb2cSG/H09OJrwXYQWgyAEEb4DDmXI18uPJMkgC4H/lBZuL\r\nzmVRimbHsPpMTRd4B0MI5xwSzgaXewQOfHqbgTaduxczmU//dgRKtZPyWWEs\r\nGG7u5Zy/2QOjux7JzynEP4TktV8rVncBzGXPB+2yZOKxvtKBbXpNXIavuEfg\r\npxjXcODthX01efqHGrrn0YnqcU5sxgH8bITBa6H9Wh6ZEdzb9m5picE9Z7Cg\r\nipV/QomOUS1u2WJIh9uu+uO1qLW30nnQw4+5dBah9e/Wo/UZ0UueM+sfir/j\r\npjwa9BZN2GrEjuDeGNRwrKqEy8oz/5hrwYIq37htNP5OvyauC4XuNLKKRpoA\r\nHn7f3L2xK7eAO/ZI9UjjMLoRKk/B285ts7GNm43IWqj/q3y+JS0aTsrd9R3h\r\nMHpw/bUU6Zn6c8hqUB0bIrThFV7qJHYoEuCUPi07JCkNomttRPR2rQR0LwnO\r\nmO8iMX0vQV6X40Og+SGpE7tmLUL7/J5bwcI=\r\n=jboF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.210-beta_1681471171151_0.5866930216184922"},"_hasShrinkwrap":false},"8.1.211":{"name":"meetup-web-components","version":"8.1.211","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2783a72ee57775e7eab7d238a1393a55d7ab8b81","_id":"meetup-web-components@8.1.211","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-vxSHLyBjye2wSFag0AGA5fY9cENhBJM2IudkVDXnE42aygEIA92lZf2oTmaZ5BDghYByYlT9YcN40bnaGN16fQ==","shasum":"ff0fa3952455448996b3ed55c9c3da5d31cac10f","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.211.tgz","fileCount":632,"unpackedSize":3084578,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDww5cEWD42qsHOq0YrbGOIz9b1TzdI994eZyva/wD8QQIgZsgtRQuOG2/mu0WuRb+7b58C4mdf8tQI8ghlIbhGT58="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPTH/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrlzQ/9ENIHYwSA8v5n/lc8rGt49WFrDHA3qUeFehd+DRh97tN8jQwY\r\nvjyL0gsQlwG5udJN9ybvr3BOIICRe/zVdr2txAXf9bJt4IolcZtKsQZTrHGb\r\n3gM6yk3FNM2gVTrcAQVtLIBoa1Bqd2uhtzjDPcBpZDLKKVTD+TYGeWy0jxQ6\r\n9dAgG9YEG2W6vDXW7Kf6MosBGr4G2fso44yP5YjxN/kKW9HWfoSR2M+lJU1x\r\ngmkdS5qKKDYbPkQcXgnJyvp7moh4YI6dH6WUa9ZNm5bjkwbZR63cUzZJxDW0\r\n6b/gYQBXdQiLq87daviH9SY5EBX/VDsIFMmQkeP6Z1WmhjPKCtjUcQi+bp7F\r\n709X2opT26hlRl0ss/MWX/v/Osbt8UVDNbmKqfRx3nxVCdWpfaj87M4f9QPu\r\nmVcyvKOS4BLad3r+xUpK+vudOLJmpMC4q4dBYbL6Uu1I/KbK9ase0ueBhL3Z\r\nMrN7btNmyh46DFsW+7WIzqwheDaVGBx88ThneJGh6y48x9MPu5/WtLlC8vX4\r\nnMztUhGB8OuCN8chs5PZe8bI8FAoUSUE5ttlC5UXdsBP00JzJY499paTOxOr\r\np/AtU7Xu3QIjIcYWoWd70V2mUj+q1f+AORWP2DPEzg5P/6RfUPDDXA5troGm\r\nFZeLKjgUrYFG1/YeH0N3Be984mwuJYpu54E=\r\n=LQrz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.211_1681732095563_0.8142907208651327"},"_hasShrinkwrap":false},"8.1.212-beta":{"name":"meetup-web-components","version":"8.1.212-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e7d445ae5caa017a7c5324af807b315dbb332edb","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.212-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-utsy8PE3zyQTsWl095HA9v1luTckli8rJ1so/whfHypRdQ/U6Dn6aCNowtyugre8+/5fS58vCar/GEO+At98gw==","shasum":"7174520da2821d1c4bccbd2225ac91ac58938b37","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.212-beta.tgz","fileCount":632,"unpackedSize":3085362,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwSIYQijRUgR6QzxcyqAG8rEq7ABsmNXpEGyAXqcsvWAIhAMx75IrdL/F5sfVtU4cv71Afnwd3ooaVFs0UNAlH3D3y"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPT40ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpfag//Xg1ghzPqzoC4avW+5hxLH3EtzZPgzA43Gp1tU0y/Z38PQke6\r\no2uVmGUY46MLvXfr3ONRGCE8SVC43ZBYJjUmlc2YAdE7M2skftP1S1cFt9HK\r\nUCeUKq0ZLETgYKoGBqj8AHOi9Oki6bC27YOyxuZN4O9zOtsJ2J5itOmCt/cY\r\nIicFlt2Cp2V1Bluc9VY7XkRhXwbdsbN9wpCcFKj5+nPp5cqnQv0Yz8HwgtCH\r\nBmGIOj1lmSYLN5+i2/k99DydxuTJMt/iw3bDbBQetSAJvHMUsBFhsUFekNg0\r\nxwGwWZMoRc5+D15DIL3slOXT64ClTydM3jW0RVbOnOdRQrgyWYc4Lss+rNOA\r\nH2mKtDWwh5cHd0Ih6XCmmxDP47+aybXiTZdcME3/yuzkZZRMEYhmmcrIVC59\r\ncLCWMHKjN0Jqz2ExyVDKq+vuV/Y+Df9qCV5vSFGDkfGW68Jufnu/SiTMwMkd\r\nTg2URKESySeA/Jpew5uuCgv+1uTFY55/OcTWXTiZp2kD2dmjOcuhVAqWLlvB\r\n/nhz70k/RnkthEGEp1tM27ZN+761sIjoTira6xDht02jIsN6V4QpWI1X+GJX\r\nWHPQ01radfMojow20/kb/iLUmRyFWjxyy4cZ3CdDLAOHBHnenspIMm7+iCiA\r\n1h/yM3gM9k0fsf2IbYG3UY0TcBqPpeWzhzw=\r\n=zS74\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.212-beta_1681735220099_0.8359553725318545"},"_hasShrinkwrap":false},"8.1.213":{"name":"meetup-web-components","version":"8.1.213","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"02178156719efb82c3058bb3db37cfdce9c0037d","_id":"meetup-web-components@8.1.213","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-+O34NgPybUOYmPRt5+OI8sz73Wd0Y7OqXcqKzHc9KcLa5X4m8rRGNC0g3TO9VT+coHdeMtikM6IMh19QqFj8Bg==","shasum":"499c73654aa5833ff52e2037f919fb23cad5fdea","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.213.tgz","fileCount":632,"unpackedSize":3085357,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA6teGZURrtoXKanltPbSrRvZuKBFG4HP1g3kr5OmRy8AiEA8rSHK4y4Yp9UtGYRQCyLhJ5/dOMBUUxeyEMweHUsKmU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPW+ZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqnbw/9FfAvmFYNihutelb7TZMpj3klvr8Me7hGIDGcG23ROEb/UDsz\r\nZRUiyxzrcCNEijP2gYJGYjo3GnDUJQ4n5qs2vbLvWnxv4zW2D+NJgdBD+B/h\r\n+U7KuwHQcudz3bXy6k6GXcweaoHHLbomLZJISoGomIVsqISI122Zt7Gy/+LH\r\nHtpsffw7aADKQuoQ90HBFSOJwSCZT8Ef+uvWbI+yHwptJSuDIDn/gmRvsC5w\r\ncJpvFymhmgWeYGu/tesvg7XbFp+EWh2afn9c/pKvOCF6loio87mpg8iiqBCK\r\n3obYs9RCqVv66w+aF/iQEXcFXjXqLYBv9gdBMgeln9D0791oln7nMsxsJy96\r\njdraptbbGKkk75v4HrvdYeqFsZuyocBIO9FwSbRnrQe5RcczPdqNPEMgopS1\r\nwkYgb2rhPRcSN3+D9pgJFKBf9No4h1MkVzpYfc4Z69T+55hr+fNjVGa1hMe+\r\nPlvMidmb6S+rv1UmmPxTiRYaHy+5WA/isSMCWEfzGbHUz3Sl/nn2N0Qw6mF8\r\ni8rsbM2UKXTtY20vIrhIA1sNyPpBdBt7K+MyltmKJ1mGiTUIBA7f2Bcm6Sz+\r\nLbPdaQIT4CkpE/AKJT9zLLCk3JvnOcqkshvEtMGMaOgfysOzkEi2/fVQa5OK\r\nTUIFTDIFEU7KJrimxTiiNyEtFCNCA8aV4Iw=\r\n=StMX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.213_1681747865413_0.4984938254252895"},"_hasShrinkwrap":false},"8.1.214-beta":{"name":"meetup-web-components","version":"8.1.214-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"70e979eafdf056be3d645f9c315df2d1602a2832","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.214-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-zLCG6A6in9+xFs8tFALK7r6j3QfNoZX28Sp5vJH6UBFhLWb1sF9b/wKJSGMehwvI+rzj/SzIvqOs1vHdhuapVw==","shasum":"09ff0e8fecb1321f5687637fed003033c330f2a1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.214-beta.tgz","fileCount":632,"unpackedSize":3085306,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENbHPLTp+QJwy0YWNG8fEyOEA8uOOE+dHafYf40OiODAiEAqR4uDxv1CCEs5yT/8WJn1X/GJ6nYCtCWEDYYX7PdAfw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPk7oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsOg/+LqVXWa8XFiFdh5n2Vtk0ZG0I4b+WVt57psnF/hlg8n6ELoEO\r\nu6nXF9b5R9xI83EahT8BW1h7rsf5sMhxJB8EmkRlP5XuVNtnjdjJgAnVpm38\r\nJvbvT39WkRk/PuCEYKtHuPQivMp8zcJAO8mZ678CqYHDxSbuE/xgc0I8pqR/\r\nDIVydrKF41T1O1Dynz5kvLMpC6jHExdDj7TJiscHB0viRqc05t4O8r52QpvP\r\nGo6Gt0nwnjnffgimZN0QR0/dE0QVbPDX3+GnYk2r0kB57hSRWvLiUn0080Mm\r\ndNA1bcKMJmhNXgZ22ZlwAXQFZqEPuqXZq0vKUGnjx+AqFLUKCbhdoYRvdryH\r\n3CmjKSlsWGYHZ3CuEDfBxqRBhw7btjsvntxaGCMfK6JjD8OtvXvZPe2jQTr/\r\n1if8/Xvm+W8NWAqTK+qKN6WVW4eHuVOCaUr41lmntZVhYR9L0Y22Fe7j3MnN\r\n++yIQRaL7LPKpunXI5TkYEtKdod40FtBv/A48uCW8g1enDBSXe/m2Io4Bf1q\r\nlYh/pMtBndRaGBqtxmW5VclfD7BferDfjXxlziAG3d0X6IHXaASTmy+L0EWD\r\ncS1MA6M4vYldH1RjkbqQ3q2McAgpaeh1B5hnZHuMUbXYfcMNcHdtfvt5xS6M\r\ntucUROpNhe0UD5Vmk+qFJ5Mb9p4Q02w5sxc=\r\n=sai5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.214-beta_1681805031860_0.36202851735376385"},"_hasShrinkwrap":false},"8.1.216-beta":{"name":"meetup-web-components","version":"8.1.216-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"8f8bc4f5aed2e2bdde0d7ae97ec0a37a4f6de35a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.216-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-1PfcIltUln4TsgU4pnMMJ2YCIO54zYNvLAKp+yIn6V/Yq3IdGXvES5n8lEmJgU5U0GlQOliBsH+2MlstDH6SrQ==","shasum":"14e4e642a6a9d1c76b96fb1694d23b5a12d667c8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.216-beta.tgz","fileCount":632,"unpackedSize":3085389,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGbpHZpgpV03pzWdgionSIgZbwtwRitzxFki6uvR1IwwIgZ4wDT0+V1d1W0LaTot5zR8iIYUzdNLX2ma/uBVdnRRk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPlifACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoB8BAAiJaygNU97AnoMR7tqr8YEU8XamJIbLsq/78uDAo0VHY5ufWM\r\nTYJqck2q7ttbNewaLmPPXPn+Q8V9JpD5BhEz7nDgfCjah5AxmvJeJe7sGfAo\r\nahuK5TJgq3ivfTtNtG/FB61+EPs/GC9z4CNbLKvwWMBnZpHRK/brICZrW4sU\r\njlM4Qr6MLVZBAEgXzer726mKyVIMEq+QppGf53Xaq1/D44gwa6WLVwVreWaq\r\nBDKj3QdEycmmGYNVuDVJWOmY8PPtVAOuJFeRE5CIhrvoXzDKLgxkVWRTnUZi\r\nQ6rjO5SILwSIsUPZfkLOaJkpgKYUonhpil+eE7tob59ZMBq2Z3VMk00pFHCW\r\n1T84OzfWBE41TKXiNfYuvOwNbJGzJuTMRH41oqODy8KAalz4RYqZRYLk4aif\r\nCFNFLCLbQ4NWNw9IO2KMZ8rXY6+k0NpQ3yEP4wlw60JZ6QAObi/n2PBRy3O4\r\n9czi6p6WrjKmbZVavQwu8EeUDmLd1NQ1WC6gg80qw8iJrkz3dplOC1TaMq0y\r\nTo4Ia4/IOUVgdTvB3hGkIxl0rU/PAe89kQlEMpe+b29En6kptf12xuTC7V3C\r\nFsUTbrrdylk1QJbaroMmrWo2dd11sM5Ojguduut2rt+xBzu8df7Rj1cR2WOf\r\n0vxrq0aoyIw8LJ3wBGxHv1rjQbQ18gIbSjc=\r\n=bm8J\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.216-beta_1681807518734_0.2907470406857835"},"_hasShrinkwrap":false},"8.1.217":{"name":"meetup-web-components","version":"8.1.217","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"d49e3f67df39f97acccf4f492ad6ae7aa077557f","_id":"meetup-web-components@8.1.217","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-xQESoejoOFhVCevsromPC3vQ7f77mhaKASpMj2zD4tr1/Wv2czZcIrNcw/+zm3IF6FvijXCJQRAll3QlyVLFvA==","shasum":"c2e64707e28634c7c3ed5d7d49169a639e392f67","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.217.tgz","fileCount":632,"unpackedSize":3085384,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFaux3SdPbBh4gUgrXekDvePFu++TIXQjPvwEhClBawEAiAqV/gSFgE1mmk6XE/iorsD6vJpRGD9A6bx9cJazQieJQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPlrkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoTSg/+JpvRwvG/TxuEWZblloRbiRUw9A93KpauaNQumBTffA8s8OYm\r\nh8xcew+PKTvDFapzyvybn+94MSxKTbEV+7G5yLR+Xx0C2zXsKX9oEzRR9tES\r\nWFtJ0K3DRl+xmInKvYBV8vKusEKh13PPkucvkSolMCMP9T5BZFNDXsJvci8P\r\n3qjxww4J0OX09CyfUpbGlNCIwO3QOAjXNCgdsa+/OpZCN6lTgPbZm8lTWMSV\r\n45BhR7K/1RPTfhicE0fLDWF7VfjiPJa+ZM0cceJNFPvPel0W07eWVs7OIz1B\r\nUZkeOZcFkKBnmb21VRSAUiF8C9gCie60X8MNzi6NBuPn0cOwyFPMrMrY7gfk\r\nFphWpPEmqnQHl9Kc+LJp306+y3ChPMvEF40iE7txsDFIXX5bhOmx5bfmRQrB\r\nmI5QxB9CVxer/dPcG14LxBFmj/VK01Yac07pOuQxMikHGytRFyJ3NpjJUPjo\r\niKFO46t+IoPoskKoa43/8viYc4Hmve0ZbzBK43NVtPwH5aecAphtBS0QZGbk\r\nwlbqMl3zpD7BASWEinLu/x2TCWKsWCC9FvvCFTp2xjUUnO51lKR6MGWMyFTb\r\nX1NDkktcdmx4aTHKv/SEXM9XolyO8GLPGRjs41rhGdilHp6KrQ1AS1r5XepU\r\np/l65Ze+vA6H+MMo9hWJIAz61tRV4G0muMQ=\r\n=b6bY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.217_1681808100573_0.02047077564277222"},"_hasShrinkwrap":false},"8.1.218-beta":{"name":"meetup-web-components","version":"8.1.218-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"40e8067edb60019cef7990a348e4072a7303a584","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.218-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-A2T//dtfblVHfkYTJz/avZXwubTAJRrHartyJWcL24thHhW0Sn7inxe6Un8z1SJoj78vBLGgVX/aH7x8LNtrlA==","shasum":"8eb5e2056d1e1db5f706d2bee6fec802543c5e01","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.218-beta.tgz","fileCount":632,"unpackedSize":3086849,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFbjGQhNDZxaWZlxYlNsXk7Nqwd5gZtBMpAWFCz7JaUrAiEA1FNkvlrrScZwx0yXajpO9RdMrlDrDBAgH6nXYrBa60I="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPn4cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoi/A//em7RI2N5eturqcrIiB1DqnHFNHpnIuyG/2yd4V4dGImS4+so\r\nMA3e4AK16qh6gNDFhUhX3kw8I1HDMNNC86vdlwuQ1vl3XWhNd/DoLN2ezFAv\r\nd2laEsHSQeG3FBTQDlbHFFay8UcDKryI56oE2S2hTYTN47Az+ssFH9EY/BY1\r\nqysJYy8rsoFAcCkVT4s9b+3838b3V97xB05CVHTInst7keqbG6BpkME806c2\r\nv9pb6/c7rHUozAoPdd4H3or6NTkkvi55GI9TmQbH1waXD9WXQHC67bmKJb2E\r\nGWrez/You2XJuN7QhgKasQBp4LDzjDgQtAa4HItv0FSWq48jn+oQzR0iyvVR\r\nVLBGxCvzlmBqSh2/CfMxQ25fXD0T9LNz8w8QOnFUO6v8dQTC9szVQ/sPMzj6\r\nkbkuKc+K8CWTKsLyh/Az/MZI2y65jsi8DLYXHoKOrCOYcwBchbsz1Fw7oov+\r\npNKDpyxVLuz95OgV1R/5Nn5HlpsHxnYVrKV3cpzWDg13BqV8bEsKps4VwviR\r\n/LK61ows82zHvBopUp67k+C587Tr4ocb3wmPDIxd3icwAWVm2uEwcRZq75ls\r\nPaxKfPckF1nWbbZxARtneqr7qphSdxdp/hXrVNob/334xn76tO2Of0qs1MEg\r\nY/HkAn6nrzh+lzwyDxoyfza4zdKBgFnBkq4=\r\n=WLbc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.218-beta_1681817115961_0.6039984546717612"},"_hasShrinkwrap":false},"8.1.219":{"name":"meetup-web-components","version":"8.1.219","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"289772d88ed3752702eb79ab0ba3defe2cfb6aec","_id":"meetup-web-components@8.1.219","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-VKFrdYAlRAdc/Nkl2WK2N0TsCsVpALrhQ+h1b47HtCxoaO1KLlAyldxr6P7zdyW/ZDUgIARwUvB0U0osa68O3A==","shasum":"c4d9c101b67313321957e3ef044adc162444e3bb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.219.tgz","fileCount":632,"unpackedSize":3086844,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwUMczojYxLsXx5LtxyInMkdVt6hKaWF8XwctqUpv2EAiEAgtt0hNshOyop3kd7KNa66XYV1yKz2hg/19ND9ZYf4M0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPn+dACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq6vw/+KLVlbBDLwtFMGjjoF05rwu4LdMXccDXJOFz/XrcBypwSeZmL\r\njX4qiP2NWamyvNkwUq+7f78rD6p1c0+2knVFZdqOwo0L6GdCYbbfx9V2Uu6M\r\nVuTZkR/y7IC+c68QBcGd5f1UzT+zX3hgFiBLCedMzPGGZ++VFRoP/MbtGdbo\r\n+XYb/EcBaxW3kuzLFaWTIagX64SGEpsK9GVG9WBsegR4JzU2yAbu44VMUyf1\r\nSWPJ79pNCfSLLO54z0fuMUd6Vgpb2IYyAc7Y5qScZA5PucymQwJZcWqLGjbL\r\ncYnwJMJWNBuevwkwCGMYMZu4jKGZbwcA2ZjwXdzEbv6JuipdQCTVJRSV2ND1\r\n4nSUNi8BYyUrQ2zerVztU0OML+tuLcZ54d2VTtx/1mJ+qOAiwy3dN0+z+9Zs\r\n3NJRDJyhyljF6CPTWLU4lOIgjOX3N4q0P4AtbU5CMi6S2eCR+eX+3oWOlMdN\r\niq43YTov1IAxMCytUhzodHLfLeoCLGIK4jn4moSQ6h6scQLYd6VFKMMNbR+A\r\nWUBtID1kWsHcirtlwrEfjHM2VhCME8UcOdyXsEXLuRb3XZ4Qp9cjYALnQlIX\r\nAxY28HanHlXb/dRM3U75SrpNpsi6FMDk8o35ymOt4hh5FNzZTmtPtVE4A5rA\r\n5XFUzFG9Zb+//gHCmZ9cbtxfqPWwPFbri64=\r\n=t+t7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.219_1681817501476_0.03257665722152403"},"_hasShrinkwrap":false},"8.1.220-beta":{"name":"meetup-web-components","version":"8.1.220-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"391b37b355406e8d42c0dfc10dd40d57e0d26eca","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.220-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mfhfvjhP02Jx0PJ4ok1JJ9po7bXHisbSQgYUYLdxzBIbo3y5K3udgZfZk3AB77WBgR3lpaHRHH1gkAVdru1YDQ==","shasum":"4c7e762b67dd32d28d8f54b263fc618ac4bb00f0","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.220-beta.tgz","fileCount":632,"unpackedSize":3089176,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaMSfJRb1bhBbv5MHtsRFa4xxvdyeebF15UxtgKumaSAIgeKRE6xenn6jhSsp2KN82FfB2W10K7b/49ZorLqGbxJc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPq1aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmot7w/+O8VZs8idL5PgFxKzoNzNvgMg1p2itNKvSCmnkr0HKGTCcPw4\r\nx+qSPx2HcSoStOoQbhNJIlMtYCeaAw3Y/8GUIN8W5lCrD56/0nKYCHHqNpBJ\r\npg55r/X9dl8HPuYWmOvPBaRn+zkLiEdx+OnVFxkTQZyqxAE8wRLlcRmVvUk6\r\nCrePWoRJmR7Wpou4leKlsqYdhfr92P1qGC78pGpjgcdlrBqn40t8+8CFue6F\r\nBtErPu8FEzmOT1lZuaYamNz+kffrgR0IHg329Fd4a/hE35axCgmrjdOvgXlf\r\nzwAq1xkjYhS4jwRkjsvu7axFpLrht+AEMhyu5cpZ4cZWIJb4HxbCXXeaoNkD\r\n51SJpMZEbB5WL/t7yPQ1rvSEAYFEpegs/Oux+tuFlMvsMHmOQabm7IMk3IhP\r\nAu8tFDVWSO2B7S7DZ6jAdsd/bfrlAA2+M/c1F0sjIRIaJlPsLNoaPJ5yV+W1\r\ngwPa2tJFeaJmkwpD2PXdonwwdrYWgCq+mBbuifCcJppUfzvV8j8hhBKd/rDW\r\nxeqhNhh1S6m+T0ETOmOWo8OcAig/O2uweOzxk0qQRGll9s7kWZbMLmKMT3R5\r\nVTrQNIT3MHThDWu33ZsQ6aG04Rd+nvnZgXghT5lwtL3hk63jCCIMVgS2wk0h\r\niwsTQkvJ1fDbK+YBdgTksMqGVRJ8Vpg1FOs=\r\n=DSL3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.220-beta_1681829209807_0.4930721666431368"},"_hasShrinkwrap":false},"8.1.221-beta":{"name":"meetup-web-components","version":"8.1.221-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1129800943b93802c6afad0ec427116e76e4bd90","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.221-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-bPF1+TzZBRhIAqkHU0olF8zvqm+hSFneoJ9jU2DzY6sQDbgo3lEUvCefop/CFVXxKCIf5+pzzSJ2HiLwx5tIVA==","shasum":"3b1b3e74eab95356130dd3da5b09b01c2432d4c4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.221-beta.tgz","fileCount":632,"unpackedSize":3089361,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFnZvZHTOg65/Y8Sx3CcBFR3d+v3NT17UE3TzT7SiYA7AiAbXNTEk0wgsTd1bJ2jEaRGZ06dlTS5RqNZ+OLEtUHoTQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPrXZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrnpxAAoFZiNQ+dLYgRoWQLEtt1xMWmC0aMCXt7kCyx/kBZWBUXk50w\r\n/ZBPD1E62/e4NJxG6jwZvJyuFD4paCeOaJBdcLdmP8oCmY4F9mRF4fsQCkZh\r\nqFyLklLwmPMHNMHXfOCSIb6hvVGEuE6ngc27zQFhxJ2lENbundJAry3BPW/o\r\n/8OZX0mCMskRRfeBEeDBB4cYS2m6HRbYDwns+hjVisrm6AXucZNCBAFrW3bO\r\nTck3vTbsf1HzheOzHwvQO74GXKROnfxwxf0dffnW25sIDU8avsxZX/c3lwbc\r\nFFuZAugKnFBKEJS8RB6H9dmnu18bqGcQNIDKCpPuEw2R5K7+K2NkM3XJLriW\r\nNkhO4ITQPTUzkODrQuRkpcZLmbElCOJBUvjsuNyrqc9UiaoOWx57YJf8yty7\r\ntjhk5KEsejkD/iAeDTLTxuILI7hZ4NVL/Lf1Gq0KDPuy+/kmRWUCjIhaJgZ2\r\ne4WS2/+36IlMB/uR6rxNu7391tcaSaCGEryUh5ZzJgN2+iBOQqjGqTptDJDe\r\npOQNgfHv+BoFADK2H1uaq+8vrAaS9xz7Bsi2P8FPXDk/OXWS8dZzL5t7mJRb\r\nPiW01i7PS/Djmp7mufRIuCoyPu10SOyJKP1DMDqBGqfeaKvFWWYO3maPj1c1\r\nCEQnkKS8BcYwH3sWH0A9xBn3eCldF8toyz8=\r\n=tXZl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.221-beta_1681831385162_0.6018553009076009"},"_hasShrinkwrap":false},"8.1.222":{"name":"meetup-web-components","version":"8.1.222","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fa9b1e8004deaef4853665614985605715f5890a","_id":"meetup-web-components@8.1.222","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-I1yTx4v9t0XWCdZ7Mie8dEXFj9FsZQQEEEYsiDyKwFcZA0IxZjKJOoH47Lq4dIpC/A+NH5/CCJtcrcvTXq0zYA==","shasum":"306bfb7ca873bc1ade05d667c7ae73baaa4435f2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.222.tgz","fileCount":632,"unpackedSize":3089356,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMij8XJ+hGrg8y3eHhDhG8nbBmwYamfXdKTmoDkbb59QIgNhmOXs7bFbsxKgpfkTiZKQTdir3xXUFNEo1akLBPfCY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPr2QACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmohuw/9GzjQMKwVdP9KT4am4khQ7tP4HLmsw3qwjCdCVc0Q8bxNFenP\r\nv4OqtcN/E8xdRDTGh8Xx8v8MG4iIIqG6L/jcB2g3VbVmOvSvi28CaVnJWxEI\r\neqI4WPbbRsvpaoHA6OysxzYZSQyYO/5Q5+CMb63R+kJpqZHAjMy/N9iYuFC5\r\ndPg+k8S3dySd8QYkEZr0FTmSp+2aeqSvXWBaVYM1liiDqdWZi+4hl6n26fUj\r\nNtPI+Tf/b1LgxABae7I/MM+K+lzqi+/outwt5FdxpmcQW9q4qHXH836X1Kd7\r\nJadQP65NDN/EIMARo+t+84mz1+oOakK+qOU6qBDS0N5Ts7rfwP49se4AJGF1\r\ntOMIMW0ROUMTzoan+sUu4j7Sm0RJWvlyuQ2YXHpHJxuHQ0eISm4rrWzWQVNE\r\n/uDHre2MONDDmGZtZo6zI7znbhBxFUHcydOV+Hq2A4nmF4iem07sUqrr8tks\r\njT5XM+ITPQn3cSmPuNsIIgDrHnGc4Mj9DS2uFaUCZ9MOq3pTLvei7SHe/olL\r\n1PwZ28SDPHDOO2STFyPezsVnDPhpvyiZe6AKGS9obOuG0sHK0Jw6AYyqkO3s\r\n70Uz2sayuDtLCnC/OU3w+kPrJi/4zFEWZA2J6QkHEQXzliUyGIQF9r9UZ8io\r\na4cPIxbAXlv7PtwB8ymhhCSPe0Dl5pLq9Qw=\r\n=T4BK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.222_1681833360172_0.8449197358392178"},"_hasShrinkwrap":false},"8.1.223-beta":{"name":"meetup-web-components","version":"8.1.223-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"2e454216d3b1df62c9f91183c307334517bd12fd","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.223-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-slrrcPDzguEQpRuJTRwoamePs4V6yBmFJXoQsWDgg0Ejy+xeoPXd070SduNJijTjPwiNbRzAkuCaUv2zAGjP6g==","shasum":"5bc533694958cf24e5935e0f7eb79a67b927e9bd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.223-beta.tgz","fileCount":632,"unpackedSize":3089032,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGq7vDV351+DtvQS9Auw1xGIRQJo7FETv/FNfXFpjvPPAiB4zIHLNgX88tauhPIgKeem/OV/i4LlvwzlYgYT5F3BEQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPusxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkOQ//XIwBKZ83AOYMNumwG+uZQhGQuCdbmDjrxglKdOxhfW06QIEd\r\n9BBbcIw2VFLMclmppFMilSj/VaZy6Qpzs9kUFVzCjeCu1uwhn4peLOcWzB5u\r\nxdIaYkgzwO944lVX6+txEcwu6/4mUhb26eaeqNpkTQ1oLWKqGxwtpgdUyJiN\r\nPxEgVWCONYBfl+2GYYC4PAQrwwJzuvj2XeTlNpt5hteZgrwde5S7DfThh+EY\r\nIJpDNdT4onDYFscf7SeJdMsAka1KB91lj3t24RLCBIZSCtUDoQvglaD0wvHJ\r\nDqqF/zios+3E4Sv6VzlsQD16ZvncKL1zLJtAf4VTLWOGaY24nYTlRtGNuPRq\r\nXX/15QMMOYMZqq2W7+rSWIFEgVoO913Df8YHB8RoDvOAOKao/Zt0lU4OcWol\r\n7G2VokMzhXtYJ0Rwg4f1iEv58s9D42sjcfG5XDNc13NvXLMh0HSyJ05XCbKM\r\nSAE5cvuzdmkMrlm/Ctr72FMot7y7qtF+VmI4T0wCedK+emSqwA3R+hRMU7it\r\nsNUryvfEokjpDV0jSYHCFcHswD3ShLlQ19ZtbMPPwYIJsXg5yKt83O+4wEKm\r\nKJkCKswpBhek+NFyyfiHEiMbIMB83OQxCi256sqdCV1RUd3Ph5sx5PbBflRE\r\nwEFivv3IO+a8bIPyjL2tpxI2cjjyPjlk0j0=\r\n=Cn0d\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.223-beta_1681845040911_0.13360995798681885"},"_hasShrinkwrap":false},"8.1.224":{"name":"meetup-web-components","version":"8.1.224","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"163996ba3f058ea332f2c09887ed0df1384874dc","_id":"meetup-web-components@8.1.224","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-y2jHX/SIK7Gk37V10KSCQe4JDDLP5bWJy54iuPtzC4o0HhMyeW22MUlU4z0hMhkj/97Gk0zFBf0Jt8UxaCH+VQ==","shasum":"a35e98843051a94a7aaef54c02bb3f86c95d6a99","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.224.tgz","fileCount":632,"unpackedSize":3089027,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCSgnqrlJU40WI56F4Jk3sz/2myS+VxT9gjnpselpOqdAIfPQAZl1gOJZ8CAZvFlAj4JTVmYBhNQVFJYV2xPzZCSQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPu9JACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqCQw/7BjAIjj3HZrmYAgjw8Zb9OJWegvqSpTfNpHffPRRoLvDhCuZA\r\nUf8Cb+MAexNAA7+zHtu90bhAEk+Vn+M/fnnl/0TXUDQXwwT0tIfDn7IGRQG3\r\nk5mYvNruS/qx31d0wKrbwfcrYfxBranOpFhmf/sr5FjyiaGwEdUH1w+mpLj8\r\nBbUeW66ra/qr8AdEEr8cj7Iix7l7oTYHWfXOuyO5FmC5FmzAejpXzI0Cw0h/\r\nELEP1+xfu0AnOx1/92tI6Rq7/7gNEEtqIaGflCVDiGnYHc6gHw49mvpwnro1\r\nM+Z6JzmO5Yd1JZg8onnzmxCCiRF2cT9gGdWHYNLgtC+QdnDPBSh3U3hXvX+I\r\nLQBxQjtYbUpiUVuxejGgDDjvPOOj02jmrOOACWC9o+N62ih23VfH4Mv/2X86\r\nl1eroPuLayqADqFtAeSauMjeCHZVinIFUWfwYtAoFR17Vrrsh2mT/vExqXid\r\nkGQeUs9nlNssxbrbONExWm3NOx0RV/1qTIMqahtKobf8YwbgMUbSDgu8l5f9\r\nkovcK75Xmhq0G9ERbsAFDFYFuPaV4ziEVZlSeg4bMXCEpoK/M9Ca0ZWMDu5Z\r\nn2481cM0aBvSxkGzIrlCAfbLBvX88ZRaWiIbBJBN+YO+JcMRCQBNR6UotEgO\r\nl6ib28cGTrsptQo6AjNWvbCtcknrbLntjoI=\r\n=eBFY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.224_1681846089270_0.835836978650716"},"_hasShrinkwrap":false},"8.1.225-beta":{"name":"meetup-web-components","version":"8.1.225-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a8c3ff5e9acec6b46b11a23929919ed26db63370","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.225-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-HzzX5wSVF7zsBco1M87xUwJP9VVSId6lWcuCyldZL6NszOm1SneFsIIk5E9/dyAlLjNR9o1vlfktCZQBLVw4Ow==","shasum":"5f5b26f9e7b22863b110de1d685e9580880ee5d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.225-beta.tgz","fileCount":632,"unpackedSize":3088897,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDm9lCQ8YEBusS4RdZYonO5E+8XRG9kDHrMg9J6dPAUWwIhAP+nf9CBv0WxNOnwQyMG9xSsQk0doLaW+TpbKCf37PXx"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQUSPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohzQ//VvG9NVWlmrzI2q6wVYXCAyG8SLrAf7aiJbVHqRy4A0axzMyn\r\nlD+Trki+Jc8PwPV3omujapjV7zFv8tyC/f+8qazMEODa2y0MGn/qc/CxJ4ag\r\nLc2M6ODE9kHllxwPpGDvIs0BHqPAhYpJuMhHSSIYzJ/kafyRRLddoA627+1x\r\n4NE0RdxQrfw+AadQsx42MpSQwcfjpx83Wvm7g7upEghUU62W3ym7o5r6Y5tg\r\nfwueD03T8zaFcAazFY9c2/EFkAppmi7b69nlt5FCyZ7BamKO7gNqq/HB8ohj\r\nrcSjgiIbavunKqYSrYsyip8LAkHNdKoBxDBqBSsVJXmq2rXOhi5jafZZjrTJ\r\nsM+qLVzwMEo23POk2mMfHNu81yAjh5+8hN855dOGY3GWl39ZzwsX83s8lX6e\r\n2Wk7HE+1e95asGR24w1IcaOITzptSuQNt1S23EvEMyViIPwe6inmlLdfB0eD\r\nzO8OvclA355UGLlpoBZ+pOo7WELBEaX7GYkfjWkcKoxjMVlQA2bkovNjTdrj\r\nWi3skjZZ9reQ0Vs5lPwhKw2bTOT07G2CskTWsF9nsf3JBmtZJEetGs/RFrGM\r\nmiOnS0JvyGSH4qiDr4vCdDJDCjxybvflDgP9mxus1XC+oEDpG4nywmkESIWy\r\nISilSkoK5n6VZZPngZGmhO29vebzhwqOtcg=\r\n=8Rh8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.225-beta_1681998991064_0.6854720668834338"},"_hasShrinkwrap":false},"8.1.226-beta":{"name":"meetup-web-components","version":"8.1.226-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"03aaea3b527475f400625fcfffa93d45f9d4ebdf","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.226-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-4kCTOLHluLMBKY58QpqrisAVbYekf81Id1bIKHXwpNrujlY/e4gQ+3x12sb6h12n+lQaoOyhnaaXvNVTVmF2vA==","shasum":"c1bdd3883cc60725afa14e2546c127853a85aa1e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.226-beta.tgz","fileCount":632,"unpackedSize":3088835,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0GqxigHIHQbUZvfu+0wAWCyyQ3kec9T5UN2YF1c2SbwIhAJ2fCUuZtZerXD05Tj6WbvK6DGmokjCCGfXK5x1qvnFg"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQUTdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkJRAAhmRfjh/70aV94t5v5XeFmQAeqZQIh6C9ngmnF+L5pHhzEwLw\r\n3xxRnrOym8E65Q0Fhu8k7/RUUQkCCbHao3txwAt14MVFibF7Z+olJ0/XflB5\r\nU/wGKG/1WRwzvS7Yc8YkOcqH9RQcCS3KDKGocX2dHhFNMW8MGXebpW2zWhOF\r\neImoIoLJe1VQLeSpeyuioktGtb0eM+KRwy3jxw/Rfsq9jv4swp2JSOx0EtB7\r\nCc9sZfjqZUYLqw1g1KRLHybZX6oebyLjzUMu1dyljjXuTm7qexWxHJC+C/xB\r\ntSN1VFiTznFHuDX78f+jv8PbnCTJ6t57M4Gr0iiBQt51UgARWzMnOXUjQhXU\r\nLSaQbemSAJILeFONGsNaULZcdsVH4FhUl1oL0gXGAQCQ31kiQb7c5gumOOZd\r\nNP/0iskX4Y28C/9K8mj+Zmsuwmewz7/cwK9K0UZcwu76CMgtf158M6dZGpfX\r\nqAwZbp4NXvio/vq64SAAMnQlhhYR+aw59MEjP9dQvYD0qUtY/X4HEIHCcew4\r\nHyuV0yIIhxmSljyU0IIMYqTt0iIVffkvY9HuCUYtWyMbaZegSVxD39ibJPwW\r\noOj4UMOC01sMhsRA++mM/QtHWQERapm8PTkRbSdaSmyQXna2BmHzlK0/KuRk\r\nG9AkV+SulCK8Wu2FN7J31Y0b/iRJbVSO9Wo=\r\n=azhF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.226-beta_1681999069369_0.6880357685085348"},"_hasShrinkwrap":false},"8.1.228-beta":{"name":"meetup-web-components","version":"8.1.228-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f933b7a673b72e239ae7413dc72da7bb53744cde","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.228-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dJlFW8z1a6tYRH8I4GcT2ZozV6E/Pq8RgEwUJkWQg1w/4P3alU+JSppaTQAR3VL6ZoIj+peN4E9pwlKgzgcn4g==","shasum":"319a0353a8c0a5ed690570d8873ebef3192a634e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.228-beta.tgz","fileCount":632,"unpackedSize":3089062,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiTKJNUZHlxhJpRC58rFEEjBePxPA6qYiJ6kctqGNS+gIhAIK3X9AKFGrwrxeh0TPMyrk4Xd5vJ8TMb/ZbItO3D7az"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQUvOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoF6g/+Oz/68zl6fyb3QizGrJPmEkjEWIqJe3t3X0U0wy8DiUc9JIzS\r\nfvJxN44TESZ/zpWKscdf1Jv42qOJhEe9s30DR8lXinzF3mNxgd3v8cL4vvM6\r\nCI0plEXUsd05M/3l1KxaBFlskSXDMgVEuphG7y6hjoTz3d28SwPp16VA+lfL\r\n6sk1F2wg25+877oKtq+7FqZxp/xNU1/WRWLJBN0NvOigoCJtrsqUOzjiEwo3\r\nZuOe3HB1C0C7zibIwbMClOCGD4xv0iiLu4Hs7ZqgE3y7KQjPyM3+6NpcE+aG\r\nMH5Mr8rULiyA0xoLdWE+XpeGAUhjuuRecteTFRKkOYL40Xzr1ZnKBQr1FVgH\r\noVi/ZOhGdapB7uvVg4yDdRhwZ5O+ok6aI7QFqaOL6jPdUwPSJC+e4TPg8qZi\r\nvhoGgqTVcwNYh9HBnM62eCmDDp1zaKdEG5YzGLa433JjPaI86aYrpiDgc/aF\r\nqUOahy/r5e3B3KdocNFzyRtuHEuaZ0RPeLqu8ukGCrXSdgk4e3YlTBD1xNF7\r\n0O64hjKe6qnD98lEgjyCtCjECpb6fgzxOdXFGfprSQJlReJP5jfIUGTxuEFP\r\nrl8bGFOt8/QqNq4OubrM9B2+1K15psNngPS89ixqWk7hwHxyWa9vbW2tFwiW\r\n7RwJfLOZ6IsxHA2nCG7rM+NmjYLBVU5XFL8=\r\n=3aFR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.228-beta_1682000845930_0.022232170589246758"},"_hasShrinkwrap":false},"8.1.229-beta":{"name":"meetup-web-components","version":"8.1.229-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"69a858aba64c4f8ebc34e7151b538eae75f4c9ae","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.229-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-SKuFfDlXb97rg6tT/6D4RprZuPQyCb9K+nHXh1oFwNBSvcXJG/AHwaSfwY4lWnqRKiryAcIJ1WIGOnxabTu7bg==","shasum":"f95ed39c017c02dee586194b3241e3f4dfbec4e8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.229-beta.tgz","fileCount":632,"unpackedSize":3089120,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAce5XsZzAnm3joVvvqXATzPZyu8XwrTPHAdFo8REiDAIhAO/VTjaNKNm9qqnk5VsaRrDaMT5eALJAGgbORKY+iQ0J"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQVmgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqKeBAAgJMpzDMCziorDZNHbgdOOJwiAfd+6kFbprok91DFuxVAQAOP\r\n/mjfVJ2UTIVcObq6yy+Xdc65p0Z2jKEusu/TfVBzMGNufuOH8uJAm8Pkk0MP\r\n2D3/tgVNQPeoRLMIYjuzX5hAiwOfAky2iC5OQMk9RWfuaPkaiZAwlesJGBDh\r\ndKvESv+vcr5d8Oub6vWnzm1rTzKz6LtHR1Z0vqS/9gaUpmFSIjWofrnSgLPr\r\n9OzYSTdO36VZ33SFx4ho+x5X7iXIohB6pNWjQ279/QF8UjzO70HMSSIdMeXV\r\nQrXXHqCVDi2Fxa5V4Zm3v65Un/Xq6Qbut1/8xJ+grwxXtcuI/DWRuOIgQtlF\r\n+2r3s1HsQLfGFYvdwi9lf40Zyeb8XB8Jq+/Sx2P/6iLmeN7/drZjW8gJMu+E\r\noPViJOf55+wENfa4BPvaAnexcsuBJrwozOM/U+sEa+8C9BddewkX+YhNDXwA\r\n/dVjUTKDARW3UcFz567Yvo3vjb16hvQ5pmkLWgi76B8rcZPZGRRru+x31wwb\r\nmE2IzkTYe1dghXdb6gFfNwm/lzoHyLYJ5utDET0IzdDJ0re/Tk6lLCZVKpy2\r\nqkLkDkF9ojo0JAjzfuwKl5kuu7KH1LRTnaJvaiLszr6ECVguPlYa9YrpeUFD\r\ncYlPXPnsSI3C12TD6O3SZ4Sdprancjuwu48=\r\n=i4xM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.229-beta_1682004384005_0.3110934174324458"},"_hasShrinkwrap":false},"8.1.230":{"name":"meetup-web-components","version":"8.1.230","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"25586b4949a3e31659e91342dc17abc4587fbc72","_id":"meetup-web-components@8.1.230","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-LGR1Ezk4P5eDe04D84LS5Lm/3zcJNe6ez9sHfOgfNgybqOJ3QSroemPgocMMIORuf+clPzSdawXS0jAiwTMZLw==","shasum":"acf1922c7d4932d1d1ce25299c863aacae188e06","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.230.tgz","fileCount":632,"unpackedSize":3089057,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBHKKDwgdJm4ZFRrOzW3hdTgB0nMFvoPwoKFcVZ1pHFQIgfcIy1IuOx5zoUgQqTszqNbDgHIY+VImuUjZI+RBtuyM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQl6IACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr0Iw/+LNDKbOSkV+GCCmDKgiisjNn0SwDqskg3W5uipd8RPe63i8l2\r\nyHk0BC30QyUzsz4RUoc3e31xXw/Nxp3e85hELC6CBOwHUKWH59dv3+7H0M2s\r\ntDjocLNGN4QFAZuTuihK3nqafFOjG1o4xjIut76A4xdvWM7FRaSoiuTRXn1X\r\nMZ8/8vEIVTmO4x3Ivvk/Kzn6vpO8h5zeqBzRvBwKXniSboDVLRHVQcOS37DQ\r\nDoR+riKOIwsJ3qoVkm2rPFOMeLe3gNqv+mUd87Mbnfru4zPMgHuBuL15BBKd\r\nQoR6mEL8BaC9QAf1SWRYube1IgJC4P46P3hGVXRX2bVpwNrgJOUPj1llvMZR\r\n8BL1dcIjTJysODTnjhBWj98Xs54Gli0iaj+JUr8+8EDKOprySKzn/JcRv/ig\r\nMcISeYqhZPDQsBAG/KsUsM1y1FXzt04powQa0DhRPVPf4DWBFh/rFuDFelQ8\r\nPqBVyVIb9GVXH3/dYYAcqmmNZ80lZAa7pjupsiVWtj50CHxleJYmA7pVhMF2\r\nfyZJTyf4prKs3AMneLzIdd2+8aEZJzW+GQG6kJF2v6+IesxCBGK79q10CiNd\r\nbxEPgbssGRl+8gc+uHFRniJfc++YTuYyajEm1qP+5sVKl3LQSULAgmCUySVO\r\nJvPJwH5zDevD+mCK1oeGcmPw56yX+PIhLVo=\r\n=46B5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.230_1682071175910_0.4320305720817539"},"_hasShrinkwrap":false},"8.1.231":{"name":"meetup-web-components","version":"8.1.231","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"74afa11f6689392f2cc90dea68193da18491c860","_id":"meetup-web-components@8.1.231","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-jKxlYPqI/b5xxj+69zXgRekWEfrqkR0QncdPrrJLJy85tPcThJtdBI4RHoxckWw1atCFnKfB+t5n4FyJDpyi9A==","shasum":"bca023663cdfe21440d3c92a09d86adbbe73dcd7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.231.tgz","fileCount":632,"unpackedSize":3089145,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdTK6KkhlGaArkmURFByUNAfpwwB/rdnr6b+XJDpHexAIhAMMFnFYYpVYcriFWvkp8sptcXykPuOeFWd6Cd0K9wSAL"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQl60ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrstg//VkhoReFvJBY2dfyOJHyUanaSnSU5fCX+HNBjXDLsK9vqJ0Mb\r\nbN0EpKZcGfLijsWvsma0byqlaL88uAZOpU+QgA8iM2KuNRlQmD11fo7OBiw2\r\n2t0bmX4Nvy3cqQBndxSZNOhPrQs4rG6nThDtC+WrrzfjlEKUlLGTaSMpvSW7\r\nTSAzxp0+05pVD30fbkWo7h9yCURut8AasPyL1XAMRoVH6DtNH4CH0MtzvroZ\r\nX7q1fj3YXm9WRDYRDDeB5T6bLktPlsLrhXidF9K+c6kmKxOM2JNslxUikftx\r\nPZCODMh1rrcdlIj7DlfUhCT012YTprskd+w6ebZYL7obgtTZdstqwh06yO4P\r\nX4cF5fEE6SAj0EUHUqOva3LSWkN+d/9eW0ZZWNZBV6m7NIbuDjCjrilPu2JP\r\nNvbBeBSB3XNM3rrwd4Rm8rBmWxOY/6Gy2rXHoHxl6OvZO9Jq0PTl7g5yDL/a\r\nv6h1Xnpf3tooxuFMnZzXLKipATZa96pJsSn1f/20CZykNN306IJbUO6cDbM/\r\ngSs7yhKaZdbxMxwtuPpsaeOFOow2Oo+4ulvMYu2Jv/5gfhiOM8EL2+M0+aYa\r\nyVT8DAKFZt+V3K5X3GsWp8BPsPhxUy8FxM0QnKEpyscvhSgm7fC+oSBEaHQn\r\njvIHAgrijdKY+NL4Cnb3cnKWK/X3zfzitAs=\r\n=dulD\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.231_1682071220646_0.09367839128739663"},"_hasShrinkwrap":false},"8.1.233-beta":{"name":"meetup-web-components","version":"8.1.233-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cb1bda9a12e64e355aab64b74ea302be5acc34c8","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.233-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-aFoxzAYQcVENFYWV7xOUka0GaG0QQdcSbYCgnZ6LL8RH4ZBt3Yd6i/yMjKkF62GBHGdpR2gfCadP8jbcyEVvPg==","shasum":"d3914d5ee9df2c2f8b67494b42181c4df53f3265","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.233-beta.tgz","fileCount":632,"unpackedSize":3087852,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGM3bjyMnWoRap/OHIjJfsDAXFAy8LGZvRJf7HM0laLQIhAK3S/SZk6Eb3TWR5TwdUH8V88mgTQIoetB9oWU0X4UaD"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQnWSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmricRAAnvDb6vbjRplGWX0ffMeIkz6YQ/GLda9USImECxxAGBBvstCE\r\nP+RwOp/XyC/uPno3t+F0WccJkbZr6ElfCbBf6zryNmbvKz+pzfQi0HvMEO0T\r\nLjF8qVKPQutmGhHMlBAyyph1bvkdt/oYXbdvbE26SqbNfsCONubwpNN8CEll\r\nvkq/iJpfjtyKdyd4HjcggiX0hsN3BxRm9uNxzXUEfQYcnRrKfFaMiQJeelnM\r\nOKP6FHckGLxE56nUy5c43ZZoAl58w0kKvd4JciblOLs19LxRMMPYXu2ShHmB\r\nSy18kfXKgDO1kgB3VdKOc2E0rKBEYQzb15VgEpfNK0MmK/NoYyyvKnOb6TlW\r\nAzIyHrB2Zl8DCi2Ko8G8AJDQYhmqD6M2B4Sb8HAvFI7YdptzssMJFuIUEtPb\r\nagrQUnmIjcpG8DXKDBG5xmxxOjw+k8N1qo2MiCCLOwNHZMEB/UoMSUuaygt3\r\nis+H96/4RdJiv543eJyRz736n6Ayw4eVNM65npW7hiTspuForziwriICPNCf\r\nwX+fXms8SAnqWf4VTdZ4N6yo592Woq8TyIN+YfPqAgmvtek1kmliVGOHRaDw\r\nj6KTuEQ/yZOb3gpKtGc3uV5I84+DfdsY/KMkapr8X0IgizAugQXVthvu6pMp\r\nUI2PGic9YEgYdAQGw0P4sZy0c9lROnYVUEA=\r\n=FNaS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.233-beta_1682077074585_0.471527107213648"},"_hasShrinkwrap":false},"8.1.234-beta":{"name":"meetup-web-components","version":"8.1.234-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b44466e464ef7e7abf270061eff299dadc8c633e","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.234-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/6N0BAXjyZtp2ueQXLJKUCPYsF963RpZ5H7smVp9mvoKgvhhxOzrh/k0Vy+cremv92ozScUMD3nW4AYeedcB/Q==","shasum":"2dde1c38e544dba2cb7842f0f7eafd19d552c842","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.234-beta.tgz","fileCount":632,"unpackedSize":3089575,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3tRdDJJuP2sWANdxGRlhaTQVKGe45VDApXmU2olNlGQIhAMnlI8i+1b5B/NaLj2vRFtZhN+7PNud45dfVANt0ka3q"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQnqxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpjJw/8DQJo+WsspoqzG9KKo2hrPxGkzh5blRlvh596R5fHc+E8TJqq\r\nJt+lB+KySSLBHzdk2GQ0+xjUktgAKu0rIjJ+6RWmU6r9My+wkgO8VDf4FvDQ\r\nwHGeNdI9pkhgWQj8mvpcbx9XWuzA0HO7ZLptKePffOLMjnJsOG1leERsRx4a\r\nUX/3XY9EjmVY7nwsm4bqbhspSUWMK6U+Ni+CECwt7ezl8bsd7yyslIfo47uO\r\n9sG/hGggXT1yk1qE4wXB6nR9IqVIT+MpB+sccxrrrAWr3Q/8w5tTWGzwQctL\r\nByJ+DKL8qhabnXu0NM8ksiSDhNORpH0M+n/ueIol06ChqeikKtLymS13i95z\r\nE9jfdGVTc3feLKDPEDEnuhbr/zcISvuY+N7UDP31malyGDz5OuEel1tktkHV\r\nYLQcqdbHvDbkI9CCiCVqg/7ASEntSgIC0yatyHP4kWfzdCFnOE15NiWbgkHL\r\nYfbzPfCeMVhXGWGCKlMolaBFMWY1nyisOLvlZE/GyQD2qhrix9mBNmpRrE7T\r\nWIPoYzQsJFVVfvBkQ6o4o27s1IZ1sjwZC+f74S3xRAUD828Sp0UAMEO3tMx3\r\nNO56fP9BXvBhswpaP+Gp1xkaqrB0BZ4756+iPdpRtNjPtOVztfz7L6hQBFhf\r\nvRQhNxcLxLIIQvg0bk0YnDFJWUJWQ95o7Eg=\r\n=sPes\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.234-beta_1682078385475_0.17563060755492876"},"_hasShrinkwrap":false},"8.1.235-beta":{"name":"meetup-web-components","version":"8.1.235-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6a9d839d51cf2d812a6f6ce1245bbdcc646122c5","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.235-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-M8Qf5sGDehkX/l4XVYHpSZGslOYtBEHZrxLJjyyZ2Nh2DcX2iDTOBCNdTZ48twT5d1aWbNprF5VBToXb1pRajA==","shasum":"984e3007d67b258f6c796a08cbde3659b2f04bf7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.235-beta.tgz","fileCount":632,"unpackedSize":3089512,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCl3isiH/AUN11XRgllncbDAMaUDaZ5S6JhR1Sc2LeXngIhAPgWfsVxUyrY2TOLZvMBPPTv/dhNggwNzIMYHtEigfu8"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQn0DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp69A//We9CFO60I9XrSulOH0jCFgMrW01PCfDaXdhRRRnv4smuACFF\r\n4IJFPE3fZFV90u7exqNPZVNYiYAluPGzZ7bGlOfn1tU0yxOtVjNa5qiDBXHQ\r\nHzQGLwor8iY4N/r+jJnp/U6WTUwz1hi/XDvRWvtSCe+OzOND3UsC2IrV+sBi\r\nofhBDvRNfTcoyceH8up3o7+B3uEc8PJHN4C0Ph6OHEF6AWjkk8xLNpucMg6w\r\nV4U4aTbgrMPTb8VbpOcMsfYbupEz/eJDvuy+P/hHike0NTuB+rvMqIjte8t9\r\npGpqQe55rxqL7yZtydaG++R0pSZI4scc7zpZ7C398MocfzHmraywZ4Td5AWJ\r\nflhsICRQJpstaj9fYW/NaCa3CdwLMUJFFzoPZRwt/qxWyYHDj2xLsnbybcl+\r\n8rHUs9dzxdwef2tted/0txY2kaJhz6uOi9Nhkkh4RQHHmUpOYkHc3acxQD6V\r\ndZx0ur9FNqrirwTNjXENLK+FQ5qWsXGXzjmTsez2dh0yMtTuZOVB8eo2pJdH\r\nZMmsJIBR6g5Vtptz/eUCiTH25WUlj0KiX1nB8u/2dxHg9wzLXBBmNieK7/ro\r\nljiLoA/j7L/SrlC2tXYO5JY8cZgB4hRdZmpEkznPNYPxJRs5PmmKlemOI21T\r\n8OVW7Xli3HjIpQtMXIpT5ds/chDS7SzVuZg=\r\n=50EY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.235-beta_1682078978692_0.18428270421124737"},"_hasShrinkwrap":false},"8.1.236":{"name":"meetup-web-components","version":"8.1.236","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"c57ebd6a95d782e875e13b130bfd51d443a2c498","_id":"meetup-web-components@8.1.236","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-GJBfod7KRliepIZfw6zk/cgRaIJrcIO1miCtCUjCQ7tYdDmiB0GreqxUJh3u2Ook3Wo7OHsyNicEahywEJ9V0Q==","shasum":"8cdff06d4a8a1097fe4329a02936bf2edcae6cb3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.236.tgz","fileCount":632,"unpackedSize":3089507,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG8NlvAvkCluO/4LG7y2InRhF/jLt4gzCMWyJ4J2XZIaAiEAmAk9vtGsA0j6zp0tcSVZLDgWvzRYp0+oUsNc9HQ1xV0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQoH3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrEtg//fZRcqNnNy0TeDUsLWVJRPqjkXuM29OKfS68FRuwcoPP2j+dh\r\n9udFB7tWFG8JJgsEwfYHtBvBfJXo6tTw9JHqzCe2yWUcJnDaPdOUkwgBkj48\r\n2ZAwtZKxbyDEYBOYlVVqaiefUtDqOp1fdFeABZiUJLq1Mt6/mSaV1C/71klM\r\nD+fnQfn28MgSXMUZihvVkXJ9ZVLd16A9VIpBZXk5x04svcfFitramU2OpD6k\r\nhoKguwPUzqUGkArdj0pL5GYDaKiekSemAjPgK81KQPGtPSxa2ZqOpQMGShyk\r\nceu7V3jTpNSydsfUZavcHFjWpbUEv4en1YvhQj6TpIgQjheZZ4bPqoOYI3sI\r\nrS3o7bxqwA682fu7W/m7Ltbw4ZZrU2HhfXKkt5znwlC6uZvgv18Do4LxAmU5\r\nrpIWJVHYFuTcY67cWBVYE3FMkN2oJl3HOcYXyFjw2sNXytavFUzfV1bg1+Hg\r\nj/0zohO7vIxd1KViIVzv85chHzIvpYLEr2OucZEDAnkmrPUfZjLzRpWI/Mp6\r\nxwZ8QUcUUdc8gurUVhk+e2FDS23AzpzfjNCFQvYtM4IkN+5SKpre3Q0q7uaD\r\ndIz5K/BGwJdbDunaGo3PK5Vuv3IA5olJYMvkl+kjbe0vpq6IuyS9oRslE//3\r\nZ9ILJ+QRK2pWNwQOKXiFzLHCgiULX+oRGeA=\r\n=Sxp9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.236_1682080246690_0.8221508772558943"},"_hasShrinkwrap":false},"8.1.237":{"name":"meetup-web-components","version":"8.1.237","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"83cde716299a9c97d64a5b790148b4e5d7e7d588","_id":"meetup-web-components@8.1.237","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mlhHdAd+jG9c989sxiq0B0OxDN5LhQsmLhL49qerfiXK5DcZMkbEnfATLSt3MLCh+G7guxSAyOcpn7zJaYfChw==","shasum":"2788eaf3a47a737394b8cc6533e32108b9958bbf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.237.tgz","fileCount":632,"unpackedSize":3089340,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQbiPimU7xIoI+OZFWBdEqK81ZVyQvIzytARP80ovYEAiAMVlcLal/k1pEYHkifj1qTCOlQrslnrCilQd+aHlsbig=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkRi7vACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqWEw/8D72Nt0+sK+bzicicaUlfs+Pan7eJnQNF6nt9jPpZbpBJIS7T\r\nPE5Z7VM4VBmv0AENWC7HbG+KzkH5+h/Sd9FP5q2IW8MGSFJqum2AtvVzLjBb\r\nHbcf75uCE621Ir+dln8lxswT2JGPRd6aQByTH13gB3Og6iP11/qL5+hB1u4m\r\nCuamikCmzGvcFAK47z8nYnojkuLxgvALqDYDgiA23s6QxCn6YvwZetYhyXDW\r\nbPm28MVXQx2+HMC7+Y5sDV8/hHqo/u3bofAvuyN/ye+eygDERmhMvDloKerO\r\nH7T2YAWSaraXRy/IdFFCzII02C9q4LhFp5q8akjdPfPmhPkJ/MctsfRJzdvA\r\nMudLNifuP8Q80QFsBMgBlM5PSvRmJ9ns3XvEhEZ2w2JllVfK+euUMN63fDGb\r\niDTHFfN6NgFnHjCmYSV/O9xosLitBKA2DLtt1a9Le7rXS6UQsZWyz81ZlTil\r\nZ8TwoRZzGn+sZsfj1aJ8ALS3+e1VZ3Aq0FOtoYeDLlsY4M3okeVw0jVRq0RQ\r\nat/jUcZj6drs0r3hdOZKaUbv11M68Ss85AMrK5efWJ+6NC+HGm0pGfS43/0V\r\nH/KMPgkIYwUR6Cym0YigU4SubY2AfXte4PhTtg5LEL+gvOB3xIHeHI8NBRwF\r\nvY86HuRfiPkXTyAUiKFO6UAQPnOM9LAoaQ0=\r\n=XHrs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.237_1682321135154_0.8108816661132656"},"_hasShrinkwrap":false},"8.1.238":{"name":"meetup-web-components","version":"8.1.238","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fc61b8b4a7592b24af963be5c1ef36a9e8595630","_id":"meetup-web-components@8.1.238","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-spsjf4xIsd/YQjjwviYFr6WfyeJaPo619LIAHEnC5RzaomkmYpd8EsASDEZYLJ5zibuRTVPdE9CsYEnrfIe4yw==","shasum":"f31ad3ee444fd21029739ab6236acf1319c96521","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.238.tgz","fileCount":632,"unpackedSize":3088042,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC9P+5HGda8aAGEBI0M/tLzO1MYt6+ncH4JlkdZD5Y7/AiBNNt/T/78OSolVfHGXRZy310fUk+qghaYA4EjX+Kh3AA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkRk1gACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqc6g/9Fy5jEShRdxy5ks8YGQQ6C8LJI6oJM4XlxHFqMNhgBC4vwL4C\r\nYFQI2uAew++P3+pNvltUBqh5OJn6c+t/uW3o9L5idH54VzjfXkF5bzEavyFp\r\nPeKWHt65PG4tQjO6vKKk6n8snT7y0E1gAiz2Q+MA0oJfSU0WHOmANW9OnUEt\r\nWnvmYqyv0Mm5dgsZgZ8WsSoX1rpiIRvTt1TyPbDnOdAmk09lZLWCBem2UTS2\r\nnF2sP1PoqblpamhTV8kid2vI+yKKv5q8ojZsYyme6flShy7ljynhpi9hMWWf\r\nuerONkEBQw6VhZMWVTQDA1jHu2s7TejGKsXAXdk867A2jCMyerwxz9X6njMo\r\n/pNhJbTsJJdsc7T2HJx9CIk0TKlDuisbKLP/8qRxbfaFisUmZAyl3wIREKmX\r\n0hXM1Av34iRh8m4HyBENDo4kKAm+BeNlzyTjPaffTGE9/JPG5g5NUT+/riMr\r\nBVFUohNYbmJeUvfpRXj7ls5zsFRenR3fEMODQjnj0Qzxo47MgscoaczkIcqg\r\nLlHwBxwrcJCK7FaqRJYb3RPQZ0VQZqYE5MeauJLsguZETw4gve747RAnsVpB\r\nJZ/LBhsU1EmTPOHj1kj6a9bWW53BWdoPi09hBUbNBZsiEhpGEfZtcPqkwGad\r\nN/T9C7eYMa+H9cW1y7/qjh5irAbmvn4BjIw=\r\n=rBt+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.238_1682328928115_0.10841507966154285"},"_hasShrinkwrap":false},"8.1.239-beta":{"name":"meetup-web-components","version":"8.1.239-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9093f24f5d4aca8501e8743b91c3570c80b6303d","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.239-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-IF7dkzTxA2CPc7UrM16ldWgz9OaAX/nzWlBT9hZf1kcBd2BnRcFFW9fV0ywVR1ZgXiW8LN20qQsU6qboEF8kLQ==","shasum":"51de5c63451b295390f2b9bd105bd3aa301e21de","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.239-beta.tgz","fileCount":632,"unpackedSize":3088376,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAeu6lZijeYemHNjyfXbPNi4MFEYAg+jo134IjOTFJXwIhAOqWp/6wBrDFoE+wf4n5Tya915UXcBSJ1anuEgcyvk9a"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkRllyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpP5Q//RDVMKeyb0VPOjWijGyn8SSjRiLZp3Ehs6oBpZoOn8SatSRIJ\r\nr+HsURAaumKcM9LNYF+u8Wwx0MZgmd1SVQ89Kesd5XiajGXrLomlqRXAg5YI\r\nKLmFhL6c/4bNPJcXHADYWzWbEg8Jc4btcdOSjGDCWm5e2G1XiJ2K2t/MdEud\r\n0zGPpc7K5z37K0k67GYVwNvz7xNhfBgZyU+KUl0wiDaraM8bucdljKOa6Kab\r\nrSqu6j0bnNC/8NV06WPMFv/OfwS014zoD2JLFTvKUsOj/HiC3rJbz5BgsTW8\r\nuoUZnFqYk+ShIqBKTsNz6+88MFEzR8UF2RI2pK39yt45ukTaPn9Nz8zssJea\r\nrjCYFT3Y5xrv2PemQWq962Jk/z1w4hsxM9IDb0EGfib4RkZeTfO5upbcxu0V\r\nOgJ5z2dADSDh8lTZeT4hRsknZvkJoshpPBVjHIXGwHVyTC1mrGm2zZIJFCwc\r\nSWx+RNIs9X7y3nUUwhAS3gTTf8XOy2TCa7E31nGHKosJTgW+naRmwUXSKiIe\r\njhc4UrZJLXhhcDDAU1AIa7/I1QvUgR7NOLsLvuzdvt/T34aW1k1MZ+IF0V1v\r\nNAWUwFEHqv+ZBfkOBlhOFUZHzfJ53pEloP1ckIcmC3sLG1UerQgsk10lpV2o\r\n+VepaaqjBvCNc77//v3CU/jRqrW3wGTsBaE=\r\n=BOzy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.239-beta_1682332018654_0.9337687265803258"},"_hasShrinkwrap":false},"8.1.240":{"name":"meetup-web-components","version":"8.1.240","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f64b7c6eb000c36b59e14d711195b649758dbe16","_id":"meetup-web-components@8.1.240","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-fdZhOyfGAfwwrcAsiCHZAjah6o+CtbvAme7LfWEQbJ7N+wRBkszz9nar50vMI7ggxVuWYU2eJx7eMOZbUYFn0g==","shasum":"41d453b9e8b4daa914640714701acfc77323c1b7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.240.tgz","fileCount":632,"unpackedSize":3088371,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwCiIUO477x/Bmrq6vM6NsJzKS60BhDis3ZqNKOSbg1wIgZMCllYww7H1XTLdxVQoe+vlqc5lA7iL+yO8gFWFDmco="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkRmFnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZehAAoZkN+DTY9GfSoaghtibFwz+2yRP+FU4Q74IG/LyKoBd2bO/X\r\neqTNhZrAUWoOy/b8lVJrSYt9Rib96aJTyWtuwyxNUnIoToKnqOP/yEpGtSZT\r\nO07NjBxp/vRwR/jA77G8HimOIpthoqJgCX6vmhtRsbQc6x8gMuV9Mb8z9arc\r\nkpfOzwPo/+uiKNe5ZEzrIhNcpoyt0Gj7RpKCMEQebzXHnxwxFzd9sogQ0KuW\r\nB0YYdti1+yhk2XHmZBQkSvs2sOIdAHgeB2Cdz/9FcFWFwLaSVeW4pdjdUv51\r\n0dCfGmuaZ4hF9Bm277F7uZBn9e51UR7nLbWL2fd8frDdLhbdtlUpe35azXOV\r\n+W4PBC3N5J81H/YDcSHuDDvq4mbwji4Eym3mE2UmDmk27qKneF6KL9/9h2DV\r\nntibnNRp36GjTZRFCYlmxe5Iup5ulnwxqVdBnAvuUFHZrxpIZbJa+jMGhTuO\r\npTDZOSFUNNtQVOvGiPjP7C9FSVEsiTUqrZ1uTkFp4+/S2uGFIDBFreKGLt8g\r\nVZJai00yxV0S/1Psg0w2RzEEej9unstkd/E22yBk/LAu87RxOMM/+sfJmoGK\r\nDs6Yp/563laMKIbM64LdAyNlxtGZmuAWgqyTwXnGLunPb7+dFLMo4fPqhsjk\r\ns3tox59oYFQtuTtlUhlp9POqGAlNzRgurmk=\r\n=X0Ku\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.240_1682334054695_0.6887053025816159"},"_hasShrinkwrap":false},"8.1.244-beta":{"name":"meetup-web-components","version":"8.1.244-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=14.19.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.3.27","node-sass":"4.14.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5e6808c003cf3870a37af8667de332c570926154","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.244-beta","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-2HI54iSAMUjNWzOfMOOtJYXILDSwqv1zW335raGp1YCCHtpWH0Ov+wX+ehwFfOliWAGArFMeKNlkGssng95IAA==","shasum":"16eefd2f5b43cf0c5c9c39849b826a20f1e3c175","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.244-beta.tgz","fileCount":632,"unpackedSize":3063526,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCydDg9rPcRsnPBp2KvQr73NT5Lav+s67IA/XT0g9AwpQIgYLeQSaG7h+BqV2XCOTL2Or53aoiof6FelErNw3u8+Xo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSALfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqXnA//R3LqMrrAD+D8M3w4SCwEm+4XC6z8JNduv7IvPCCmscCk0EUu\r\nm4pd0RytnCPB10QmNTRYyjcnkmdvxpHDxo+lya55C98NJ1GoEHVYP9PQC1rG\r\n+LVNYoSzmrFNvJJPEafeed1Cp3ueNiB+DBw10bB0RGEhmUxzHCq7fXWoQBRA\r\nv8ymHV4n19vZ2swjCqjrjtqSvjwEPYgE9G7vdCyoNmOTGysqyuG31QFFYcd8\r\nhlr4VzboT/kxsMfKSJpFqCBhngujgjlSZD8zbcqnyvh4GoSMTFliYzcReXXk\r\nOOKXlY7LkqCxx99c8wKt87P26Z8spmxcxd2RwnckBHxg2czVOHHdVLBrA1kA\r\nNq32ZDSFO8KysitM/BzQHUvDEqojt4HVQjasVXIoKnOyb3mAVXa2FXzMAZVt\r\nbWaV4s+8tZKJTH7VxEMkZa0c6kyl9bMPVpoymmGqSv2hKlxRpznsG6tbbGY7\r\nAS3n6PVj+Ez/QIbrVtMtUJsiEjhbh1a1Zbeg8rD3oyy9MG+ZvkHnq54Aao5C\r\noUXPP22Nl0mdgiWvtU2ZrmU5lQzCLGn2FORh6swOoZXY/ymqHtjb24P0Q2rA\r\noNZ/SBE0pfgXwbZb7dUcwF6qCNpKu29CACG0eNy5+7DIPaplgqlKHCsbtpDm\r\nrN4GPX/+OAIf6bovlcMpOWd6ltWfiRAfBIg=\r\n=TdA0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.244-beta_1682440926810_0.47457754883660175"},"_hasShrinkwrap":false},"8.1.245-beta":{"name":"meetup-web-components","version":"8.1.245-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=14.19.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"9.1.2","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.3.27","node-sass":"4.14.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"18a19c547684fb3d3bad3a7847b344ae72b9887e","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.245-beta","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-q7ExDPUS9J2WBWnWTGkNE/j8EbhTIQyshYw2QLsQyi2qmplESuDnXmInLuFzf/au5kF0TBbn3dDW0jLbATScGw==","shasum":"d0adfe9e7a0eb26c86c8c5df2ce2c494ea1d53d9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.245-beta.tgz","fileCount":632,"unpackedSize":3063421,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZY02czwrrQuHAfQs+FOSCGCjBbpIVVRDN9Em9yoxD/QIgQq8/NmRSSoojljEr2dAe9UVE3x1qdLPWKZyZwngy1Lc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSUeGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpYIA//YCP1uoEkhWEQ0wYkSf8+o3UcUMaCxfAeTjLWzh/8QhnXDFNT\r\nSKPYIaOE56YyWa0wL4LmdnVuzgq9+2+yGckIRwl8dIXNTsowLCd+IQDQLSdT\r\nqRzWlLA9FndqV+URJA/vXsUhtvGVK6ZpsZYwfsXsOpAcMk3HR6Ve0RTTFywc\r\nywZE/wT7bpwTWEnu28t/n4+VWegZTLxMqNcUym/LrshjYVJsVWKzjSX30+Cb\r\n0WCPMuboWcFeoJAJkdO8Yye+6EK5hXzQfX70CYwYpYm7LbcUZgpkwoygYiIl\r\n3SonuqCpItp+po4C0+AuCn45UxpkfE4DLfAP3BNqks2AqxP8pPoRKugHr+rJ\r\nTVgo07Nxhv32Dm/nHUe2ib/MX3P6PDyjPGtc1DMUY7XBnChjwtWRRtO7Mqz7\r\nFV2mwWKIxzEjuBQA6uWF6HqAdR0TR/vdXgq8bSTI8Me9UmRtyd8uuqdt1BeM\r\n4eDuvDEvA7me1VDHISNPSikVxsvtdYluYq8CiImP8L/N0EDf+HKDIyY5PvfB\r\nnMEwUTqJFCTivNLuX/xoBsRkn6j7V0CNZTCwhlLkfPdPfzOCJBTkOyQ/gITz\r\nHCWg5OoVL9V7ZHied4ujmoCT0HbxhfLBOyhO6J/XNS380ePbb+vLrk/T00vf\r\nNu5J+iRg6/vrhGyoBaeKfygAyUIbfQX6Q6Q=\r\n=WIQH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.245-beta_1682524038274_0.2444387386129545"},"_hasShrinkwrap":false},"8.1.247-beta":{"name":"meetup-web-components","version":"8.1.247-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=14.19.0","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","babel-eslint":"10.1.0","downshift":"1.31.12","focus-trap-react":"3.1.2","jest-environment-jsdom":"29.5.0","jsdom":"21.1.1","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@babel/cli":"7.16.0","@babel/core":"7.16.0","@babel/eslint-parser":"7.16.0","@babel/plugin-proposal-class-properties":"7.16.0","@babel/plugin-transform-flow-strip-types":"7.16.0","@babel/preset-env":"7.16.0","@babel/preset-flow":"7.16.0","@babel/preset-react":"7.16.0","@babel/register":"7.16.0","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-jest":"29.5.0","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"29.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.3.27","node-sass":"4.14.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"27e9e73e0c305f3152c172e68651d91a16113849","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.247-beta","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-EXzuRJ4lRYN5xKmRRqxlJxC1A1JfXVOzFVzFNd6WFfoxoRpo0vJNaOE4eyChoQk82U69m53EC5jy0qVZuLh2ug==","shasum":"7d848a73d797df77c4822f210b21af4009a8e5a9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.247-beta.tgz","fileCount":862,"unpackedSize":5269375,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3lAZ9lf/BAPaMvOiSdGqkF0xZmiBFekeiSfIsZHTt9gIgNRuRFwBawV4mD6dsHKzB5XBHRKrqHGgRw4PH4h+7Siw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSZaqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXBw//b4bTiZ3xdbehnc2KdyoZRkTn9Ikfrqp6ndmENVPbDZjZnK7y\r\nDG4M7shnMvBcqo+tGSdlE2xYOZ81RHRlAX/3GEvdIHwrDDjMJbEpj3T4Cun2\r\nGuNuWZbe6tEq4wFaYe4vL11DuwOJeoz1pFSDvFeT0mAmHLr5BM7zA/On22zg\r\nnpf53ldudj0JvEsOsjAXBfwfouCj3GKC7bAtIrbITIIu726maSGvJX/w+La/\r\nOnj6knwUBwIx2/KObU8hklSGWzjz8MJeiz2EUstX0gW+hK7iQGdsscPD8h+Z\r\njGR/fA7iy6uSURTmHDdHIB8Gcf1pDO9kr8f88N3KV+7UwQK2EaAze763TC7O\r\nrBr3JW25w4SS3xbtPHNpVA5dIuBs1NTIiZQ1YL0Q9br0VR9ff+HGmRl/QWGY\r\nOb9VsCQURzNjgHeXBc2cNBSCltzyx9gGTiGDXitOTc9ClkZ8CBPw6tFyagjK\r\nXTzXiIz4xmwV8980FDLJovbV139qMZU/o0C+hm7v66zKvb4HLVbuF1FZZNRE\r\n79FYTaMB26jW61Nksi4T3Bw9FLBJiJWi/gNvXwqd01q/T7r+a3tCbpVwQsuL\r\n3rOhdZxVrSxDIB3h0t+vz9E8qjAiJ6ziEK4Vmiy7qV49UaGjZXE0EqgWBChk\r\nwlF12yKSiUfweZTHjTrDc/zcbufElw4rmy4=\r\n=kjOI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.247-beta_1682544298195_0.5700534102543768"},"_hasShrinkwrap":false},"8.1.249-beta":{"name":"meetup-web-components","version":"8.1.249-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"aeed11a2f87dbaee8bfa5f1253f09b558128cf14","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.249-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Q6RhwAPJD9svbaVT8J+48uzd3c0tTMSFSPlbD7W3pgL0BrSuE7EKwUiqrv9v7jkN86mDvOni0R5mtBbh9Lcaxg==","shasum":"f2533f5b807a4730bb3c219c3604928ab22dac33","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.249-beta.tgz","fileCount":632,"unpackedSize":3088541,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC67yb6P3BnDriNKSaTCvgHscT7YUQsPCo53q3UQTqfoAIhAKVYX8DGgvpa8wYnDxu8SIO2SUJ3KkHlbi5WD/r9kWTb"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSiB2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrBHA//XsenanutWQJsIbZdEPW7EQAQoblPp+KWIfU7VuystalQDUI2\r\nIcfai42rkPX/Dwwt5X9j5raajG2o5q6wBc37mKh8D4GizbZHweOnvz1mbv6R\r\nSCqNOaV+HiF+5CGz1i20VHb1QeO9ExAe7jK9rwLM54UNvuJeSxDI/8Z7BNWG\r\n2oZLCSA2PuwNxgCtpPmHOkdUkzyp6lFNlScYmA8x62LxyoXsbkCqVLVqqat7\r\n91f/F9+s9Ca8VmKcRJgFagUCBE3gw/3Z5wsS8ssmmjkfUqzEIK2xOkMcCCZL\r\nvGk4Lz3O96jqN6YY/a85U2SFy2ZuhZ7HjkoZnTeNy6DvUMnceG4XCP6cIqmE\r\ny7M7fgzcIXPHW6/4eUnBByuWThLbgX7JLmg+3dElmo9EdK81MxO+JoTXvPNE\r\nEcXG5uvEluCFarcoxj46U6UfVxFPhSWBw8YZIYBvMzNMoqbA/wRezPLmuMYR\r\nfZuXos2X1DPX9ByHwVF7ZsU0s3/5FJPVjgDxlnd/nBmwaejubwn4p1mR4fQJ\r\nDpZA4f0wwPbBtClF2TcJFvHgXD6bxMv8lXsfA2XTzOmSH/1g7E6VjM5g16em\r\n8UBG/u3bYjkb6OB2WBXzuimFx8DnhExGtl0yq1tEXDtc5ZsyCnaH385RgplB\r\n/nML0QhuVVK2yBnDrzTo07bogpMvWxRziqU=\r\n=pAbS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.249-beta_1682579574220_0.2258125816209824"},"_hasShrinkwrap":false},"8.1.250":{"name":"meetup-web-components","version":"8.1.250","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"96ca995e55d823317a2c944c2c5bd439e5a8ac43","_id":"meetup-web-components@8.1.250","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-EJvuLOpFVHKkTvHe11pV1cXb4kQPM1b9mDg7AiTYxda+8qE/AIYvdAfUFgSn3mDpy2t3v/TRl+t9pcFmZIqh0Q==","shasum":"824b3246b2a9ecd1c24fedb442e06b5773d83c25","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.250.tgz","fileCount":632,"unpackedSize":3088536,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFomSec9756d0RXHyyubRiRlTKONWt9P3Dj26RjMRxlpAiBCehauowbJOR1+7pK+AmV9H9uemYg+ixoAnTv8Cp+V5w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSiHPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqH6hAAgPysouLjRE5AhSM57xhoiRbRGSLu2CwzM2+75iv5fNKnIYlR\r\nlhsWmiPW7WOvogESu79XwRhreDnvj2WYvll2t7KZyeK1jKkeTPhx5Lsgz0Yl\r\nPXWNP039yMmhyZOi07w7NwVvZds9EePuUki9wTlmRKPvCTM5PK1XARcaKzxT\r\nWqE2anI5aDf6J11su+0hlux7bIBZC1z6A29hff7JbddfyW2pVy+tHJhquc8K\r\nrmHOV2Yse+w2RGMO7nbeRJthwohPMkL1brLimotQMqMY+1RwIDJKnKp1L1W7\r\nYa79TXhfYGtXU9agPTKq9dlkaqea73hYqmQzmAnHq0ezJ7v8ShkhMqnM78a1\r\nVPD/tgrTQObAVsOom1XkIMZZ3TI7I2t/m2ujtPpPCy1PhlZHM7RaMT0Xev9g\r\n69qSttwPWmKRZ4OcwndASUek+H4va8ySP9ujGCnA4EYCyE3k1HSbzuq8zLhT\r\naejR7IU/P0dV3RowEf080sPZdv3OeUiXbP2UoeA4DxUoRl/YYc1IJ8uA970r\r\nCuXpPT7peYSUnwMzsn5H3jNmTJjwDvQPG39c1072PkG2o3vBSrn1hEVOkcrv\r\npM9oUfFklT7RRgp3cLNNkZhESuDxBxL2b3Kzloo6YRnKrHKPYVj/KlYp+spW\r\n1j49J1M6xSeUD4vMp13+ymlNtBy+tXOrL5E=\r\n=2H7K\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.250_1682579919243_0.636944654468508"},"_hasShrinkwrap":false},"8.1.251-beta":{"name":"meetup-web-components","version":"8.1.251-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e42b324d2cf4a37064121022d654b50efcd9ad1a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.251-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-lP9/cbryeglWV1Rl3VDPSdrFUnMW/NMQ6aJr+7VRiM3fYWpM8p++v96bjeBikezd9dbPFDmrhcNpP/KyLu1sNg==","shasum":"452ee2a8a4c8a6ab0d970725c0feef9f7948883e","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.251-beta.tgz","fileCount":632,"unpackedSize":3092084,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1aPEDlDpgUwG3lU7z+gibJ9S3qfUKcVc6AB2EqWBxOQIhAMbDunJH3ofKnKmLMRtwIl8BzkxDbVHUSJklKSVQpQTj"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkS8CiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqiQA/8DSpRqNZrbQ2oRbxPe4J1hGPvT0hoNi1A2HFdUw+fekKWIODb\r\nhUXlvLSYuSPRWp7tHfMsPUYHeS+rdiDQOkzDyjL7aHNq0QNQXZ0tJ7qXPqw8\r\nbKHA+1vlzhoapMVYGkO3tEJwrKGBPl4vqPj4oLd3fdNC4Ks/HomT1IkxZY9x\r\n4LxAKicDj5AQ9LfwHaMsKc9YxNqtUL8zoQ5BszeB6Eig2d+UzsHXMTv+kQ3k\r\n0WngS0QJm9K2Fnw1mETlTZmWCqR9tNSiru+drIvLwULV6GsTaZkcM/zspebo\r\n2vCW0BGl9UijAzVeB/0c2MH94DJlQBWjhcx2LaCO6d2FARoHQq872fvajLye\r\nPmU37R81ktjrYJRBROWOpX54lJ1zyYg0JMdwkYMJL3Xk0KU1Z3e3dIaU5+JN\r\nH3WaG9hwS+u/XmvecxwwLhPs+li6ir3/PBzeh11rx5+tgZ1sdeo2Tmy8nln/\r\nLQQozCemx4jIrM+muSKY0llSTkEDzMeuFASXgzmJKrANmoZFtN5EtWI2QeHX\r\n+F3NzYpWkcSAjuifGKWkGv85GXgdcis/mzwXcYHkgakHnjeigGuUAVeKhdBA\r\nLkPoaUyJKw6lzROSO8JNizirAKWRoNmCB7RceFj3Pd7pPG8FUarf09Yzxlwo\r\nnO/6dd3YCXts8iFVM59UMI8UyZhUECkIqCY=\r\n=kjL9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.251-beta_1682686113830_0.7766551695915593"},"_hasShrinkwrap":false},"8.1.252-beta":{"name":"meetup-web-components","version":"8.1.252-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7f9ad786316a0e0e569dcb5580bd72195f32cf83","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.252-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-vwKdkA6WTZIzPJVeVCZfVu7/mCvOhn9G9QSythwuELPpoBL8tlE7t2iDfHlAfu51/jeIVs0uATZwRaye3N+R7A==","shasum":"3c02c26e6d40e851fbccaf5433880a87735ca0e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.252-beta.tgz","fileCount":632,"unpackedSize":3088940,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3jmkqOT1+Gdc7++CQrU07MXON0mRey/tZCR92OIqRKAiAGnvjql/sh3CjR0HRozoR9gM4+6Ksmt7BzsCxWeFnfTQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkS87UACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrGRA/+M+iC26jHGEbW4XRFjBQDoGdz1OU/fiMNA6NsyAfRnlOwb5EJ\r\n8Qv7frmrFSoWfXbyHbLKlB2+U//O1oKdzDPjSPhuqbioQPLag7wy6qIHL6/7\r\nfzmgDOU5PlxGdzezFZuJ3GsirVgIQlfYmv4b0LSjO89o3alaZ2ce9pQWyQHL\r\nJXGHZ2hGANKZVpSFnCtgn3Ug9/eB0pt5aec8R2GMEglPLQC1byj9hqDfr2gq\r\nkKhVjCMClilAOI5VQK36AEsRNpmXrXEDbxcHxIjx+AD5pCNjANKjxEtqffmh\r\n1ncEdfeJMY79F2/IUVc8aGJmcX7/kBp5BDiZyZlCdldFI8BITAdVBwmgIo+f\r\nVHXJRY3jQ/cl1PxNF7YTMN/3sYK9PiGpZdQx7pOZqJoeGq3OQn43FG3uYCMS\r\nFLBBhvHvP4mMh1wg1EUBcxqHuGKTX3JxjM0WB+KPaYdi3pyNRjj7M2fsmmdO\r\n+UAioyIpno74QPVvEwFVsDaUqDfAXSrRybkejxyxbQYCUvtpJjWc+5O5wwB+\r\ntjjsHGSl1ZB9EY04UgTmloug66zQ0tnLLuNOoiZDf0bu9mnGPNCi5lZ2rYtA\r\nI4PLkIJlj1ljNnvlBPJaDzNNDatsowBPs4qN/13aSI6a8YWHgZKQuEXueu7j\r\nkEC/JMCwD/7u7aH3CW2g+l0TKe+5Iyi11zM=\r\n=i70d\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.252-beta_1682689747672_0.813105250889685"},"_hasShrinkwrap":false},"8.1.253":{"name":"meetup-web-components","version":"8.1.253","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bd48bc239c5b8e6c170e3a1a810960cc40df4a99","_id":"meetup-web-components@8.1.253","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-FWp1XHquoX9/x7p6KJ3Nbl0gSkvneaOfKRMN3u67juL+ySzaSG+tr+UO5PoJZaeTJI3ao+rErzaWmPxr1gjjhw==","shasum":"6fc497784337fbe799f18c8e5c108c79012d1a07","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.253.tgz","fileCount":632,"unpackedSize":3092079,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClFsD2l74RNbNrmaR8nusOQppmP1BCNaJ1cCV9AVENpQIgV7kH6sPuHv6JPImhz68ldABmNH65vvp74OJOsOaAD00="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkT4V4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoiYA//ZuHYQgh+ZQG9/N8heGw/ZekeoaeOvhEll9WZkb9LQkyR8KMw\r\nhn0knb+zZ10XZX1KVfB/HNTL3k3NkuYkMlnQvYM4JtJyEqwVy7BWlZUOUUbI\r\nmD6gQoeGHhCaV91xX7aMbSWzQ/vPDrFzjow61Ar5i75Rbk6YcFKrM4jIcb/Q\r\nEZjdfHx4t2iAQBpRiONsYh5NjsOJdOVtX7OwRv7zcHWpBWwRVXhEfRIi198w\r\nnSq1En3UT+8NHqO66Mv2AnbDuA/nzj4B1el6Vk7sFvwzNEtoz9gjqlYFajRO\r\npHo0DbXYfK4dpLdIDyESWCFq3MpdxWc8SijngcoaT6/GZAcni6lZ55DU0jq6\r\nyTZ5IdQjYPLkmifFPjp5bbsF6uwoUlKP7pc1pdCD7Af+zp+3MHh7WPZEoSJI\r\nE7y7O9foZhVU/Q91Ea03d4HvEUVPHTqao6dauU0fhDuSBRN+cV3dMARIfU/X\r\niHVNL7YwPrWzyEgjddSYJlOuwDOmy8OMtCyJWbsEKZvbr9ne20KmnsEXZdXV\r\nAbQ59c7CKqxofz/q64OW8HJY+z6Yhm9Ts3C0u9ufDnuXN8Da8cp5Nbixic0H\r\nSPaPYB+zsvKlk2b2eeUfn59svuaU1/oW2kjjICPb+OHTAjeTtht4cFBRqCqB\r\ndAYr9bwnrjrarnVUojCqivN/EKwbngyqQ1Y=\r\n=He8I\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.253_1682933112639_0.40795165192159066"},"_hasShrinkwrap":false},"8.1.255-beta":{"name":"meetup-web-components","version":"8.1.255-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"dfd3cda66b0aeeaa3f41112fbd6237ddb0c4033a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.255-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-s3oyoBWR67wsM2k6UqfHI6JZJNpsHu/julyIAINHWM9il2Bo46zRbmi2UfLLPZLEGC4tJABxnyVs+8nb5oYa7A==","shasum":"88557cfed8e3a32c44160e0366248706d7de1a66","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.255-beta.tgz","fileCount":632,"unpackedSize":3091980,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHkoze3XotCjGuLAHsZHYuGrCVvucWKEevzIayA1yJ09AiEAx1Sxo1NojufLoVOeN+HZPATbOzVl8WVNCPzrEaU+rE4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkT5t5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHyg/7Bzm7mF8xwsPGraFJzfgWUkMgI6ZSrNBhNNQuOoaS4Zo/bynD\r\nNrCtm/DsjBz07G7KLZVJPBBsXgIlRK3gKD1QgqJRSrjBJMvDBn2MDP9jk1zd\r\n57ChMF6/QFcn3uNU1HcvfMRcYXZLX/fveB2Mn6DX2EHIeR6yx7ejsot/4iaO\r\n/a55M8/mnNaoRK69xf7WKiOle3PFGO9BJ6h4RprrJv9XAeN7fi1+X3oEWHZp\r\n/QV8A88DJjftJEDBOjQLSk8YlgyM+Rqyif5bGzlbrtRfVua2T+64bXvvEZjG\r\nuD7uSwrf8hU/Af5uqizNdVrigsbuA9rObV6DkqvAvqtS0hyxNvauoBnEPaam\r\nZ7tjQ81ObidVLF+6rBYr1psJ0BUXdMMfnPnAc3rS8vpWgCmqudMamNKIfHrI\r\n06ZyKZrfxSHYKr/k0nsIPRKe7vKEtRuPfD5MHBwQAGcUh+emoGvD1sLfXtB0\r\np2FZgDAA6XrIRUDVm8xXg7ZhOiXhhFtY6r5NRJ6C+Nx2Ksyf1vuMAqMVmPlt\r\n/qrsRzIsOcv3ilq4kBijHU3+8uS6VdCmrW5ccQ5hJ/OzCDV+hmX+olbJr10p\r\nKs2Jl5zfFNiMtgOWSY76O+ohOAKoK8T9fM8Sm3Wjhdkx2o4ZEkPykgnzLIy2\r\n/qI38EP4y5o4R2x3fOMzPuvR+mFVaKWLqTs=\r\n=z+kX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.255-beta_1682938745431_0.5258570400693807"},"_hasShrinkwrap":false},"8.1.256-beta":{"name":"meetup-web-components","version":"8.1.256-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"9c802976db650638e91cf6764f0385f9bf9aaac7","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.256-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-KIzAk0tkI5qffYhhwksb89RIl4I41qr3+yPGeczzgdqNOx6Ut1GVug0Su6/f+7UVQc6rtH8La43dVE5M8UJBtA==","shasum":"b1860c935052f0d0bfb78f5d6e487c73a53b8a8d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.256-beta.tgz","fileCount":632,"unpackedSize":3092076,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOvLapK4dU3gm66JMK/SdAgQ/MgUvk38KG9V5A4NtW6gIgG3HSfvsv2NniP/3JM8eX/3BLFwuW5IbB5eppzAwhyFo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkT8CKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrW5A/9HGrmFg1bneR5+vJxEYBFfhz499HQJLfELLOy6Ws7Fj1AH5bf\r\n2Goh/im5hIQkOeJMWow/tmg5zXi8q9ksL1YnAUSOIdEphC+cO0f+KZ3mvE4h\r\n/qYLp+04fECjVuPczANYwSW3XkMhcP0nsaofIwcA1T2CVdB4JNdUptHqTR2P\r\n/VZjzD5LkHi7sJmPKCzytjdqgc6g+90twcRrD9yJ6Lf114v3WTsKac9J7hSP\r\n1s6cgt999d986FzTQJFnvpfXqR0aqamCcknvOPGMyx5FlQAysEeS10L5qtLR\r\nkxA5C3+S25pehExEBb056hedgvw7vFYgplXzrMAzF4+l0mi58Cj8KoXmo/NO\r\nrsQAbaCq7lNYD3msttPKUFUh5H7YsFlJ7dimPtyk2XDb2Y3iDErWvdjmXD80\r\nNHT86USMn+lPYj7hs9WbAlpGCoK4KEVw7fsfApgYlBsyxtwNXTD+8Ic0uNQY\r\n0ApG/5MTzj1ik6I6381IFLmM6dTn7pW8OoAzkwp5AYYoJX02uYXk9NdjfSlu\r\nkqO/x8cPZP0fxf2j4U0J4me8/tWhKZbgfS97AAmGwG2SPMfft2IbbZuw5tdA\r\n8YUlwjZqnDKOwwNcUgDrfYxQlsiJ2VVQGzEZw9NpHmLJ4H/0DdJ0lNpcY/iB\r\nhye2nwKJvdYJDoKp2PSzGaLX1RrEfRYwm+k=\r\n=1CHk\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.256-beta_1682948233854_0.0779402126902462"},"_hasShrinkwrap":false},"8.1.257":{"name":"meetup-web-components","version":"8.1.257","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3abbfa39c90b85a0a666c353679f6fc3ab34a501","_id":"meetup-web-components@8.1.257","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-I/QwS+4Ps31d45fmpVIQKMLFoY05HEovRZhIlWyVSRRI9NV03o3c/V8dBP2TyZZz7l+9tgZ35DLy5zJvT4nwtw==","shasum":"0ce12d69a5e50e07ec5922cf494e2d7ccf1609ff","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.257.tgz","fileCount":632,"unpackedSize":3092071,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpgN61Umxzteh6cXygkyc1LDyZsFueLYLKBLLyEowwIAiEAyoOTdrz+p/jDuFOyg43CyRAKOqXSSsa1NB1OMi6QWNA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkULmgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo84g/+L9SRmmGZB3q7H20uyHWjBYZHxp7R52R7d94N6dvc1IULFbzs\r\nHph9GvRDu0IaehTqo3ijKwUKXSirJyd0CUttZg0tHfnqqsGy3cdnWew9lQbJ\r\nVhdfl8kyhEBWj58lw3XuOA79dGsLR3c+NIeG5GlxVxSxcHmw3QJKClsQeE3V\r\n++QjlKmSVsieaT9NTcZFKpy68cuVLcbE2BbgwVpLMqN9XYFsj6bTQksiMfBh\r\ns+qTe0XL/QArYswsksSZqs6TUsrpn1Y47ukfA2gjdtZTWu0KAt5jM4FGIINB\r\njRju1EhW7y/J/LieBb6OxOCgKcxjvL+LDeo7mudjiIsNY43RQs4eWMMJ1XV1\r\n4B47AdaYshQ5yqbnlKRIGl5jQ/PWDjvDQtloc/isE83Lr3WNGldn8Hasx/ev\r\no0yWqUfp4Xinqh8ukBQoF12lD1M5yQkPWuz1tOEC6gGTjxRYE2U3YNAxG9r2\r\n8P9bv9DD42ua/b8RdnOAPTmw7eNAkzIEnjMRwBGn5d1hKWFz2Fzfa0SjMIMZ\r\nTz9ymzxAJCcURmlvzVLj6N8SedRDshluy/wkTMe5GGfPp+lIFRg7CeirvlFq\r\nRQ6gzbt4HP0ItimE61DDs7WGwkARTNHLbp2Ne2hcd8GRhyejRO/5q2fHNKLP\r\nzH/F+jZJi5u6E4oqEqLqu2C1n5zs1BSMrM4=\r\n=vvN/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.257_1683012000481_0.5271725967287275"},"_hasShrinkwrap":false},"8.1.258":{"name":"meetup-web-components","version":"8.1.258","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"138a605368f724b26c4259d8c20b13a360a2031e","_id":"meetup-web-components@8.1.258","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JTxTWcfP0AX2N34luELPaWibI02NEd5Hg5vlHxitYnG9Y+CLM/MG10Ow9vvi7BiOrYQsmXodDAwp4AvXiIWvNg==","shasum":"42c0897111705f3876e8a9866e2f08c124d5313d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.258.tgz","fileCount":632,"unpackedSize":3092470,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFVy1Zq8vjk/l1sppf5gJnLoM6zDZi/QWSKpcdl1bYU8AiAmO7SSR3nwqHaOZL4W0z09FlZ3w3GktQEWYMoJLrM7hQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkVM7IACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpPCQ//eCVfO89T8hFb6JIgvtVDMtO1N36S+2jnNMyBdHKMlQAM6XaM\r\n7iE6eQo6z1FgVbl3KO2hO15Nayax2pTonBZ4WXjQIbPXFsJilMslZVwWm97L\r\n2a0udeENs0EiKxUVMf/wDyc33LoDXfZacOezRU33fFJIED6TqZONM/X0fn3e\r\nbcu/SKwuDA4F9i0VxRPK8DX+mxHZcuAOIajlpNg/m3DjIeo5fhKbSd+YVx1T\r\n2USBaj7EGHgWN0yOnOgMzjqkk1YiGPmynD2wT4MFw/49x89SA1xUYAH9wvyA\r\nW4td2He2h0zOaGw5hfWtBxlZnHumNzSUzCkM2jK8LliO+ZMNZ52FLIfbco9c\r\nIwOcYsMV/bDrvG/FNeqGO7VnZdeqNjgtRW+6P6ynLsonv4QZ4x6QGuRiLu2d\r\nvU/6erfyCGKrnpjpHRXDv84TIECrhZtbfHUJegftfhCNHjN+P8BGRFhSMyVf\r\nUnBJ+B/wxjfiuDUX1/nH8oXMriHeANTHCaQGaiOlnyjz2f9pa0G4vBURLu5i\r\n8D5JXnZDZXBRj0DYymPyfwPzP/UN53n0fomo0OnFZCajC8fdf7iszAzjRvAl\r\n2JcMWUKLKCaU7xLfpxvGDT++GqV6j+xWvWEo/GwwBBWDpEgPVEkhQwwUJD+P\r\nBVZbueNiGE9qHeaodu/pIOrh2lbmu7A3wis=\r\n=frKS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.258_1683279560601_0.05570646683532643"},"_hasShrinkwrap":false},"8.1.259-beta":{"name":"meetup-web-components","version":"8.1.259-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4b89906e69b8793c484e4b0d63713e6b1e1ca05b","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.259-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ydzPrC45RmMkyX8KYnUkdVESBpkJNiZCEflrvEm4Pr4gFR3+5qMpBeq3CB4pe1A14i3UhoATfDZ0IO7XdaT7mQ==","shasum":"80f31b9f4dfa94e7934b69b35f373fbbe784b65c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.259-beta.tgz","fileCount":632,"unpackedSize":3094183,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC5zlXatkNLbhcpagQY57KnxMvLhx9O9IjXArH9hVITuAiBCqFhYFVs+d2yfNFg7OkGsR0W3776GCsU5L7X/WsBmFQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.259-beta_1683897642432_0.7330945086982337"},"_hasShrinkwrap":false},"8.1.260-beta":{"name":"meetup-web-components","version":"8.1.260-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0133149a6aef765b3e1dd26d5fa6cb5018f59c57","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.260-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-BCd7y5MpQIBdCOYZZQZBimnXAUot4u9sni+F4MGUKmy+kbsUoKJcHv/LVz6x+yRjex8d35aDoJcwNWJDJRevpQ==","shasum":"5df8f7279350790453ea936cb41b147d64486dcb","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.260-beta.tgz","fileCount":632,"unpackedSize":3094225,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICiCn7wE5+/uo+PiN/I93bXcDy6N7jOfoIAY8sodSfuSAiEAiRf+jKQ+OOj5V6s90rHfJBVm03ebW2shhmh2fqDX3EQ="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.260-beta_1683897898041_0.6263566042043542"},"_hasShrinkwrap":false},"8.1.261":{"name":"meetup-web-components","version":"8.1.261","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"aef15ea08cd2b242f4a6ff6623311bbb6d8f890f","_id":"meetup-web-components@8.1.261","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dGbNdgGiskbm1M44e7J0VkUR5i4lvMKcCLMTInxOz0T95MXJGnGbVBJAubgTIUQUux4yEGoooWkJuCj6Dia5DA==","shasum":"8178d6b285dee9afa2f7615fe04fadc9524d1679","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.261.tgz","fileCount":632,"unpackedSize":3094220,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnYY5rsdlW98gALkteBAfzw06QeGcBDgMy8YOtfBztgwIhAPLgWwHUyqwSh238QpYxpn8y5C0W8xDcSRREkCwvvkTA"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.261_1684141394873_0.6724127743481341"},"_hasShrinkwrap":false},"8.1.263-beta":{"name":"meetup-web-components","version":"8.1.263-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6a0bd81293b19452cd3486c70a5389e8b8ca38ff","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.263-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-6T0/DzVPNS40u6vlpb20ecl1lOvgAOP1s9if3y7PtDjDaWcOK7kkAu8mOeG8RP/jAWt/V0GHfn3IvyXR9L1dpA==","shasum":"d7fdecde49971a24d218a6656cd4976794dcdec7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.263-beta.tgz","fileCount":632,"unpackedSize":3094235,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPMhIIRwMk/vVI78N18EZq/IeavAUbTA9oybbpks++hwIhAIrCbgxi/wruHpTmtF2UDJrO4OY2OYkPiETg1gFoD716"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.263-beta_1687266042846_0.40528195702983827"},"_hasShrinkwrap":false},"8.1.264":{"name":"meetup-web-components","version":"8.1.264","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"911bc14e23d1e8b2bf6b20dd2edde715b734df80","_id":"meetup-web-components@8.1.264","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-n43eIfSFosFrSsQdwPGny3FhX24PrFyN7tGITHtgQnxZabJl/Nw4wm42SXAtQVVsf7t5kJoZhh17VBRcqZAdlw==","shasum":"80aba8fbf9be179ff784983a2d8939590029b991","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.264.tgz","fileCount":632,"unpackedSize":3094230,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDC0/fqaUcgbb+lA5qyV2ti9Qbl/i2iKbQJJKtYs75nQIhAIRitK21D81Yy0BwpACMXoJplb9DSn1QaUcy7rJMHslR"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.264_1687277728591_0.33641528928917386"},"_hasShrinkwrap":false},"8.1.266-beta":{"name":"meetup-web-components","version":"8.1.266-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1300527129fabda0b824ead8978785479da21158","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.266-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-AfI44VzB9JMPp9r2MKaBzyd0ftE1DEG2qWeBoKdAvfAt9G9dbuZ2y+J6+o9nq0tID8tDIiKhOwNqQe5zo1J6uw==","shasum":"0c34b90b85093f30f4262686a3bd66787a01a966","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.266-beta.tgz","fileCount":632,"unpackedSize":3094443,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgWTW6pJ+DfwnE3vHH2zC2u4Bkjl7MpTy8C7xQlCKb5gIhAMB+mYs6HFT43npz/CgiikdrFseDU7VhMnegvYeA4ZQa"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.266-beta_1687348543152_0.467884089030864"},"_hasShrinkwrap":false},"8.1.267":{"name":"meetup-web-components","version":"8.1.267","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"f9fe5d0eef970b7f1df0ef86cf60d8515f86fac1","_id":"meetup-web-components@8.1.267","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-iEGo4/WxDb9LNg+5FTq7S0f/J0VZevPwCc9m7NJA72yYlsz+izlNtnQmE9cOKjIKR/2JpNgwNqNAt82+/XN45g==","shasum":"85ab734e257d89a3ec8e11a00487e866a2de2bf7","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.267.tgz","fileCount":632,"unpackedSize":3094438,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHfcaLA8nWfezJad23Z1juf/+nub1FWkE4nwz6zxPAWDAiEAz7kN2JMKrTAGKkcwcv3ylPJhNCuTqd0bD7MmvEVIjAg="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.267_1687354271729_0.6115207566261536"},"_hasShrinkwrap":false},"8.1.269-beta":{"name":"meetup-web-components","version":"8.1.269-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"15042732b8a1b5f0f33903d8262d0fea4cf3c844","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.269-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-+55kmJNEQzPgN17FoecZMuEluZTLJpX2671KtkjtklMmzDnipT1aVLnCTItjR3M61NwAIso+6OfTHq54K3dBmA==","shasum":"55896a0f61bed4c04c9c4bda313d266bef2694bf","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.269-beta.tgz","fileCount":632,"unpackedSize":3094439,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUx9IT07SOTpyzJUnohVsRdYxFOhwnuhJjMYx8cw+L2gIhAIcC0ZtQj4gBpwbXYbZEitaloztau7gXbIv77oI+a8jH"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.269-beta_1687437848553_0.07124767865794412"},"_hasShrinkwrap":false},"8.1.270":{"name":"meetup-web-components","version":"8.1.270","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"30dd3951a9012ee77cf28023f95e324630cbbb18","_id":"meetup-web-components@8.1.270","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-z9YUE9aq4Iv71ZpKGSeBnY2S3e/meHGriU/7LPLW7/hVL4nxk0k+utpBy/gCIVK0TomIOSzVG78IpDNZmGGP8Q==","shasum":"9f9766fbb1a634eddff153713d212760a72d0e9b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.270.tgz","fileCount":632,"unpackedSize":3094434,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX9YnkNGpTP3sSuwXbEkJHZ5Cg/bwKIGJalGz9bonyvQIhANgXZ5gigFgw+Ae/VUzQ4gEypThL2izLV5Wk6Nx3zn7Y"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.270_1687438832739_0.4795870031557141"},"_hasShrinkwrap":false},"8.1.272-beta":{"name":"meetup-web-components","version":"8.1.272-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a602da0295fba753e7952b4a022b8076205f4ab8","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.272-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sczN0oCE3xVrf4JPc9M2Y3B2fUPJ0qZpDFlQx+R4gW85NO/1XGuVyMEGTpK0esuoicLidcsruoCZHyHM+69qEw==","shasum":"2b97b14348bdf7ca8c40de9ebba31a4ea0488d9a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.272-beta.tgz","fileCount":632,"unpackedSize":3094406,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2+FzyHZRaP3a+wbkBPIA2Nxnqiu+EJ8pD93/e7ShEgAiEAvBOcWdyURAdtx1VqJ174YhsrMiTmWoVj2wIWjn37bkY="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.272-beta_1691610870552_0.604199907321195"},"_hasShrinkwrap":false},"8.1.274-beta":{"name":"meetup-web-components","version":"8.1.274-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fb0eba331462da0e262569e36fe657c446dc8a63","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.274-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-R8d9dpFMPN06O3kpb/Dg0odXEjpxI8mhSoI1Yow5ydQuUVQ65vOwiX4VzAbXcPkrNcrhXcobajwU3PehA3fNjQ==","shasum":"9cea6bd9df8826f670b72ea6a543717c1e3ac6fa","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.274-beta.tgz","fileCount":632,"unpackedSize":3095415,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGSFxc2+nDXMkIz8XpPMRzcycjnxY7XVQPK/WP1FyUBtAiARuNCf8bgsOB5z2Vt6u5SUt9NCP7fGo3Lvn8dxcA+OEw=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.274-beta_1691669322276_0.5829651868477415"},"_hasShrinkwrap":false},"8.1.277-beta":{"name":"meetup-web-components","version":"8.1.277-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a215f5dd61ba453ccadaf91436a5d9f4c37cced6","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.277-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-WVlK6bEOGmha+qend8rmS6UPAptWhnA+QU4oK8G+TI+VYhYxlyG2nR2CYHnH4Q9iOmaJZfq8DzabEIF8ohk8TQ==","shasum":"3cdbe8c853b0a0c28434188bff4f755b0a13c027","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.277-beta.tgz","fileCount":636,"unpackedSize":3117456,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyd63h/yTBaJ1uHalRykNcHNoRBrl9Q50/Yv3+fixyEAiEAm315kGXCMrLySPfxVFMA9R/auITYQhfqcZSgnhY9OVM="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.277-beta_1695635629665_0.9286794980066564"},"_hasShrinkwrap":false},"8.1.279-beta":{"name":"meetup-web-components","version":"8.1.279-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7280b91f3e80540d34c7ce88cdd7d2df551ce840","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.279-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-tnzDlpjz7pLMxxzcrsF/OsIUoGHU635qwppE0CtnnLhEOgZHP3TCEfq9cAJuFjindwrOnllQ++NEvi9OEJo4mg==","shasum":"8a94150ecac58bc811fec4021fd97a9735b28352","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.279-beta.tgz","fileCount":636,"unpackedSize":3120643,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBLhcpqGWr+NG0bLBv6i0opcg4urBSnL9CiGcRSV+ABIAiEA3REk2A8Izui31ptqWGEcj9O9SFAghbmwro5OHwZlih8="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.279-beta_1695641660414_0.880730537943297"},"_hasShrinkwrap":false},"8.1.280-beta":{"name":"meetup-web-components","version":"8.1.280-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"46a5f4f6c0c64dafa54eac2c8f5fc141c88e8d6c","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.280-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sIT/6lEhNC6kcv1hctC2IWaBZy4KU0VWAb0xFHL60KHxMyrNfFKNIvkJPxXw2TIRhPatipxXRe2f04XvFjss8w==","shasum":"7eb7db5a96616a764a78bec4771784dc9f8fe3a4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.280-beta.tgz","fileCount":636,"unpackedSize":3120643,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFo/Exr6JsYm5czSwxvrb9Oi3IByDWkVyMwzANbCa1i7AiByyOVfh8kqYm3jUsMPIykSG1Hy8u8n+Yo3KmSP/vLllQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.280-beta_1695642245406_0.7157384082499048"},"_hasShrinkwrap":false},"8.1.281":{"name":"meetup-web-components","version":"8.1.281","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"3b8dd81b73cfb77575dad8e8e3573e8900b9686f","_id":"meetup-web-components@8.1.281","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Tq43epGO+Y1MP6QSYrRHFTs1zxNi39JF9Sm2o9DH1FPkGy+7XEGl4GzjnwfQuiAJh1Z0WmutOihWbaXHbdStMw==","shasum":"9c9457bca802b23aba9eaea94e2e4981f249fc56","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.281.tgz","fileCount":636,"unpackedSize":3120638,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAetHCaLNo86nkKZl/uQe3V9Lt7d3HwBZ4ldyL5B0uKZAiBKR32IGnBmXUvnmBUnMEpkGv0JxgMn9hm6LrddYWOO2w=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.281_1695645639326_0.4311554277278413"},"_hasShrinkwrap":false},"8.1.283-beta":{"name":"meetup-web-components","version":"8.1.283-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"e2a88ab59b7b158d0218e55e4126938fb9b9dcfb","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.283-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ko0bLJpRyDdhEITheLyc4bLGOzIdDqjp+/XJZIMNW8h8C/pNc6el5jOV/3UWRxyTcopU6XG5SHJyNZ0nCwKGYg==","shasum":"d3f29c91286fded170dc9adb27271367039bb122","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.283-beta.tgz","fileCount":636,"unpackedSize":3122102,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAEq0HiZ04NpyP2gsyJ8DZDjJFVUDtIYBOyeV6Pwe3agIgW+sflDeCZBCadRAAyDMiCH2hYbfjMtmDP8c5DcJ9i90="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.283-beta_1696512684394_0.017019128428921393"},"_hasShrinkwrap":false},"8.1.284":{"name":"meetup-web-components","version":"8.1.284","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1050f1963cc1d05f985c2a559acd0b19d048aee5","_id":"meetup-web-components@8.1.284","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-z3YEfZC8Y3Irj5HaQspHNrRAeLohvHbkp+TAaeQTJ/nRk6EpZKiINSg4G1yTsqiLkL+7lyhBwLrtE7rH/kimQA==","shasum":"f5414f9a6c23cc1180948670cec74e69cce36bb8","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.284.tgz","fileCount":636,"unpackedSize":3122097,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwBqSxNSVszuVYdhwzJhnEXHyQecN5hZIBG5H7Zk57+wIgLWVDZa3G0VkuwPxWCT2Nv2NaAn77S/mkb9RYnd3py9M="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.284_1696513547814_0.2573197209824536"},"_hasShrinkwrap":false},"8.1.285-beta":{"name":"meetup-web-components","version":"8.1.285-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4f477cc2e2656836dc4b6fcd4cde48b8e75074ae","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.285-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Xqj6w31Xaz+lTUt9Zy4w9AnkN9WKhJLKInDOMFwURm9vTuJ61/+TPqY95DL1l1Myzn/T8boYQ60zrArgbQU1HQ==","shasum":"d88422bee02e5b127d26198d4511decd5a6e47c2","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.285-beta.tgz","fileCount":636,"unpackedSize":3122623,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH26OKx+uSnPUIIuxZ6toB6gw5d12/cTL+gnd0hvRDZ7AiEAnM2wia9m+0VXTYesDSWoMOFAyHuE2mRxvpCBiUmpGqM="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.285-beta_1696581952237_0.04581825581653032"},"_hasShrinkwrap":false},"8.1.286-beta":{"name":"meetup-web-components","version":"8.1.286-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b43c6ce88c637dc92c14e148d3bbd56f64d39f6a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.286-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-KJd3hbbMvRR8SDv176JCTB+k6ja/plEXsO3m5geGwIAAZZlwpdXogjaM9sGnlSdSdN9J6qnRqbHQwVnSa4+duQ==","shasum":"ab494053508b7d81cc9cd4f9195562ccf2409ad9","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.286-beta.tgz","fileCount":636,"unpackedSize":3122203,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQBGaLFsFZsTZVPjecw281yd86yGaue59h1yZPV5NI4AiEAkO0PGzxjn8kmB9MtnMkwzFqUGQacblTT46KjH+XGc0c="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.286-beta_1696590703023_0.6160519963517486"},"_hasShrinkwrap":false},"8.1.287-beta":{"name":"meetup-web-components","version":"8.1.287-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5e35c9b9a631ba8b9b5dae68d325a4fa6b729f87","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.287-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-VRfhBR0AbcuKNOywL63+AcGbC+Luei+kOahNsOKyvgw6fW9mT2Ta2MsNGWMy+0IEKzjSp5IPy9IXLvS6CnGyyg==","shasum":"774f9c58899c7cedd63d06dbca75dbf8d00e6670","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.287-beta.tgz","fileCount":636,"unpackedSize":3122353,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAqMbQ2e9RfusEkdNVdDdrJgxIcvzmvGYVF8q7wGHidjAiAgb+heYMojx+rFv9g+mrip/5tmRxUxZ38edrr0XyK61Q=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.287-beta_1696591489060_0.12545435763790924"},"_hasShrinkwrap":false},"8.1.288-beta":{"name":"meetup-web-components","version":"8.1.288-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"fd8326b074d889a0afe85377a35e0184afb3362d","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.288-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-MFKuNei0W6zLPqJdKtjAT7QWbE0ELgkTsCye9ez7g1FvLg1azBxmzQi/cmTkxDB5rJCqn1V8n5ykQmipL3fu/Q==","shasum":"3d69aaa2114a489d187afe8b65319788e0b7e40c","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.288-beta.tgz","fileCount":636,"unpackedSize":3122348,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfm2R/pqPkqNHnNUgZubGIKfCbC3hzf2VSrxrjmw+XfAiArICwqSNs5R2un51h2G9LjKkHZLrRv8240sFywkjgDDg=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.288-beta_1696591754282_0.8499765436162765"},"_hasShrinkwrap":false},"8.1.289":{"name":"meetup-web-components","version":"8.1.289","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"eb97878e3e14034094f786f34da3b5b65977d6c4","_id":"meetup-web-components@8.1.289","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-4JxhzzeMJOJ+/NcKyFBFxOxua5UHbX00Itngu8pOcRkUDYdI6BVZ+wCg5nphT/E/OC8sSo9J/La9fh6TIeZU5A==","shasum":"ff30c796828ee0d2a669ef01044a69ad7cebb180","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.289.tgz","fileCount":636,"unpackedSize":3122343,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCs9lzKK+Vp32f4F8iDtxgzXbnYxuYLpJupPzqAJV/KoQIgSuu66le2ad6lr/VCdMTAy3krwsB1et8PVgdc/8iYr5I="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.289_1696591935280_0.07292904073409257"},"_hasShrinkwrap":false},"8.1.291-beta":{"name":"meetup-web-components","version":"8.1.291-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"38a0f8ba04a745b6af802f3d14932910211d8b2d","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.291-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-C09TamsZeTarS1LBpezHu1OLAm4aDfRgR71PBQ5WWd+NndESd9sBJXNKEGhg6XMj6yLYGDCiioPeMVwxB1HHfw==","shasum":"f23880f14a1fd92d62c6363c60f784eecfa16fc4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.291-beta.tgz","fileCount":636,"unpackedSize":3122459,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAp0Vi/ESSyckyIBdW+RX8qk276/a9lp+eWTvdZ1zhtBAiEAs9eGs/N2mc9u9wuCtPSv6kGX5oqaYNPlvcrnXwMTy2A="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.291-beta_1696948141096_0.8862355305375649"},"_hasShrinkwrap":false},"8.1.292-beta":{"name":"meetup-web-components","version":"8.1.292-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"5ae1c782dd3c73b25e1d282800668860b4372a6f","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.292-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-IC9UvlFxK6TPND/KIiZbkrsK6CJksZ1OwEAg6XiPYPm91Y/UIB8SKkdNGqwpFppFJmlV/ocs2kvMk9tiQdl4oA==","shasum":"a331015ee0cc0eadd03ce936bd25d10e60fc4114","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.292-beta.tgz","fileCount":636,"unpackedSize":3122556,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHj5yEgn0RYZz/b20bxWtV7DUubn/Y1NnZ6DEd2zexewIhAJPVrzv/fv7sGHGQjYklT7HVkfP1LoT/YOW/7brnA3D/"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.292-beta_1696948532707_0.7751842638201085"},"_hasShrinkwrap":false},"8.1.293-beta":{"name":"meetup-web-components","version":"8.1.293-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b54cfdc2f8a84adf9a42f7cbf4285f19fc9d476f","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.293-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-y7tUYwsxaqRCitJn1jhdwsrilSt+f9YcNCB5Ihgu/m6JTyMgNYbmStAblTTc4G3TuDWT/UApd7GwrR6qd2FZgQ==","shasum":"7d632333c57a772c42d70b0ce333d3c7142068c3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.293-beta.tgz","fileCount":636,"unpackedSize":3122553,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5L1GXcqqJ+aZwhF9ozxPHzYSOQ/cZjYl/5R3C6AyRaAiBfAKPQCht7srkAaK3O3ZtL8Fo5dfXlt9y9cFDO3K29gQ=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.293-beta_1696948917293_0.9657666267014293"},"_hasShrinkwrap":false},"8.1.294":{"name":"meetup-web-components","version":"8.1.294","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"62244b23a46b7a1feb29e3dce790a0e95065d3de","_id":"meetup-web-components@8.1.294","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Hg1EXRl1nAtoAvpW0ik+t31udH1Dsvj4W9/Q+l7bNvmyW6gTym9B/4X1rstfH4LUrr5QE8w9kXVf+VAv8ORluw==","shasum":"a7b5caddc1c28e744c9321f7ed31106bc042ec29","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.294.tgz","fileCount":636,"unpackedSize":3122548,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUVmJyOyZnRZg5RNkDFInwU/jdoGQ8HtwBMiFYasHnvAiEA1qrbLxays81GalVwzKTtkcrN09OJR0sWkxLmoJ0swGo="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.294_1697008370569_0.2145223751700105"},"_hasShrinkwrap":false},"8.1.295-beta":{"name":"meetup-web-components","version":"8.1.295-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1cf6a5cb1c418737d5adca500f3af732d57ebd01","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.295-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-0w5NmhYF5mSr4WPT+0pfxnnj4ws/uY3OWRAaDKJ1sm+gko1/chgrrf8/J2Jxyie6P13B5x14aIdF14JJWIEb4w==","shasum":"f4b829f3ff72dc9e18f434f8e6d2d736e519fecd","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.295-beta.tgz","fileCount":636,"unpackedSize":3122902,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCigOtFPzi4FPNgwXEmnhP+LOXwDv41w/ft6hwvF4HfAQIhAJrr3FXxknTEAjAPSVtrHruIVRxDQmfOl88vk2/Shdku"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.295-beta_1697024823759_0.4241409120752302"},"_hasShrinkwrap":false},"8.1.296":{"name":"meetup-web-components","version":"8.1.296","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b35501da53a7265796771841360eee576c14ad54","_id":"meetup-web-components@8.1.296","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ai+C0CfXo+lRAfV8CYwXo2SH4w0VouIdZE+p/NWzR1iuQMPmByHr0Qiz8zrZVn6NcTyEXOz3ljVSLYc8mHg7tQ==","shasum":"c03c9a74d46e5a725190fe5162e2a2b1b748af1a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.296.tgz","fileCount":636,"unpackedSize":3122897,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyBsh9XZsFUARXhyjExV9jUVXtI3F/P7tLxmINvnwlpwIgDCdiRSrjYv3DIBkvoRiuC1wzJD/3+EsdUpExWsZpTTM="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.296_1697027059308_0.39270152090883315"},"_hasShrinkwrap":false},"8.1.297-beta":{"name":"meetup-web-components","version":"8.1.297-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"1b90d62dad94e607f8ef0ffd217c9a92b79ea4b1","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.297-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-7CFGoZx2tpqNIT72AoFIuWJixr/V8ZwWmTUYvJ0gwjkXtague2QYX/3qecECXLvo6uubj7BiFMO+OnKH1B/Glw==","shasum":"966dea1c331430a19d7032c7b2fd2d69dd26fa98","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.297-beta.tgz","fileCount":636,"unpackedSize":3123528,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZvkZlssJzudPPPaVSBFqGaSmqsv5T6wSNXLzk6YeJCAIgRVrK6dSZnhum811e+oWhja4U6cTWsI9m5HiUiECPLNU="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.297-beta_1697808079218_0.7472605353439499"},"_hasShrinkwrap":false},"8.1.298":{"name":"meetup-web-components","version":"8.1.298","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"7977bde1a495407ad7a69c56cbaaffb6c396bdcd","_id":"meetup-web-components@8.1.298","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-i8GDytfumgS2oiTEIdmVnrqBhO/KRSW4UOpf8/XE2u9ARAylOuPfNgLSBWYPfgpsLmwB8ZSuCbcSPTE9o+HvyQ==","shasum":"3faf8d2d7d6c854152d289a6322d0b5cb61b13ac","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.298.tgz","fileCount":636,"unpackedSize":3123523,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsGCvgq19cHakWrAWKL/9mGYa4LpYjVNWE+QO+KD6ccwIgCy0kW9kp1/+iauz/Sxyitwyh5AnhK8fXknglWTYY0N0="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.298_1697808496882_0.6817694924467443"},"_hasShrinkwrap":false},"8.1.300-beta":{"name":"meetup-web-components","version":"8.1.300-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4ad717839509f6d7c06017b134d18095b9cdcb94","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.300-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-+1Tg0IvmhaORlmAXPMkWHUeVxVjPrTuuj5cogzxR7x5yr9Df71MXbOijbRMmIKSzqCrixc8omKoozOgy7kRh4g==","shasum":"6207c91727440f624c7d68564f510341b385c8b1","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.300-beta.tgz","fileCount":636,"unpackedSize":3123498,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7iNR17javP4gkdiQQoD7jZ8eScJvy8PBnoKOE9adKNgIhAJAvIC7qg8Wxk3abxjlKAAougxChm33nTKYJfDVNlXf5"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.300-beta_1698917445935_0.8736591459529719"},"_hasShrinkwrap":false},"8.1.301-beta":{"name":"meetup-web-components","version":"8.1.301-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"a8ef54d54f1c334f70e1acec258c46abc2d6c64b","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.301-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-k3TXH38WF2kwvytWbz4mGZx4nAXcPkggbTiOY4W4VLnqKzPY8LxUkGI5u0uLOnyqh0vc16Em261PRhnJA3JttQ==","shasum":"0f9019f7a7321516a7a06bc9290f926acbe35c25","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.301-beta.tgz","fileCount":636,"unpackedSize":3124012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFiZ0cmk1Sf78HF4xW8BX7xlSYVTXGlUghmkJgtvd6iIAiEA6zGKFmLKRpTPIaxL90ZRxGt4yzye2l55MK6z7/SaS24="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.301-beta_1698921302480_0.1393837859732554"},"_hasShrinkwrap":false},"8.1.302-beta":{"name":"meetup-web-components","version":"8.1.302-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"cc40ed9b3286a959e186a7c4b1d93587ab395cdc","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.302-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-kol0xNArln6I6WZbCootw4d76PxqF0q7M0qtUdRYk593+o21ZqFVLKLD8DDh1Wf+yIyds73s4tHjASJHrUrYaQ==","shasum":"7392c7f9a0aa6ea177d1cef926e16ab220054ee4","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.302-beta.tgz","fileCount":636,"unpackedSize":3124117,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQuUrH8qNNtzMuMqsa4QOd4uke4crD7WrGqap9nxTZpAIgYgdbiQ9LTVOzinelWyv3h2XFrCsyat2oXl+gwaoYKqA="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.302-beta_1698921438417_0.30784194222378547"},"_hasShrinkwrap":false},"8.1.303":{"name":"meetup-web-components","version":"8.1.303","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"b42e75345c61b32b4e99c09517cfdcc648e7ea82","_id":"meetup-web-components@8.1.303","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-TlJ88AwgxePftjkMZi3ic/NxiSomCZf7jI442Pm/XjghOI1NKr+E0tBBn3KEfZUrUnFtzvqJs7bcCnDSaiN7nA==","shasum":"c4c9c3ec3039ba682c94809aeea74c98691e3552","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.303.tgz","fileCount":636,"unpackedSize":3124112,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnKjeMVOZmhjN51ng93dI8wOOAxk6HY8Q2P5/V+2JfrAiEAnpsCfSp8BzEfwHI6sjTQEfvzDvFc1G8cTF/QsgXiGKY="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.303_1698921567654_0.33289853888399135"},"_hasShrinkwrap":false},"8.1.305-beta":{"name":"meetup-web-components","version":"8.1.305-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"11d3bb2d52869d2b8d8590adfa4d0e2198ba9b32","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.305-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-07MeZWcHAF2o0fjIcluacwoULV/ICbzzsxqBKHryHJwLM9VqUbXvC2cqfvANQCGyUIF/WL81wmE0Bk0GzurCYQ==","shasum":"545f9e840fc5f3f8ffa881ed23d70c84b5bd127b","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.305-beta.tgz","fileCount":637,"unpackedSize":3131430,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtIbu8Cvuddt66y693hh4k7x4mme+pnbdjuQPDMkLESQIgfhWXxis2RnEojv01h1KreyNrhztIPwiUs3wqtBWGbNY="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.305-beta_1703089416776_0.8749157768904381"},"_hasShrinkwrap":false},"8.1.307-beta":{"name":"meetup-web-components","version":"8.1.307-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"4be5888da27551dcb3dc65df1622a5a285cdb5ec","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.307-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-phueZVlp+zxp6QqGk5Qw8UvuRxl6PxZnANZCeaG1ccWcNq5v1wQECZ0lOuXBOkbBzlnx02APy1WTifXcESVIXA==","shasum":"ea696b5a50fe1e3f4721c0bb6e0334de00425640","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.307-beta.tgz","fileCount":637,"unpackedSize":3136931,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB3o9dg9a3uNC7O+mcudiEcj1Zd3v9LxR/tDML7p85F/AiEA/pkxUKNN/ad1ftimyHXdwAFu3tRn1IHtXfPmb7cgz1Q="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.307-beta_1703107723004_0.7878153078908658"},"_hasShrinkwrap":false},"8.1.308":{"name":"meetup-web-components","version":"8.1.308","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"787ce046a4c0809860c97b77f404a271b08df861","_id":"meetup-web-components@8.1.308","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-To4Qmx3I96B4fqgsZTtWWgo1jNXePkrokPM9WV1iPY9110qUa+p9jW+ksv0+bHEXZwyG0x6PI+pGNTRDefWEXg==","shasum":"f9126e7ee5d7040d9296233eaa8df46fe4f51a26","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.308.tgz","fileCount":637,"unpackedSize":3136926,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFk2wu4TZa0Uergg0o/DIBNwfTQzz8+FAlnWuckoxZIWAiAhhxMQBqK3GW3GZ4wXNR6GaPWfpXYPxVvVPvxESYOtMw=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.308_1703156016431_0.9312939984436257"},"_hasShrinkwrap":false},"8.1.309-beta":{"name":"meetup-web-components","version":"8.1.309-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ea901c220493d6c34527a62cea661e53c5cc5416","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.309-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Pr7N2Ss/JMLsCoq9dm1oX3xeQXA9cNaMMjizwYazpf9vzhImww43EMaLc5A9Qm74OitfwVgNGEd/f9o32r43/Q==","shasum":"5358a2c8790fc3b6a0a7d9714a140b8731a20518","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.309-beta.tgz","fileCount":637,"unpackedSize":3137597,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDJd/eOssigtbQgAERsgqJ2C6xBPnNrAHcaMK8vMwsFAiEAs1irJFagIkr7i+VPjQvtGizilJu/V8n13twBRi8RMWo="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.309-beta_1704482372795_0.4128785620776425"},"_hasShrinkwrap":false},"8.1.310-beta":{"name":"meetup-web-components","version":"8.1.310-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"58dcfc7a8d47a5e8d72dd89f824963710b5d4923","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.310-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-jEjhn4ec4c4sFinqAdhDQ74nIEO3RADmmat45QDcN596CjYaGqJohjkyPYGWVdNVE7gElwl5lIK47eol6KHtnA==","shasum":"5eafcdb33c76eafb5fbc2cc1789d5dc823578515","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.310-beta.tgz","fileCount":637,"unpackedSize":3137743,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrKkkuCsvZOTh+Q8YtRAM+YDyGMb1zaUdBQHQk6ZBSYwIgbZZRkMuwDiJpsE4bLABnCMRy35bsrTKxrQpF2wBRFR0="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.310-beta_1704483533896_0.4029861494432405"},"_hasShrinkwrap":false},"8.1.311-beta":{"name":"meetup-web-components","version":"8.1.311-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6568cf5702d3bddb903503715550fe0d2f5a014e","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.311-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-u5njoM8UaWgXmj3gR36eo1Nf1Ogw38/omf2tm9FFgko2pn4WvdWZV6XbbB0QEg8rJZt2A1aGiIIEKSuyiWjIIA==","shasum":"468c1b29f0c03f4dfde74241b83ed487a23d5a42","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.311-beta.tgz","fileCount":637,"unpackedSize":3142435,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbPp34h9ZO63WBZqhpJdAvHYjX4FutAwEr/VW8zeSIxAIgU0Q2uf5nnyzbj7DKaUkXkrL7yE5UXnvy9pfOMrG6eWk="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.311-beta_1706274474982_0.3943062032485867"},"_hasShrinkwrap":false},"8.1.312-beta":{"name":"meetup-web-components","version":"8.1.312-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"05aa18ebd5f476396623e2472bb98aab2778368a","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.312-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-xFnPPNEkhKWmtgSVQ6pm8mlN1UD0xYF4NaFrBWIPtu4dQ9fxDHfJXKBjEF/ZoyH0YBiBlkZ+w0DXeXb8XXiJrg==","shasum":"939616361073fc116e5087d135a4ac8188240e06","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.312-beta.tgz","fileCount":637,"unpackedSize":3142369,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHiVXtDeTfkjrSyeO6mMBh61zDZJoXK7JQ2v8ojK17bDAiAx8ey3Cog7AlZWawYSkQP8bV0ylZhWV44xSeln89iKjg=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.312-beta_1706274836630_0.779030587352844"},"_hasShrinkwrap":false},"8.1.313-beta":{"name":"meetup-web-components","version":"8.1.313-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"6ef8ad773405f208619c2bf7fed3979d6571044f","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.313-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-zAmbp5pSkYvI1qenl8UPtVJC8weKQon78klQufXzu88jJm+T6iGdu76dl7SjhBeSmaRUjuCSg8qzNgAyPaeVKg==","shasum":"71a8b3150719c280fba2a8265eb3fe95f18fe1e3","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.313-beta.tgz","fileCount":637,"unpackedSize":3143096,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICMeoXvExgpbLE7dMMNoZrtMiCfFvJRWH6PMBfI7eV9OAiBUNfKSYcFuuaXDP7GrKmORJuwy8BptZGH+TFZ5FqY1aw=="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.313-beta_1706275759468_0.6094872856919666"},"_hasShrinkwrap":false},"8.1.314-beta":{"name":"meetup-web-components","version":"8.1.314-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0f2dc1c0feda14b75115921d72fb18a7fd89d426","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.314-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-jv/TPpvO8GDghwEcwk4PFYp7ywWtYlADqj5Y77pUGIrSjXgEfH3b4EOiI8/WVuUOw0aSKwHiHG2j8COq/sI/Yg==","shasum":"c707ed807d3dd44d29adc6f216e67ff460c6315a","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.314-beta.tgz","fileCount":637,"unpackedSize":3143839,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA0b9ky7BXZNUmlSSZkW+2r2tcDWPrBgLM2LWCzwoh0AIgERSydZHtTinUpVgOmXwY8yqAj348Y+o0IjUiYjOoL+M="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.314-beta_1706532949727_0.0850497578515923"},"_hasShrinkwrap":false},"8.1.315-beta":{"name":"meetup-web-components","version":"8.1.315-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"0fd0def1e82248c6f2b20853d2505bdfdd3b444e","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.315-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-PJg4qaPPnbcMtv+TWlxGbLzltVjYMUFBsKwl5KGd0iJhDc1mnF0olPQUprqzjkP39hgKcWtpBN2s/mTxzjwjRA==","shasum":"dc1b505657cf00584e00eae1bef0559c6fe13521","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.315-beta.tgz","fileCount":637,"unpackedSize":3143436,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEl0wPWMNy1tXgD6w181BNniO14sy9cgfozSmfrlVRdaAiEAydBM8DpsmQvzsalIBOL4uOxkSh4H5qQ17tdlLeF7HAI="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.315-beta_1706533226571_0.011227374300135429"},"_hasShrinkwrap":false},"8.1.316-beta":{"name":"meetup-web-components","version":"8.1.316-beta","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"bbcc7e2bafcbb549bec41d28c7fa3b7659f58edb","readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","readmeFilename":"README.md","_id":"meetup-web-components@8.1.316-beta","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-TX6bs81TVHrv0KyC+Fkj6BJMiIK3C8bqNWX8W2TB5weyI/ZrzNt90FeMnRAnlEcFic6xl2D8j5b0k9yNBF4UpQ==","shasum":"f9b0d2038a361c8731d70f77be0d992b393df93d","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.316-beta.tgz","fileCount":637,"unpackedSize":3142795,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrviIBTs9w0x0fHfCzelZtZBq6cSADKHMEDmaiA6W1JwIhAILHB2lGG8NAZ4IqunVBWeIwplSp/2nlmYGbGZoi5qQX"}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.316-beta_1706533438148_0.335730685860236"},"_hasShrinkwrap":false},"8.1.317":{"name":"meetup-web-components","version":"8.1.317","license":"UNLICENSED","description":"Meetup Web UI Component Library","author":{"name":"Meetup"},"engines":{"node":">=10.24.1","yarn":"^1.9.4"},"scripts":{"build":"babel src --out-dir lib --ignore test.js,test.jsx,story.jsx --source-maps && yarn run build:css","build:css":"node-sass --importer ./util/sassRelativeImporter.js --include-path scss ./assets/scss/main.scss ./assets/css/main.css","build:watch":"yarn build --watch","lint":"yarn run lint:base --fix","lint:base":"eslint src/ --ext .js,.jsx","lint:airbnb":"eslint --ext .js,.jsx -c .eslintrc.airbnb.js","lint:prettier":"prettier -l {src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}","modules:clean":"rm -rf node_modules","postcheckout":"yarn install","postmerge":"yarn install","precommit":"lint-staged && yarn flow","prepush":"yarn build:css","storybook":"start-storybook -p 9001 -c .storybook","storybook-static":"build-storybook -c .storybook -o .storybook-out","gh-pages":"gh-pages -d .storybook-out -b gh-pages","publish-docs":"yarn run storybook-static && yarn run gh-pages","stylelint":"stylelint assets/scss/**/*.scss --syntax scss","test":"npm-run-all --parallel lint:base","test:ci":"yarn lint:base && yarn test:base","test:base":"jest --color --config jest.config.json","test:unit":"yarn run test:base","test:updateSnap":"yarn test:base --updateSnapshot","test:watch":"yarn run test:base --watch --verbose","typecheck":"flow && flow stop","build:tailwind":"npx tailwindcss-cli@latest -i ./assets/css/tailwind.css -o ./assets/css/tailwind.min.css -c ./tailwind.config.js"},"repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"homepage":"https://github.com/meetup/meetup-web-components#readme","peerDependencies":{"@js-joda/core":"1.12.0","classnames":"^2.2.6","js-joda":"^1.9.2","react":"^16.8.0","react-dom":"^16.8.0","swarm-animation":"^0.0.95","swarm-icons":"^3.8.354","swarm-sasstools":"^5.0.434"},"dependencies":{"@meetup/swarm-components":"0.13.19","@meetup/swarm-icons":"0.6.0","downshift":"1.31.12","focus-trap-react":"3.1.2","raf-schd":"2.1.0","react-flatpickr":"3.6.4","react-portal":"4.1.2","recompose":"0.26.0"},"devDependencies":{"@alrra/travis-scripts":"3.0.1","@js-joda/core":"1.12.0","@meetup/swarm-styles":"0.5.13","@storybook/addon-actions":"4.0.0-alpha.14","@storybook/addon-info":"4.0.0-alpha.14","@storybook/addon-knobs":"4.0.0-alpha.14","@storybook/addon-links":"4.0.0-alpha.14","@storybook/addon-notes":"4.0.0-alpha.14","@storybook/addon-options":"4.0.0-alpha.14","@storybook/addons":"4.0.0-alpha.14","@storybook/react":"4.0.0-alpha.14","babel-cli":"6.24.1","babel-core":"6.26.3","babel-eslint":"8.2.3","babel-jest":"23.4.2","babel-loader":"7.1.4","babel-plugin-react-docgen":"2.0.0-rc.1","babel-plugin-react-intl":"2.3.1","babel-plugin-react-transform":"2.0.2","babel-plugin-transform-class-properties":"6.24.1","babel-plugin-transform-flow-strip-types":"6.22.0","babel-preset-env":"1.6.0","babel-preset-es2015":"6.24.1","babel-preset-flow":"6.23.0","babel-preset-react":"6.24.1","babel-preset-stage-2":"6.24.1","babel-register":"6.24.1","classnames":"2.2.5","css-loader":"0.28.4","enzyme":"3.9.0","enzyme-adapter-react-16":"1.11.2","enzyme-to-json":"3.3.4","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"3.3.0","eslint-import-resolver-webpack":"0.10.1","eslint-loader":"2.1.2","eslint-plugin-flowtype":"3.2.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-meetup":"1.0.0","eslint-plugin-react":"7.11.0","file-loader":"1.1.11","flow-bin":"0.76.0","flow-typed":"2.5.1","gh-pages":"1.0.0","husky":"0.14.3","inquirer":"3.2.0","jest":"23.5.0","js-joda":"1.9.2","lint-staged":"7.2.0","meetup-web-mocks":"1.0.270","mwp-app-render":"22.4.3075","mwp-config":"22.4.3075","mwp-i18n":"22.4.3075","node-sass":"4.10.0","npm-run-all":"4.0.2","prettier":"1.13.5","prop-types":"15.6.0","raf":"3.4.0","raw-loader":"0.5.1","react":"16.8.6","react-dom":"16.8.6","react-helmet":"5.2.0","react-intl":"2.4.0","react-redux":"5.0.7","react-router":"4.3.1","react-router-dom":"4.2.2","react-transition-group":"2.2.1","redux":"4.0.0","redux-form":"7.4.2","sass-loader":"6.0.6","storybook-addon-i18n-tools":"1.0.0","storybook-react-router":"1.0.1","style-loader":"0.18.2","stylelint-config-prettier":"3.3.0","swarm-animation":"0.0.95","swarm-constants":"2.2.122","swarm-icons":"3.8.349","swarm-sasstools":"5.0.434","webpack":"4.14.0"},"lint-staged":{"{src,src/**,src/**/**,assets/,assets/**}/*.{js,jsx,scss}":["prettier --write","git add"],"assets/scss/**/*.scss":["stylelint --syntax scss --fix","git add"],"**/*.{js,jsx}":["eslint","git add"]},"gitHead":"ace75db7052c2210978f632106cd06b7b0183c06","_id":"meetup-web-components@8.1.317","_nodeVersion":"10.24.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-rgKN6z/kYxyp+w1bB2sVKSNkvuwHwUen9BF2Wjcesv6jT3p9q4ovqwpvO58GHQ3y4uwccoPjuaUZybtmdALOnQ==","shasum":"5707afdec19aff7a717a8011e3a52e3c7a68e831","tarball":"https://registry.npmjs.org/meetup-web-components/-/meetup-web-components-8.1.317.tgz","fileCount":637,"unpackedSize":3142790,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDV6GhDoJtjNeXTGnj5kdghtQsoiexWTJOG1qvxLgTyZQIgAhq1+DG3+0o0cMkIbRXh+2NgpUAkE1C4HPg0CsR+oQQ="}]},"_npmUser":{"name":"meetupbot","email":"web-platform-bot@meetup.com"},"directories":{},"maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meetup-web-components_8.1.317_1706540152344_0.842177015838897"},"_hasShrinkwrap":false}},"readme":"# meetup-web-components\n\n[![npm version](https://badge.fury.io/js/meetup-web-components.svg)](https://badge.fury.io/js/meetup-web-components)\n[![main](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml/badge.svg)](https://github.com/meetup/meetup-web-components/actions/workflows/main.yml)\n\nMeetup library of React UI components for the web.\n\nTable of Contents\n=================\n\n  * [Releases](#releases)\n    * [Pro Web Pinned Version](#pro-web-pinned-version)\n    * [Development/Beta release](#developmentbeta-releases)\n  * [Getting started](#getting-started)\n    * [Components](#components)\n\t* [Redux Form Components](#redux-form-components)\n  * [Testing](#testing)\n    * [Simulating interactions](#simulating-interactions)\n    * [Verifying child elements](#verifying-child-elements)\n  * [Linting](#linting)\n  * [Storybook](#storybook)\n  * [Release notes](https://github.com/meetup/meetup-web-components/blob/main/CHANGELOG.md)\n\n## Component checklist\nThis checklist can be used as a guide for adding components that are easy to reuse and maintain. The categories come from a talk I saw [Elyse Holladay](https://elyseholladay.github.io/) give at Clarity Conf 2017.\n\n**Easy to reason about**\n* [ ] It will be clear to other designers or engineers what problem the component solves and when to use it\n* [ ] All properties, options and variants are documented in Storybook\n* [ ] Has unit tests\n* [ ] Provides logical defaults\n* [ ] If there can be errors, error states are designed and documented\n* [ ] If the component has become complex, it has been broken into smaller components\n\n**Context-agnostic**\n* [ ] Doesn't rely on a parent component to behave or look correctly\n* [ ] Doesn't have logic that controls functionality outside of itself e.g.: if there is a button in the component, it should take an event handler via props instead of assuming what the button is going to do\n* [ ] Works in supported browsers and devices\n* [ ] Design is [accessible](https://meetup.github.io/swarm-design-system/design/usability/a11y/) for all users\n* [ ] Provides necessary ARIA information\n* [ ] Design won't cause issues with translation or [internationalization](https://meetup.github.io/swarm-design-system/design/usability/i18n/)\n\n**Independent and isolated**\n* [ ] Only affects itself\n* [ ] Defines itself and its styles only in one place\n* [ ] Ready to use \"out of the box\" in consumer apps or by other components\n\n## Releases\n\nThis package uses semver versioning to tag releases, although the patch version\nis determined exclusively by the Travis build number for pushes to `main`.\nMajor and minor versions are hard-coded into the [Makefile](Makefile#L2).\n\nManual pushes to `main` and PR merges to main will be built by Travis, and\nwill kick off the yarn publish routine. The currently-published version of the\npackage is shown on the repo homepage on GitHub in a badge at the top of the\nREADME.\n\n### Pro Web Pinned Version\n\n**CURRENT PRO VERSION: `6.2.0`**\n\n`pro-web` is not on the latest version of MWC that uses `swarm-ui`.\nInstead, the `pro-web` version of MWC is based off a branch called\n`pro-web-6.x.x`. It's manually published to npm as version `6.2.0`\nand is tagged as `pro` in the registry, so all that is needed to\ninstall is `yarn add meetup-web-components@pro -W`.\n\nIf changes are needed for the `pro-web` version, do the following:\n\n- Checkout, commit+push changes to the `pro-web-6.x.x` branch.\n- Bump the version number in the `package.json` file and commit+push.\n- Edit this README to update the current version.\n- Finally, run `npm publish --tag pro` as the `meetupbot` npm user.\n\n### Development/Beta releases\n\nWhen developing a consumer application that requires changes to the platform\ncode, you can release a beta version of the platform on npm by opening a PR in\nthe meetup-web-platform repo. When it builds successfully, a new beta version\nwill be added to the list of available npm versions. The generated version number\nis in the Travis build logs, which you can navigate to by clicking on 'Show all\nchecks' in the box that says 'All checks have passed', and then getting the\n'Details' of the Travis build.\n\n<img width=\"797\" alt=\"screen shot 2016-10-29 at 10 25 20 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822867/26d007dc-9dc2-11e6-8059-96d368411e78.png\">\n\n<img width=\"685\" alt=\"screen shot 2016-10-29 at 10 25 29 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822869/28d1f432-9dc2-11e6-8157-3d381746f315.png\">\n\nAt the bottom of the build log, there is a line that `echo`s the `GIT_TAG`.\nIf you click the disclosure arrow, the version number will be displayed, e.g.\n`0.5.177-beta`.\n\n<img width=\"343\" alt=\"screen shot 2016-10-29 at 10 25 59 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822874/312a9792-9dc2-11e6-97bc-62f61d252d4e.png\">\n\n<img width=\"418\" alt=\"screen shot 2016-10-29 at 10 26 06 am\" src=\"https://cloud.githubusercontent.com/assets/1885153/19822876/34182e9c-9dc2-11e6-9901-c8e68591dc12.png\">\n\nYou can then install this beta version into your consumer application with\n\n```sh\n> yarn add meetup-web-components@<version tag>\n```\n\nEach time you push a change to your `meetup-web-components` PR, you'll need to\nre-install it with the new tag in your consumer application code.\n\nThe overall workflow is:\n\n1. Open a PR for your `meetup-web-components` branch\n2. Wait for Travis to successfully build your branch (this can take 5+ minutes)\n3. Get the version string from the build logs under `GIT_TAG`\n4. (if needed) Push changes to your `meetup-web-components` branch\n5. Repeat steps 2-3\n\n## Getting started\n\nYou can generate the boilerplate files for React components using\n`yarn run generate`, which invokes `src/utils/generate.js`.\n\nThe command will prompt you for a 'type' (select from the list of options),\nand a 'name'. It generates the following files in `src/` :\n\n- `<ComponentName>.jsx` Component JSX module\n- `<componentName>.test.jsx` Component test script\n- `<componentName>.story.jsx` Storybook script\n\n### Components\n\nLocated in the `src/` directory, component files live alongside\ntheir corresponding `.test` and `.story` files.\n\nFilename casing conventions:\n- Component files: `CamelCase`, with a leading capital, i.e. `RsvpTag.jsx`\n- Test files: `camelCase`, i.e. `rsvpTag.test.js`\n- Story files: `camelCase`, i.e. `rsvpTag.story.jsx`\n\n### Redux Form Components\n\nWe use [`redux-form`](https://redux-form.com/) in our `mup-web` app to help with validation flow.\n\n`redux-form` can use our form components (just pass our MWC component to `Field` as the [`component` prop](https://redux-form.com/7.0.4/docs/api/field.md/#-code-component-component-function-string-code-required-)), but we need to write wrappers to pass down the props from `redux-form` `Field` to our form components in `meetup-web-components`.\n\nThe job of the wrapper for each component is mostly just parsing out the `meta`, `input` and `other` props from `redux-form` and passing them on.\n\n#### Conventions\nYou can find the wrapper classes in `src/forms/redux-form`.\n\nThe files are named after the classes they wrap to avoid verbose file names.\nEx. `forms/TogglePill.jsx` has a `forms/redux-form/TogglePill.jsx`.\n\nBut the actual class name to import and `displayName`, have `ReduxForm` in the name.\nEx. `export class ReduxFormTogglePill`\n\nWe write wrappers as we need them, so if you don't find one that you need, please write it!\n\n#### Gotchas\n\nWe've run into a couple gotchas already:\n`redux-form` validates all fields on load, and its hard to tell when the form is first rendered. To avoid displaying errors right away, we added some logic to read [`meta.touched`](https://redux-form.com/7.0.4/docs/api/field.md/#-code-meta-touched-boolean-code-). https://github.com/meetup/meetup-web-components/pull/307\n\n`redux-form`'s implementation of checkboxes give them values of `true` and `false`.\n`ReduxFormTogglePill` wrappers handle this now by passing the `input.value` prop down as `isActive` (which sets `checked` on checkboxes)\nhttps://github.com/meetup/meetup-web-components/pull/310.\nWe may need to do this for other checkbox, radio component wrappers.\n\n\n### Layout conventions\n\nThe `src/` directory contains layout helpers, like `Section` and `Chunk`. These are\ndocumented in Storybook, but a [more detailed guide can be found here](https://meetup.github.io/swarm-design-system/design/layout/layoutBasics/).\n\n\n## Testing\n\nUnit testing UI components is a little weird compared with unit testing business logic.\n\n1. You have to decide what aspects of a UI element are intrinsic to its appearance\nrather than just implementation details\n2. UI elements evolve based on aesthetic tastes as much as functional requirements -\ninflexible tests require a lot of maintenance\n3. Headless testing of browser-dependent objects requires some extra tooling to simulate\nthe target environment\n\n### Simulating interaction\n\n`TestUtils.Simulate` appears to work correctly for our testing setup - it should be used\nfor all tests that involve simulating events, like `onClick`. Check out `button.test.js`\nfor an example.\n\n### Verifying child elements\n\nIn UI testing, there is an almost invisible line between testing the implementation (markup)\nand testing the behavior (appearance/content), and ideally you only should test the behavior -\nthere are loads of ways to change markup without changing the fundamental app experience, and\nthose kinds of markup changes should not be considered \"bugs\" that result in failed tests.\n\nThe implication for constructing unit tests is that you should avoid relying on the specific\nmarkup (tags and DOM structure). Sometimes it's unavoidable, but if you are inclined to use\n`getElementsByTagName`, `firstChild/lastChild`, or a `querySelector(All)` that includes a tag\nname to access particular parts of the component UI, check whether there is a better way to skip\nover the markup implementation details and grab what you want explicitly.\n\nA useful option is to add a PCV `className` to the element of interest, and just use\n`yourComponentEl.querySelector('.specificClassName')` to find it. Classnames are free and\nDOM-independent, which means that no matter what the markup is for your event name, you can\nalways unit-test the behavior (text content) accurately with\n\n```js\n// good\nexpect(eventNode.querySelector('.event-name').textContent).toEqual(testEventName);\n\n// bad - assumes both tag (h5) and structure (first h5 in the card)\nexpect(eventNode.getElementsByTagName('h5')[0].textContent).toEqual(testEventName);\n```\n\n## Linting\n\nTo manually lint your code, run:\n\n`$ yarn run lint`\n\nWhitespace issues will be fixed automatically - just remember to commit the changes. Other style\nissues will log errors. Our `.eslintrc` configuration is based on the 'recommended' preset, with\na number of additional rules that have been requested by the dev team. It's a 'living' standard,\nhowever, so please feel free to send PRs with updates!\n\n## Storybook\n\nBefore building any components, it's helpful to know what related components\nhave already been built into our Foundation library. We use\n[React Storybook](https://github.com/kadirahq/react-storybook)\nto display components outside of the app context. To open it, run:\n\n```sh\n$ yarn install\n$ yarn run storybook\n```\n\nAnd open the viewer at [http://localhost:9001](http://localhost:9001)\n\nAll of the available components are listed on the left, and clicking on\none will open it in the preview pane. Variants are also listed in the left\ncolumn to show how different states affect the rendered component.\n","maintainers":[{"name":"meetupbot","email":"web-platform-bot@meetup.com"}],"time":{"modified":"2024-01-29T14:55:52.752Z","created":"2016-11-03T19:24:30.056Z","0.0.8-beta":"2016-11-03T19:24:30.056Z","0.1.10":"2016-11-03T19:32:52.889Z","0.1.11-beta":"2016-11-04T15:56:33.286Z","0.1.13-beta":"2016-11-04T18:05:41.223Z","0.1.14":"2016-11-04T21:02:17.695Z","0.1.15-beta":"2016-11-07T16:19:36.702Z","0.1.16":"2016-11-07T16:25:02.443Z","0.1.17":"2016-11-07T17:17:22.849Z","0.1.19-beta":"2016-11-18T18:09:09.613Z","0.1.20-beta":"2016-11-18T18:11:13.245Z","0.1.21-beta":"2016-11-18T18:52:18.789Z","0.1.22":"2016-11-22T14:03:04.142Z","0.1.23-beta":"2016-11-23T16:30:38.120Z","0.1.24":"2016-11-23T17:33:39.213Z","0.1.33-beta":"2016-12-01T07:43:38.280Z","0.1.34":"2016-12-01T11:45:40.037Z","0.1.37-beta":"2016-12-02T19:59:21.567Z","0.1.38-beta":"2016-12-02T21:43:38.451Z","0.1.39-beta":"2016-12-05T20:53:01.411Z","0.1.55-beta":"2016-12-14T17:53:10.440Z","0.1.56-beta":"2016-12-14T17:55:20.180Z","0.1.61":"2016-12-14T23:17:47.170Z","0.1.62":"2016-12-20T15:52:22.584Z","0.1.63-beta":"2016-12-20T17:59:48.754Z","0.1.64-beta":"2016-12-20T19:20:20.185Z","0.1.65":"2016-12-20T19:37:46.836Z","0.1.66-beta":"2016-12-20T20:20:35.949Z","0.1.67-beta":"2016-12-21T16:53:53.993Z","0.1.68-beta":"2016-12-21T16:55:47.167Z","0.1.69-beta":"2016-12-21T17:05:21.246Z","0.1.70-beta":"2016-12-21T20:02:46.957Z","0.1.71-beta":"2016-12-21T20:14:03.218Z","0.1.72-beta":"2016-12-21T20:21:13.697Z","0.1.73":"2016-12-21T20:42:53.421Z","0.1.74-beta":"2016-12-21T21:48:18.864Z","0.1.75-beta":"2016-12-21T22:42:56.779Z","0.1.76-beta":"2016-12-22T19:29:48.650Z","0.1.77-beta":"2016-12-22T19:50:59.892Z","0.1.78":"2016-12-22T19:56:04.642Z","0.1.79-beta":"2016-12-28T20:58:47.887Z","0.1.80-beta":"2016-12-28T21:00:33.402Z","0.1.82-beta":"2016-12-28T23:49:24.527Z","0.1.89-beta":"2016-12-30T19:58:05.166Z","0.1.90-beta":"2017-01-04T16:04:59.731Z","0.1.94-beta":"2017-01-05T19:40:40.438Z","0.1.95":"2017-01-05T21:33:32.662Z","0.1.100-beta":"2017-01-09T21:49:14.778Z","0.1.102-beta":"2017-01-09T22:07:55.376Z","0.1.103-beta":"2017-01-10T16:46:22.913Z","0.1.104-beta":"2017-01-10T17:11:27.392Z","0.1.107-beta":"2017-01-10T23:28:47.307Z","0.1.108-beta":"2017-01-10T23:39:53.056Z","0.1.110-beta":"2017-01-11T00:49:05.481Z","0.1.111-beta":"2017-01-11T01:15:27.237Z","0.1.112-beta":"2017-01-11T16:21:46.439Z","0.1.114":"2017-01-11T18:46:45.654Z","0.1.115-beta":"2017-01-11T18:53:59.442Z","0.1.116-beta":"2017-01-11T22:49:58.011Z","0.1.117-beta":"2017-01-11T23:01:28.422Z","0.1.118-beta":"2017-01-11T23:12:21.522Z","0.1.120-beta":"2017-01-12T15:33:46.930Z","0.1.121-beta":"2017-01-12T15:37:02.968Z","0.1.122-beta":"2017-01-12T17:34:13.481Z","0.1.123-beta":"2017-01-12T18:22:58.594Z","0.1.124-beta":"2017-01-12T18:27:10.247Z","0.1.125-beta":"2017-01-12T18:29:08.528Z","0.1.126-beta":"2017-01-12T19:10:57.466Z","0.1.127-beta":"2017-01-12T20:19:35.464Z","0.1.128":"2017-01-12T20:28:47.957Z","0.1.129":"2017-01-12T20:59:39.658Z","0.1.130":"2017-01-12T21:00:27.532Z","0.1.131":"2017-01-12T21:00:58.312Z","0.1.132-beta":"2017-01-12T21:06:46.018Z","0.1.133-beta":"2017-01-12T21:07:43.254Z","0.1.134-beta":"2017-01-12T21:29:15.196Z","0.1.135-beta":"2017-01-12T22:16:32.349Z","0.1.136-beta":"2017-01-12T22:49:12.139Z","0.1.137-beta":"2017-01-12T23:03:48.823Z","0.1.138":"2017-01-13T01:25:20.937Z","0.1.140-beta":"2017-01-13T17:00:25.443Z","0.1.141-beta":"2017-01-13T17:51:14.591Z","0.1.142":"2017-01-13T17:57:07.882Z","0.1.143":"2017-01-13T20:00:27.664Z","0.1.144-beta":"2017-01-13T21:59:00.523Z","0.1.145-beta":"2017-01-15T00:45:44.085Z","0.1.146-beta":"2017-01-15T02:24:01.234Z","0.1.148":"2017-01-16T17:19:05.923Z","0.1.147":"2017-01-16T17:19:15.091Z","0.1.149-beta":"2017-01-17T11:18:33.880Z","0.1.150-beta":"2017-01-17T18:00:24.471Z","0.1.151":"2017-01-17T21:15:25.478Z","0.1.152-beta":"2017-01-18T15:06:41.516Z","0.1.153":"2017-01-18T17:17:11.134Z","0.1.154-beta":"2017-01-18T17:17:23.802Z","0.1.155-beta":"2017-01-18T17:26:25.505Z","0.1.156":"2017-01-18T18:16:39.814Z","0.1.157-beta":"2017-01-18T18:18:53.554Z","0.1.158":"2017-01-18T18:35:53.963Z","0.1.159":"2017-01-18T20:22:01.795Z","0.1.160-beta":"2017-01-18T20:46:54.408Z","0.1.161-beta":"2017-01-18T21:27:59.047Z","0.1.162":"2017-01-18T21:51:42.401Z","0.1.163-beta":"2017-01-19T00:24:06.273Z","0.1.166-beta":"2017-01-19T14:49:07.781Z","0.1.167-beta":"2017-01-19T16:33:31.053Z","0.1.168-beta":"2017-01-19T16:55:19.864Z","0.1.169":"2017-01-19T17:58:12.801Z","0.1.170-beta":"2017-01-19T22:41:12.647Z","0.1.171-beta":"2017-01-20T00:44:26.670Z","0.1.172":"2017-01-20T01:09:13.867Z","0.1.173-beta":"2017-01-20T03:22:46.808Z","0.1.174-beta":"2017-01-20T06:15:31.730Z","0.1.175":"2017-01-20T13:57:55.136Z","0.1.176-beta":"2017-01-20T18:19:40.162Z","0.1.177-beta":"2017-01-20T18:43:31.717Z","0.1.178":"2017-01-20T20:41:00.172Z","0.1.179":"2017-01-20T20:46:48.519Z","0.1.182-beta":"2017-01-23T17:48:19.949Z","0.1.183-beta":"2017-01-23T18:29:12.072Z","0.1.184-beta":"2017-01-23T18:29:25.206Z","0.1.185-beta":"2017-01-23T19:13:36.536Z","0.1.189":"2017-01-24T16:05:34.695Z","0.1.190":"2017-01-24T17:11:34.867Z","0.1.191-beta":"2017-01-24T17:32:43.779Z","0.1.192-beta":"2017-01-24T17:33:08.277Z","0.1.193-beta":"2017-01-24T17:39:00.231Z","0.1.194-beta":"2017-01-24T18:34:00.541Z","0.1.195":"2017-01-24T19:41:59.755Z","0.1.197-beta":"2017-01-24T21:58:16.336Z","0.1.198-beta":"2017-01-24T22:39:30.777Z","0.1.199":"2017-01-24T22:44:36.832Z","0.1.200-beta":"2017-01-24T23:15:18.753Z","0.1.201":"2017-01-25T00:00:24.510Z","0.1.202-beta":"2017-01-25T19:09:49.968Z","0.1.203-beta":"2017-01-25T22:34:43.606Z","0.1.205":"2017-01-26T15:57:26.006Z","0.1.204":"2017-01-26T15:57:29.346Z","0.1.206-beta":"2017-01-26T16:35:16.379Z","0.1.208-beta":"2017-01-26T18:05:44.981Z","0.1.209-beta":"2017-01-26T20:42:05.716Z","0.1.211-beta":"2017-01-27T00:18:33.974Z","0.1.212-beta":"2017-01-28T00:03:31.778Z","0.1.214-beta":"2017-01-30T22:13:38.877Z","0.1.215":"2017-01-31T03:33:07.453Z","0.1.217-beta":"2017-02-01T04:00:31.196Z","0.1.218-beta":"2017-02-01T20:14:27.604Z","0.1.219":"2017-02-02T23:54:53.774Z","0.1.220-beta":"2017-02-03T22:18:07.072Z","0.1.221-beta":"2017-02-05T20:52:36.496Z","0.1.223-beta":"2017-02-06T18:46:29.757Z","0.1.224-beta":"2017-02-06T18:52:31.549Z","0.1.226":"2017-02-06T20:36:58.214Z","0.1.230":"2017-02-06T20:40:13.598Z","0.1.228":"2017-02-06T20:44:14.297Z","0.1.231-beta":"2017-02-07T01:39:22.096Z","0.1.232-beta":"2017-02-08T15:42:27.680Z","0.1.233-beta":"2017-02-08T22:55:01.332Z","0.1.234-beta":"2017-02-08T22:57:09.326Z","0.1.235-beta":"2017-02-09T17:09:56.591Z","0.1.237-beta":"2017-02-09T17:53:20.492Z","0.1.238-beta":"2017-02-09T18:50:42.505Z","0.1.239-beta":"2017-02-09T19:55:55.645Z","0.1.241-beta":"2017-02-09T21:05:41.785Z","0.1.242-beta":"2017-02-09T22:32:37.962Z","0.1.243-beta":"2017-02-10T17:46:25.898Z","0.1.244-beta":"2017-02-10T21:21:50.533Z","0.1.245":"2017-02-10T23:49:25.700Z","0.1.246-beta":"2017-02-10T23:59:06.034Z","0.1.247":"2017-02-12T14:39:12.957Z","0.1.248-beta":"2017-02-13T15:21:26.154Z","0.1.249-beta":"2017-02-13T15:25:45.021Z","0.1.251":"2017-02-13T18:01:19.837Z","0.1.252-beta":"2017-02-13T19:45:36.398Z","0.1.254-beta":"2017-02-14T00:56:19.588Z","0.1.255-beta":"2017-02-14T01:39:22.246Z","0.1.256-beta":"2017-02-14T02:31:02.703Z","0.1.258-beta":"2017-02-14T09:26:45.878Z","0.1.259-beta":"2017-02-14T17:43:37.190Z","0.1.261-beta":"2017-02-14T18:06:03.515Z","0.1.262-beta":"2017-02-14T18:33:25.562Z","0.1.263-beta":"2017-02-14T18:37:06.465Z","0.1.264-beta":"2017-02-14T19:14:18.783Z","0.1.265-beta":"2017-02-14T19:16:11.718Z","0.1.266-beta":"2017-02-14T20:56:59.563Z","0.1.267-beta":"2017-02-14T21:05:35.183Z","0.1.268-beta":"2017-02-14T21:31:02.975Z","0.1.269":"2017-02-15T15:19:34.334Z","0.1.270-beta":"2017-02-15T20:03:14.052Z","0.1.271":"2017-02-15T20:10:29.350Z","0.1.272-beta":"2017-02-15T23:04:44.242Z","0.1.273":"2017-02-15T23:10:30.217Z","0.1.274-beta":"2017-02-15T23:15:04.018Z","0.1.276-beta":"2017-02-15T23:22:06.408Z","0.1.275-beta":"2017-02-15T23:25:35.906Z","0.1.278-beta":"2017-02-16T01:08:25.293Z","0.1.279":"2017-02-16T17:31:04.221Z","0.1.281-beta":"2017-02-18T22:58:19.868Z","0.1.283":"2017-02-21T18:21:22.979Z","0.1.284-beta":"2017-02-21T19:24:47.542Z","0.1.285":"2017-02-21T19:31:16.637Z","0.1.287-beta":"2017-02-22T08:35:25.038Z","0.1.288-beta":"2017-02-22T11:06:30.687Z","0.1.289-beta":"2017-02-22T14:56:14.296Z","0.1.290-beta":"2017-02-22T22:38:46.230Z","0.1.291-beta":"2017-02-22T22:53:18.247Z","0.1.295-beta":"2017-02-24T00:09:34.513Z","0.1.296":"2017-02-24T00:30:36.365Z","0.1.297-beta":"2017-02-24T00:54:33.377Z","0.1.298-beta":"2017-02-24T00:57:03.759Z","0.1.299-beta":"2017-02-24T00:58:02.728Z","0.1.300-beta":"2017-02-24T01:03:01.078Z","0.1.301-beta":"2017-02-24T16:56:56.299Z","0.1.302-beta":"2017-02-24T17:19:59.593Z","0.1.305-beta":"2017-02-24T21:45:17.075Z","0.1.306-beta":"2017-02-24T21:48:46.992Z","0.1.307-beta":"2017-02-24T21:57:02.950Z","0.1.308":"2017-02-24T22:03:46.233Z","0.1.310-beta":"2017-02-24T23:02:30.982Z","0.1.311-beta":"2017-02-24T23:21:40.601Z","0.1.315-beta":"2017-02-28T08:32:31.278Z","0.1.316":"2017-02-28T08:40:21.591Z","0.1.317":"2017-02-28T08:40:56.852Z","0.1.319-beta":"2017-03-01T01:15:51.461Z","0.1.320-beta":"2017-03-01T02:14:23.022Z","0.1.321-beta":"2017-03-01T16:28:00.456Z","0.2.322-beta":"2017-03-01T18:47:47.335Z","1.0.323-beta":"2017-03-01T20:28:24.395Z","0.1.324":"2017-03-01T21:14:42.350Z","0.1.325-beta":"2017-03-01T21:48:24.289Z","1.0.326":"2017-03-01T22:03:39.573Z","1.0.327-beta":"2017-03-03T14:09:04.197Z","1.0.328":"2017-03-03T19:07:37.156Z","1.0.330-beta":"2017-03-04T00:28:03.252Z","1.0.329-beta":"2017-03-04T00:42:08.631Z","1.0.331-beta":"2017-03-04T01:00:41.364Z","1.0.332-beta":"2017-03-05T20:23:36.175Z","1.0.333-beta":"2017-03-05T20:45:58.912Z","1.0.335":"2017-03-05T20:53:22.973Z","1.0.334-beta":"2017-03-05T20:56:17.859Z","1.0.336-beta":"2017-03-06T00:58:32.425Z","1.0.337":"2017-03-06T01:02:28.654Z","1.0.338-beta":"2017-03-06T13:10:10.881Z","1.0.339-beta":"2017-03-06T16:47:51.399Z","1.0.340":"2017-03-06T17:00:18.823Z","1.0.341-beta":"2017-03-06T22:24:15.162Z","1.0.342-beta":"2017-03-06T22:26:04.596Z","1.0.343":"2017-03-06T22:58:15.408Z","1.0.344-beta":"2017-03-07T01:57:19.908Z","1.0.345-beta":"2017-03-07T18:21:15.601Z","1.0.346-beta":"2017-03-07T20:23:32.286Z","1.0.347-beta":"2017-03-07T20:29:16.057Z","1.0.348-beta":"2017-03-07T21:18:07.982Z","1.0.349-beta":"2017-03-07T22:32:33.919Z","1.0.350-beta":"2017-03-07T23:11:19.008Z","1.0.351-beta":"2017-03-07T23:50:20.446Z","1.0.353-beta":"2017-03-08T03:13:06.026Z","1.0.410-beta":"2017-03-20T21:02:12.260Z","1.0.411-beta":"2017-03-20T21:04:31.075Z","1.0.413":"2017-03-20T21:18:37.696Z","1.0.417-beta":"2017-03-21T16:15:20.830Z","1.0.418":"2017-03-21T16:26:17.758Z","1.0.419":"2017-03-21T16:33:00.084Z","1.0.420":"2017-03-21T16:36:06.880Z","1.0.421-beta":"2017-03-21T17:46:32.191Z","1.0.422-beta":"2017-03-21T18:25:44.733Z","1.0.425-beta":"2017-03-21T19:38:13.347Z","1.0.427-beta":"2017-03-21T19:59:49.961Z","1.0.428-beta":"2017-03-21T20:14:00.632Z","1.0.429":"2017-03-21T20:34:52.818Z","1.0.430-beta":"2017-03-21T20:40:15.822Z","1.0.432-beta":"2017-03-21T22:13:45.835Z","1.0.437-beta":"2017-03-22T00:16:58.168Z","1.0.439":"2017-03-22T00:25:42.518Z","1.0.442-beta":"2017-03-22T00:38:41.036Z","1.0.440":"2017-03-22T00:39:49.068Z","1.0.445-beta":"2017-03-22T00:55:10.790Z","1.0.448-beta":"2017-03-22T01:02:36.645Z","1.0.451-beta":"2017-03-22T01:23:19.955Z","1.0.453-beta":"2017-03-22T02:26:19.892Z","1.0.454-beta":"2017-03-22T02:40:31.081Z","1.0.455-beta":"2017-03-22T03:21:39.049Z","1.0.456-beta":"2017-03-22T14:37:39.546Z","1.0.457-beta":"2017-03-22T15:01:50.937Z","1.0.458-beta":"2017-03-22T15:10:32.588Z","1.0.459-beta":"2017-03-22T15:11:33.981Z","1.0.460-beta":"2017-03-22T15:16:23.953Z","1.0.461-beta":"2017-03-22T15:17:20.817Z","1.0.462-beta":"2017-03-22T15:19:26.916Z","1.0.463-beta":"2017-03-22T16:22:37.490Z","1.0.464-beta":"2017-03-22T16:30:39.482Z","1.0.465-beta":"2017-03-22T17:14:36.515Z","1.0.466-beta":"2017-03-22T18:41:47.941Z","1.0.468":"2017-03-22T20:10:54.327Z","1.0.469":"2017-03-22T20:46:45.592Z","1.0.472":"2017-03-23T17:37:08.143Z","1.0.475-beta":"2017-03-23T19:23:03.645Z","1.0.478-beta":"2017-03-23T19:28:55.225Z","1.0.480-beta":"2017-03-23T19:39:57.421Z","1.0.482":"2017-03-23T19:44:16.672Z","1.0.486-beta":"2017-03-23T20:38:41.547Z","1.0.488":"2017-03-23T20:50:28.431Z","1.0.491-beta":"2017-03-23T22:17:40.478Z","1.0.494-beta":"2017-03-23T23:16:37.286Z","1.0.497-beta":"2017-03-24T15:44:12.593Z","1.0.500-beta":"2017-03-24T16:24:05.610Z","1.0.505-beta":"2017-03-24T19:18:48.414Z","1.0.508-beta":"2017-03-24T19:36:07.686Z","1.0.511-beta":"2017-03-27T15:39:33.793Z","1.0.513":"2017-03-27T15:44:59.567Z","1.0.516-beta":"2017-03-27T16:23:56.153Z","1.0.518":"2017-03-27T16:27:46.898Z","1.0.521-beta":"2017-03-27T16:32:48.932Z","1.0.524-beta":"2017-03-27T16:38:16.842Z","1.0.526-beta":"2017-03-27T18:16:26.628Z","1.0.530-beta":"2017-03-27T18:30:34.793Z","1.0.533-beta":"2017-03-27T18:36:15.520Z","1.0.536":"2017-03-27T19:17:43.896Z","1.0.543":"2017-03-27T21:17:37.096Z","1.0.545-beta":"2017-03-27T21:18:19.025Z","1.0.548":"2017-03-27T21:38:47.254Z","1.0.555-beta":"2017-03-28T18:05:33.706Z","1.0.557-beta":"2017-03-28T19:43:02.914Z","1.0.561-beta":"2017-03-28T20:03:04.047Z","1.0.563":"2017-03-28T20:08:01.600Z","1.0.565-beta":"2017-03-29T00:21:15.764Z","1.0.569-beta":"2017-03-29T00:25:24.165Z","1.0.572-beta":"2017-03-29T17:56:23.631Z","1.0.575-beta":"2017-03-29T18:05:01.914Z","1.0.578-beta":"2017-03-29T21:58:19.504Z","1.0.580":"2017-03-30T16:11:22.538Z","1.0.585-beta":"2017-03-30T18:26:35.505Z","1.0.589-beta":"2017-03-30T18:39:17.848Z","1.0.590":"2017-03-30T18:43:02.552Z","1.0.593-beta":"2017-03-30T19:42:46.373Z","1.0.595":"2017-03-30T19:47:53.866Z","1.0.601-beta":"2017-03-31T22:53:54.815Z","1.0.605":"2017-04-03T14:42:01.055Z","1.0.606":"2017-04-03T14:42:42.155Z","1.0.616-beta":"2017-04-03T16:33:52.997Z","1.0.619-beta":"2017-04-03T18:07:10.217Z","1.0.622-beta":"2017-04-03T18:17:46.911Z","1.0.624-beta":"2017-04-03T18:19:35.879Z","1.0.632-beta":"2017-04-03T21:58:13.241Z","1.0.635":"2017-04-03T22:02:11.581Z","1.0.638-beta":"2017-04-04T15:26:54.110Z","1.0.643-beta":"2017-04-04T18:24:57.801Z","1.0.644":"2017-04-04T18:27:10.457Z","1.0.646":"2017-04-04T18:30:01.233Z","1.0.655-beta":"2017-04-04T19:03:31.076Z","1.0.657":"2017-04-04T19:06:33.748Z","1.0.660-beta":"2017-04-04T19:14:07.208Z","1.0.662":"2017-04-04T19:53:07.628Z","1.0.665-beta":"2017-04-05T00:41:48.473Z","1.0.667":"2017-04-05T00:47:06.278Z","1.0.670-beta":"2017-04-05T19:32:56.780Z","1.0.673-beta":"2017-04-06T18:47:03.617Z","1.0.676-beta":"2017-04-06T20:25:57.781Z","1.0.679-beta":"2017-04-06T20:41:20.735Z","1.0.682":"2017-04-07T01:47:43.491Z","1.0.686-beta":"2017-04-07T14:21:02.661Z","1.0.688":"2017-04-07T14:26:48.088Z","1.0.724-beta":"2017-04-10T21:03:56.913Z","1.0.730":"2017-04-10T21:42:33.478Z","1.0.731-beta":"2017-04-10T21:43:27.637Z","1.0.734":"2017-04-10T22:05:13.642Z","1.0.737-beta":"2017-04-10T22:10:28.776Z","1.0.739":"2017-04-10T23:26:38.758Z","1.0.742-beta":"2017-04-11T01:13:43.089Z","1.0.744":"2017-04-11T01:19:14.182Z","1.0.747-beta":"2017-04-11T13:40:14.055Z","1.0.749":"2017-04-11T13:43:47.909Z","1.0.752-beta":"2017-04-11T14:26:12.776Z","1.0.755-beta":"2017-04-11T15:14:31.302Z","1.0.758-beta":"2017-04-11T15:32:13.678Z","1.0.760":"2017-04-11T15:40:46.954Z","1.0.763-beta":"2017-04-11T17:53:59.501Z","1.0.766-beta":"2017-04-11T18:06:48.733Z","1.0.769-beta":"2017-04-11T18:20:35.812Z","1.0.772-beta":"2017-04-11T18:52:23.389Z","1.0.775-beta":"2017-04-11T20:17:18.865Z","1.0.778-beta":"2017-04-11T20:26:51.614Z","1.0.779":"2017-04-11T20:39:18.106Z","1.0.780":"2017-04-11T20:55:13.957Z","1.0.792-beta":"2017-04-12T01:53:21.773Z","1.0.793":"2017-04-12T02:01:27.981Z","1.0.795-beta":"2017-04-12T12:29:20.431Z","1.0.798-beta":"2017-04-12T15:33:59.180Z","1.0.799-beta":"2017-04-12T15:34:13.501Z","1.0.800":"2017-04-12T15:36:57.473Z","1.0.802-beta":"2017-04-12T20:30:39.706Z","1.0.804-beta":"2017-04-12T21:00:52.381Z","1.0.787-beta":"2017-04-12T21:55:20.449Z","1.0.805":"2017-04-12T22:21:10.962Z","1.0.806":"2017-04-12T22:29:46.260Z","1.0.807-beta":"2017-04-12T22:39:15.930Z","1.0.810-beta":"2017-04-12T23:01:40.308Z","1.0.812-beta":"2017-04-12T23:03:48.585Z","1.0.813":"2017-04-12T23:54:34.561Z","1.0.815-beta":"2017-04-13T14:14:13.805Z","1.0.816":"2017-04-13T14:38:59.691Z","1.0.818-beta":"2017-04-13T15:54:55.364Z","1.0.819":"2017-04-13T15:57:33.889Z","1.0.821-beta":"2017-04-13T22:10:23.128Z","1.0.823-beta":"2017-04-14T15:15:32.963Z","1.0.825-beta":"2017-04-14T15:52:19.389Z","1.0.826":"2017-04-14T17:12:00.286Z","1.0.828-beta":"2017-04-14T20:20:18.107Z","1.0.829-beta":"2017-04-17T15:19:28.789Z","1.0.831":"2017-04-17T15:27:23.432Z","1.0.832":"2017-04-17T18:48:54.834Z","1.0.836":"2017-04-17T22:38:47.267Z","1.0.842-beta":"2017-04-17T23:04:40.803Z","1.0.843":"2017-04-17T23:10:18.287Z","1.0.844-beta":"2017-04-20T17:10:41.654Z","1.0.845-beta":"2017-04-20T17:10:52.184Z","1.0.846":"2017-04-20T18:02:02.356Z","1.0.847-beta":"2017-04-20T19:49:30.785Z","1.0.848":"2017-04-20T19:59:00.323Z","1.0.849-beta":"2017-04-20T21:02:30.193Z","1.0.850-beta":"2017-04-20T21:25:18.564Z","1.0.851-beta":"2017-04-20T21:32:04.724Z","1.0.852-beta":"2017-04-21T14:20:11.244Z","1.0.853":"2017-04-21T15:34:31.198Z","1.0.854":"2017-04-21T20:14:05.961Z","1.0.855-beta":"2017-04-23T00:10:12.155Z","1.0.857":"2017-04-24T16:56:10.874Z","1.0.858-beta":"2017-04-24T17:46:46.714Z","1.0.859-beta":"2017-04-24T18:08:24.732Z","1.0.860":"2017-04-24T18:12:08.824Z","1.0.863-beta":"2017-04-24T18:49:43.329Z","1.0.864-beta":"2017-04-25T19:23:47.016Z","1.0.865":"2017-04-25T19:58:09.796Z","1.0.866-beta":"2017-04-26T16:20:37.760Z","1.0.867-beta":"2017-04-27T00:54:50.439Z","1.0.868-beta":"2017-04-27T01:02:15.196Z","1.0.869-beta":"2017-04-27T01:49:28.699Z","1.0.870":"2017-04-27T01:53:00.791Z","1.0.871":"2017-04-27T22:33:56.390Z","1.0.872":"2017-04-28T16:57:57.509Z","1.0.873-beta":"2017-05-01T14:23:57.934Z","1.0.874-beta":"2017-05-01T16:00:59.710Z","1.0.875-beta":"2017-05-01T23:38:15.265Z","1.0.876":"2017-05-02T02:44:49.787Z","1.0.877":"2017-05-02T02:53:15.117Z","1.0.878":"2017-05-02T03:37:30.698Z","1.0.880-beta":"2017-05-02T15:00:40.752Z","1.0.881-beta":"2017-05-02T16:04:37.912Z","1.0.882-beta":"2017-05-02T18:39:41.337Z","1.0.883-beta":"2017-05-02T19:01:27.525Z","1.0.884-beta":"2017-05-02T19:39:15.777Z","1.0.885":"2017-05-02T19:42:11.320Z","1.0.886-beta":"2017-05-02T20:47:21.583Z","1.0.887":"2017-05-03T19:29:24.360Z","1.0.888-beta":"2017-05-04T22:57:51.846Z","1.0.889":"2017-05-04T23:30:17.085Z","1.0.890-beta":"2017-05-04T23:34:05.339Z","1.0.891":"2017-05-04T23:39:23.834Z","1.0.892-beta":"2017-05-05T13:00:39.870Z","1.0.893-beta":"2017-05-05T16:59:16.186Z","1.0.894":"2017-05-05T17:08:33.128Z","1.0.895-beta":"2017-05-05T17:26:49.037Z","1.0.896-beta":"2017-05-05T18:37:31.691Z","1.0.897-beta":"2017-05-08T12:34:45.086Z","1.0.898":"2017-05-09T13:04:21.989Z","1.0.899-beta":"2017-05-09T20:45:21.254Z","1.0.900-beta":"2017-05-09T22:31:06.890Z","1.0.901-beta":"2017-05-09T22:38:36.538Z","1.0.902-beta":"2017-05-10T18:43:48.217Z","1.0.903":"2017-05-11T17:21:34.801Z","1.0.904-beta":"2017-05-11T20:31:30.956Z","1.0.905":"2017-05-11T21:00:05.567Z","1.0.906-beta":"2017-05-11T21:14:53.332Z","1.0.907":"2017-05-11T21:47:46.402Z","1.0.908-beta":"2017-05-12T16:12:58.377Z","1.0.909-beta":"2017-05-15T18:24:53.242Z","1.0.910-beta":"2017-05-15T19:19:59.273Z","1.0.911-beta":"2017-05-15T20:47:05.500Z","1.0.912":"2017-05-16T22:40:23.368Z","1.0.913-beta":"2017-05-17T19:09:18.049Z","1.0.914-beta":"2017-05-17T19:22:26.004Z","1.0.915-beta":"2017-05-17T20:50:59.097Z","1.0.916-beta":"2017-05-17T21:02:11.455Z","1.0.917-beta":"2017-05-17T21:05:33.119Z","1.0.918-beta":"2017-05-18T13:49:53.348Z","1.1.919-beta":"2017-05-18T20:07:50.121Z","1.1.920-beta":"2017-05-19T18:18:19.634Z","1.0.921-beta":"2017-05-21T21:38:14.951Z","1.0.922-beta":"2017-05-22T21:11:53.256Z","1.0.923-beta":"2017-05-22T21:40:20.424Z","1.0.924-beta":"2017-05-22T22:02:31.774Z","1.0.925-beta":"2017-05-22T22:25:11.367Z","1.0.926-beta":"2017-05-22T23:51:44.459Z","1.0.927-beta":"2017-05-22T23:55:31.716Z","1.0.928-beta":"2017-05-22T23:55:52.424Z","1.0.929-beta":"2017-05-23T00:05:55.299Z","1.0.930-beta":"2017-05-23T03:16:44.534Z","1.0.931-beta":"2017-05-23T14:35:34.199Z","1.0.933":"2017-05-23T14:42:40.675Z","1.0.932-beta":"2017-05-23T14:42:45.626Z","1.0.934-beta":"2017-05-23T14:51:30.246Z","1.0.935-beta":"2017-05-23T15:27:15.362Z","1.0.936-beta":"2017-05-23T15:36:54.471Z","1.0.937-beta":"2017-05-23T15:58:31.519Z","1.0.938":"2017-05-23T16:04:54.951Z","1.0.939":"2017-05-23T16:05:03.658Z","1.0.940-beta":"2017-05-23T19:44:50.350Z","1.0.941-beta":"2017-05-23T20:54:03.294Z","1.0.943-beta":"2017-05-24T14:48:17.867Z","1.0.944-beta":"2017-05-24T17:21:43.136Z","1.0.945":"2017-05-24T17:55:00.168Z","1.0.946-beta":"2017-05-24T20:41:34.084Z","1.0.947-beta":"2017-05-24T23:44:34.100Z","1.0.949-beta":"2017-05-25T00:09:32.679Z","1.0.950-beta":"2017-05-25T00:13:31.786Z","1.0.951-beta":"2017-05-25T00:27:52.813Z","1.0.952-beta":"2017-05-25T14:59:24.407Z","1.1.953-beta":"2017-05-25T18:49:20.600Z","1.1.954":"2017-05-25T18:53:28.921Z","1.1.956":"2017-05-26T01:17:30.595Z","1.1.957-beta":"2017-05-26T14:24:04.943Z","1.1.958-beta":"2017-05-26T15:00:01.613Z","1.1.959-beta":"2017-05-26T15:43:56.994Z","1.1.960":"2017-05-26T15:45:18.241Z","1.1.961-beta":"2017-05-26T16:05:58.336Z","1.1.962-beta":"2017-05-26T23:51:19.089Z","1.1.963-beta":"2017-05-30T14:57:42.588Z","1.1.964":"2017-05-30T17:20:16.561Z","1.1.965-beta":"2017-05-31T18:44:47.395Z","1.1.966-beta":"2017-05-31T22:13:34.300Z","1.1.967-beta":"2017-06-01T02:02:20.852Z","1.1.968-beta":"2017-06-01T03:35:42.091Z","1.1.969-beta":"2017-06-01T03:41:36.625Z","1.1.970-beta":"2017-06-01T04:40:13.000Z","1.1.971":"2017-06-01T13:48:40.555Z","1.1.972-beta":"2017-06-01T13:49:34.875Z","1.1.973-beta":"2017-06-01T13:55:11.638Z","1.1.974":"2017-06-01T15:57:52.212Z","1.1.975-beta":"2017-06-01T16:13:39.212Z","1.1.976":"2017-06-01T23:25:58.166Z","1.1.977-beta":"2017-06-02T16:39:45.740Z","1.1.978":"2017-06-02T19:05:17.234Z","1.1.980-beta":"2017-06-05T13:34:59.156Z","1.1.981-beta":"2017-06-05T13:37:46.084Z","1.1.983-beta":"2017-06-05T13:50:56.690Z","1.1.984":"2017-06-05T13:56:11.795Z","1.1.985":"2017-06-05T16:08:33.798Z","1.1.986-beta":"2017-06-05T16:36:45.262Z","1.1.987":"2017-06-05T16:39:07.284Z","1.1.988-beta":"2017-06-06T18:16:38.845Z","1.1.989":"2017-06-06T18:40:49.091Z","1.1.990-beta":"2017-06-06T19:56:34.666Z","1.1.991":"2017-06-06T19:58:29.991Z","1.1.992-beta":"2017-06-07T19:13:54.059Z","1.1.993-beta":"2017-06-07T19:15:18.209Z","1.1.994-beta":"2017-06-07T20:50:03.988Z","1.1.995":"2017-06-07T20:55:53.899Z","1.1.996-beta":"2017-06-07T21:40:11.115Z","1.1.998-beta":"2017-06-08T18:16:10.390Z","1.1.999":"2017-06-08T18:52:03.527Z","1.1.1000-beta":"2017-06-08T19:44:37.938Z","1.1.1001-beta":"2017-06-08T19:48:52.529Z","1.1.1002-beta":"2017-06-08T22:36:36.698Z","1.1.1003-beta":"2017-06-08T22:52:48.415Z","1.1.1004-beta":"2017-06-08T23:04:18.136Z","1.1.1005-beta":"2017-06-08T23:08:20.656Z","1.1.1006-beta":"2017-06-09T16:45:21.766Z","1.1.1007":"2017-06-09T16:47:42.316Z","1.1.1008":"2017-06-12T15:20:00.301Z","1.1.1009-beta":"2017-06-12T15:31:46.249Z","1.1.1010-beta":"2017-06-12T16:20:56.187Z","1.1.1011-beta":"2017-06-12T16:25:04.412Z","1.1.1012":"2017-06-12T19:19:21.586Z","1.1.1013-beta":"2017-06-12T21:51:28.336Z","1.1.1014-beta":"2017-06-13T19:54:48.544Z","1.1.1015":"2017-06-14T13:43:16.614Z","1.1.1016":"2017-06-14T15:47:01.451Z","1.1.1017-beta":"2017-06-15T16:29:04.356Z","1.1.1018-beta":"2017-06-15T21:01:19.204Z","1.1.1019-beta":"2017-06-16T22:44:51.635Z","1.1.1020":"2017-06-16T22:51:20.955Z","1.1.1021-beta":"2017-06-19T18:24:41.879Z","1.1.1022-beta":"2017-06-19T19:27:48.276Z","1.1.1023-beta":"2017-06-19T20:01:25.370Z","1.1.1024":"2017-06-20T15:37:55.126Z","1.1.1025":"2017-06-21T21:03:49.266Z","1.1.1026-beta":"2017-06-21T21:05:38.570Z","1.1.1027-beta":"2017-06-22T22:14:02.621Z","1.1.1029-beta":"2017-06-22T22:15:38.419Z","1.1.1028-beta":"2017-06-22T22:16:26.957Z","1.1.1030-beta":"2017-06-22T22:18:46.763Z","1.1.1031-beta":"2017-06-22T22:22:17.261Z","1.1.1032-beta":"2017-06-23T18:14:26.361Z","1.1.1033":"2017-07-01T01:03:02.248Z","1.1.1034":"2017-07-01T01:04:42.418Z","1.1.1035-beta":"2017-07-01T01:12:48.045Z","1.1.1036":"2017-07-05T23:48:27.765Z","1.1.1037-beta":"2017-07-06T14:30:29.915Z","1.1.1038-beta":"2017-07-06T15:44:55.687Z","1.1.1039-beta":"2017-07-06T16:57:21.215Z","1.1.1040-beta":"2017-07-06T17:16:30.101Z","1.1.1041-beta":"2017-07-06T18:16:11.817Z","1.1.1042-beta":"2017-07-06T18:25:58.731Z","1.1.1043":"2017-07-06T19:48:20.523Z","1.1.1044-beta":"2017-07-06T20:12:55.662Z","1.1.1045-beta":"2017-07-06T20:50:23.384Z","1.1.1046-beta":"2017-07-06T21:49:48.205Z","1.1.1047-beta":"2017-07-07T15:45:00.714Z","1.1.1048":"2017-07-07T15:47:11.212Z","1.1.1049-beta":"2017-07-07T19:07:11.786Z","1.1.1050-beta":"2017-07-09T18:05:28.080Z","1.1.1051":"2017-07-09T18:10:57.851Z","1.1.1052-beta":"2017-07-10T14:00:44.186Z","1.1.1053-beta":"2017-07-10T14:13:23.447Z","1.1.1054-beta":"2017-07-10T14:36:47.168Z","1.1.1055-beta":"2017-07-10T15:37:11.161Z","1.1.1056-beta":"2017-07-10T16:35:44.014Z","1.1.1057-beta":"2017-07-10T16:39:03.474Z","1.1.1058-beta":"2017-07-10T16:54:17.514Z","1.1.1059-beta":"2017-07-10T17:05:12.399Z","1.1.1060-beta":"2017-07-10T19:01:37.308Z","1.1.1061":"2017-07-10T19:22:56.859Z","1.1.1062":"2017-07-10T19:49:28.647Z","1.1.1063-beta":"2017-07-10T21:14:12.485Z","1.1.1064-beta":"2017-07-10T21:20:28.742Z","1.1.1065":"2017-07-10T21:25:07.288Z","1.1.1066-beta":"2017-07-11T15:37:56.791Z","1.1.1067":"2017-07-11T16:53:08.337Z","1.1.1068-beta":"2017-07-11T19:27:47.650Z","1.1.1069-beta":"2017-07-11T19:32:33.179Z","1.1.1070-beta":"2017-07-11T19:40:52.155Z","1.1.1071-beta":"2017-07-11T19:51:45.535Z","1.1.1072-beta":"2017-07-12T13:50:39.755Z","1.1.1073":"2017-07-12T13:53:45.505Z","1.1.1074-beta":"2017-07-12T13:57:28.480Z","1.1.1075-beta":"2017-07-12T14:04:26.276Z","1.1.1076-beta":"2017-07-12T14:11:49.526Z","1.1.1077-beta":"2017-07-12T14:22:16.681Z","1.1.1078-beta":"2017-07-12T14:23:13.168Z","1.1.1079":"2017-07-12T14:23:47.886Z","1.1.1080":"2017-07-12T14:28:56.461Z","1.1.1081-beta":"2017-07-12T14:33:22.810Z","1.1.1082-beta":"2017-07-12T21:37:54.278Z","1.1.1083-beta":"2017-07-14T16:28:57.263Z","1.1.1084":"2017-07-14T17:29:44.057Z","1.1.1085":"2017-07-14T21:51:58.116Z","1.1.1086-beta":"2017-07-17T16:23:45.329Z","1.1.1087-beta":"2017-07-17T18:28:57.765Z","1.1.1088-beta":"2017-07-17T19:13:11.976Z","1.1.1089-beta":"2017-07-18T19:47:27.741Z","1.1.1090-beta":"2017-07-19T22:33:38.717Z","1.1.1091":"2017-07-20T15:46:56.745Z","1.1.1092-beta":"2017-07-20T15:51:23.329Z","1.1.1093-beta":"2017-07-20T16:29:04.878Z","1.1.1094-beta":"2017-07-20T19:47:23.923Z","1.1.1095-beta":"2017-07-20T20:09:28.133Z","1.1.1096-beta":"2017-07-20T21:39:45.845Z","1.1.1097-beta":"2017-07-20T22:45:09.529Z","1.1.1098":"2017-07-25T17:44:29.126Z","1.1.1099":"2017-07-25T22:33:12.556Z","1.1.1100":"2017-07-27T17:31:52.051Z","1.1.1101-beta":"2017-07-28T16:02:41.650Z","1.1.1102-beta":"2017-07-28T16:03:22.262Z","1.1.1103":"2017-07-28T16:49:43.669Z","1.1.1104-beta":"2017-07-28T20:47:01.228Z","1.1.1105-beta":"2017-07-31T13:57:32.261Z","1.1.1106-beta":"2017-07-31T13:58:18.603Z","1.1.1107-beta":"2017-07-31T14:06:24.454Z","1.1.1108-beta":"2017-07-31T14:47:53.544Z","1.1.1109-beta":"2017-07-31T14:57:03.251Z","1.1.1110-beta":"2017-08-01T21:58:54.545Z","1.1.1111-beta":"2017-08-02T13:40:37.419Z","1.1.1112-beta":"2017-08-02T14:08:53.247Z","1.1.1113-beta":"2017-08-02T16:07:20.546Z","1.1.1114-beta":"2017-08-02T16:26:07.863Z","1.1.1115-beta":"2017-08-02T16:32:24.918Z","1.1.1116-beta":"2017-08-02T17:58:24.765Z","1.1.1117-beta":"2017-08-02T20:38:10.212Z","1.1.1118-beta":"2017-08-02T22:35:23.159Z","1.1.1119":"2017-08-04T16:33:41.382Z","2.0.1120-beta":"2017-08-06T23:24:37.147Z","1.1.1125":"2017-08-07T12:33:11.229Z","1.1.1122":"2017-08-07T12:34:28.194Z","1.1.1121":"2017-08-07T12:37:05.214Z","1.1.1127":"2017-08-07T12:37:34.659Z","1.1.1123":"2017-08-07T12:40:54.110Z","1.1.1126":"2017-08-07T12:44:59.095Z","2.0.1128-beta":"2017-08-07T17:44:12.049Z","2.0.1129":"2017-08-07T17:52:33.202Z","2.0.1130-beta":"2017-08-07T19:11:19.230Z","2.0.1131-beta":"2017-08-07T19:40:18.923Z","2.0.1132-beta":"2017-08-08T15:31:04.423Z","2.0.1133":"2017-08-08T15:36:14.931Z","2.0.1134-beta":"2017-08-08T20:07:37.010Z","2.0.1135-beta":"2017-08-08T21:37:14.269Z","2.0.1136":"2017-08-11T15:47:07.375Z","2.0.1137-beta":"2017-08-11T20:50:13.638Z","2.0.1138-beta":"2017-08-11T21:30:13.432Z","2.0.1139-beta":"2017-08-11T21:34:54.934Z","2.0.1140-beta":"2017-08-11T21:51:31.392Z","2.0.1141":"2017-08-13T23:33:22.074Z","2.0.1142-beta":"2017-08-14T16:13:23.876Z","2.0.1143-beta":"2017-08-14T16:35:47.203Z","2.0.1144-beta":"2017-08-14T16:39:41.369Z","2.0.1145-beta":"2017-08-14T16:46:21.687Z","2.0.1146":"2017-08-14T17:01:42.762Z","2.0.1147-beta":"2017-08-14T17:04:56.861Z","2.0.1149":"2017-08-14T17:45:17.955Z","2.0.1150-beta":"2017-08-14T18:13:37.883Z","3.0.1151-beta":"2017-08-14T19:22:28.131Z","3.0.1152":"2017-08-14T19:57:42.606Z","3.0.1153-beta":"2017-08-15T18:09:06.425Z","3.0.1154":"2017-08-15T18:34:45.030Z","3.0.1155-beta":"2017-08-15T19:11:26.709Z","3.0.1156":"2017-08-15T19:35:36.719Z","3.0.1157":"2017-08-15T20:31:13.218Z","3.0.1158-beta":"2017-08-15T20:55:04.558Z","3.0.1159-beta":"2017-08-15T23:14:35.210Z","3.0.1160-beta":"2017-08-16T16:11:51.920Z","3.0.1161-beta":"2017-08-16T16:19:50.081Z","3.0.1162-beta":"2017-08-16T16:24:12.882Z","3.0.1163":"2017-08-16T16:29:37.254Z","3.0.1164-beta":"2017-08-16T19:47:12.641Z","3.0.1165-beta":"2017-08-17T15:35:16.290Z","3.0.1166-beta":"2017-08-17T15:41:00.811Z","3.0.1167-beta":"2017-08-21T20:46:06.732Z","3.0.1168-beta":"2017-08-22T15:19:39.606Z","3.0.1169-beta":"2017-08-22T16:37:41.345Z","3.0.1170-beta":"2017-08-22T16:39:57.451Z","3.0.1171":"2017-08-22T16:55:00.642Z","3.0.1172-beta":"2017-08-22T17:07:40.037Z","3.0.1173":"2017-08-22T17:12:28.538Z","3.0.1174-beta":"2017-08-22T17:51:55.702Z","3.0.1175-beta":"2017-08-22T19:11:32.843Z","3.0.1176-beta":"2017-08-22T20:27:13.173Z","3.0.1177-beta":"2017-08-22T20:56:15.513Z","3.0.1178-beta":"2017-08-22T21:27:27.573Z","3.0.1179-beta":"2017-08-22T21:36:36.605Z","3.0.1180-beta":"2017-08-22T21:43:29.258Z","3.0.1181-beta":"2017-08-22T21:52:02.863Z","3.0.1182-beta":"2017-08-22T22:01:47.135Z","3.0.1183-beta":"2017-08-22T23:04:00.739Z","3.0.1184-beta":"2017-08-23T14:56:56.182Z","3.0.1185-beta":"2017-08-23T15:05:29.717Z","3.0.1186-beta":"2017-08-23T15:40:41.826Z","3.0.1187-beta":"2017-08-23T15:48:20.923Z","3.0.1188-beta":"2017-08-23T16:08:21.542Z","3.0.1189-beta":"2017-08-23T16:11:59.325Z","3.0.1190-beta":"2017-08-23T17:00:41.217Z","3.0.1191-beta":"2017-08-23T17:06:16.010Z","3.0.1192-beta":"2017-08-23T17:10:01.075Z","3.0.1193-beta":"2017-08-23T17:16:11.288Z","3.0.1194-beta":"2017-08-23T17:22:06.794Z","3.0.1195-beta":"2017-08-23T17:22:37.388Z","3.0.1196":"2017-08-23T18:43:47.951Z","3.0.1197-beta":"2017-08-23T22:23:50.713Z","3.0.1198-beta":"2017-08-23T22:52:27.269Z","3.0.1199":"2017-08-24T16:07:55.957Z","3.0.1200-beta":"2017-08-24T16:09:38.972Z","3.0.1201-beta":"2017-08-24T16:11:24.076Z","3.0.1202-beta":"2017-08-24T16:29:36.323Z","3.0.1203-beta":"2017-08-24T16:51:42.074Z","3.0.1204-beta":"2017-08-24T20:26:51.937Z","3.0.1205-beta":"2017-08-24T21:01:44.707Z","3.0.1206-beta":"2017-08-24T21:03:14.453Z","3.0.1207":"2017-08-24T21:06:00.801Z","3.0.1208":"2017-08-24T21:10:08.174Z","3.0.1209-beta":"2017-08-25T19:40:18.170Z","3.0.1210-beta":"2017-08-25T19:42:54.259Z","3.0.1211-beta":"2017-08-28T17:37:34.261Z","3.0.1212":"2017-08-28T18:06:09.865Z","3.0.1213":"2017-08-30T19:29:43.995Z","3.0.1214-beta":"2017-08-31T00:39:02.680Z","3.0.1215":"2017-08-31T00:44:40.389Z","3.0.1216-beta":"2017-08-31T13:49:09.729Z","3.0.1217":"2017-08-31T15:00:52.580Z","3.0.1219-beta":"2017-08-31T20:30:06.947Z","3.0.1220":"2017-09-01T15:12:26.393Z","3.0.1221-beta":"2017-09-02T17:00:48.314Z","3.0.1222-beta":"2017-09-03T17:24:16.841Z","3.0.1223-beta":"2017-09-04T22:52:03.613Z","3.0.1224":"2017-09-05T13:32:03.069Z","3.0.1225-beta":"2017-09-05T15:23:42.112Z","3.0.1227-beta":"2017-09-05T15:43:00.100Z","3.0.1228-beta":"2017-09-05T16:12:03.647Z","3.0.1229":"2017-09-05T16:40:46.602Z","3.0.1230-beta":"2017-09-05T16:59:39.628Z","3.0.1231-beta":"2017-09-06T14:49:30.857Z","3.0.1232-beta":"2017-09-06T14:59:57.397Z","3.0.1233":"2017-09-06T15:06:48.699Z","3.0.1235":"2017-09-06T15:15:03.453Z","3.0.1236-beta":"2017-09-06T15:42:38.769Z","3.0.1237-beta":"2017-09-06T19:07:29.693Z","3.0.1238":"2017-09-06T19:12:56.561Z","3.0.1239-beta":"2017-09-11T19:25:51.050Z","3.0.1240-beta":"2017-09-11T19:33:22.047Z","3.0.1241":"2017-09-11T19:38:41.734Z","3.0.1252-beta":"2017-09-13T20:06:11.743Z","3.0.1253-beta":"2017-09-13T20:15:15.538Z","3.0.1254-beta":"2017-09-13T20:20:50.198Z","3.0.1256-beta":"2017-09-13T20:26:37.860Z","3.0.1255":"2017-09-13T20:26:52.415Z","3.0.1257-beta":"2017-09-13T20:33:22.939Z","3.0.1258":"2017-09-13T20:35:46.436Z","3.0.1260":"2017-09-14T15:51:42.818Z","3.0.1261-beta":"2017-09-14T16:36:54.667Z","3.0.1262":"2017-09-14T18:11:27.427Z","3.0.1263-beta":"2017-09-18T21:03:38.197Z","3.0.1264":"2017-09-18T21:49:25.397Z","3.0.1270":"2017-09-22T15:33:39.754Z","3.0.1271-beta":"2017-09-22T18:47:29.996Z","3.0.1272-beta":"2017-09-26T15:46:59.199Z","3.0.1273-beta":"2017-09-26T15:49:03.081Z","3.0.1274-beta":"2017-09-26T18:34:19.180Z","3.0.1275":"2017-09-26T19:42:27.581Z","3.0.1276-beta":"2017-09-26T20:25:04.175Z","3.0.1277":"2017-09-26T20:31:57.421Z","3.0.1279-beta":"2017-09-27T15:43:26.591Z","3.0.1280-beta":"2017-09-27T21:35:20.105Z","3.0.1281":"2017-09-27T22:37:45.597Z","3.0.1282-beta":"2017-10-03T23:40:49.246Z","3.0.1283-beta":"2017-10-03T23:47:21.786Z","3.0.1284-beta":"2017-10-04T14:50:23.105Z","3.0.1285-beta":"2017-10-04T16:19:47.165Z","3.0.1286-beta":"2017-10-04T21:09:06.535Z","3.0.1287":"2017-10-04T21:26:45.871Z","3.0.1288-beta":"2017-10-05T14:56:29.745Z","3.0.1289-beta":"2017-10-05T15:37:00.747Z","3.0.1290-beta":"2017-10-05T16:18:21.101Z","3.0.1291-beta":"2017-10-05T16:18:55.576Z","3.0.1292-beta":"2017-10-05T16:42:15.118Z","3.0.1293-beta":"2017-10-05T16:44:55.377Z","3.0.1294-beta":"2017-10-05T17:48:13.900Z","3.0.1295-beta":"2017-10-05T19:13:58.965Z","3.0.1296-beta":"2017-10-05T19:40:17.592Z","3.0.1297-beta":"2017-10-05T19:40:36.210Z","3.0.1298-beta":"2017-10-05T19:48:39.977Z","3.0.1299-beta":"2017-10-05T19:51:00.494Z","3.0.1300-beta":"2017-10-05T20:28:13.309Z","3.0.1301-beta":"2017-10-05T20:43:51.090Z","3.1.1302-beta":"2017-10-05T21:20:24.746Z","3.1.1304-beta":"2017-10-05T21:20:28.277Z","3.0.1303":"2017-10-05T21:20:56.509Z","3.1.1305":"2017-10-05T21:43:56.989Z","3.1.1306":"2017-10-05T23:28:01.041Z","3.1.1307":"2017-10-05T23:29:04.463Z","3.1.1308-beta":"2017-10-06T18:37:46.427Z","3.1.1309":"2017-10-06T18:41:14.334Z","3.1.1310-beta":"2017-10-06T20:52:44.840Z","3.1.1311":"2017-10-06T20:59:20.246Z","3.1.1312-beta":"2017-10-06T21:35:55.967Z","3.1.1313":"2017-10-06T21:42:21.138Z","3.1.1314-beta":"2017-10-06T21:52:47.898Z","3.1.1315-beta":"2017-10-09T14:09:05.120Z","3.1.1316-beta":"2017-10-09T14:34:22.178Z","3.1.1317":"2017-10-09T14:39:46.970Z","3.1.1318-beta":"2017-10-09T15:15:15.297Z","3.1.1319-beta":"2017-10-09T17:15:45.241Z","3.1.1322":"2017-10-09T17:36:19.604Z","3.1.1320":"2017-10-09T17:37:01.141Z","3.1.1323-beta":"2017-10-09T17:45:37.339Z","3.1.1324":"2017-10-09T17:46:15.484Z","3.1.1325-beta":"2017-10-09T19:33:50.787Z","3.1.1326":"2017-10-09T20:50:07.616Z","3.1.1327-beta":"2017-10-09T21:09:25.439Z","3.1.1328":"2017-10-09T21:23:34.254Z","3.1.1329":"2017-10-09T23:42:36.196Z","3.1.1330-beta":"2017-10-10T16:55:26.479Z","3.1.1331-beta":"2017-10-10T16:58:38.052Z","3.1.1332":"2017-10-10T17:00:26.846Z","3.1.1333-beta":"2017-10-10T17:02:00.043Z","3.1.1334-beta":"2017-10-10T17:03:05.577Z","3.1.1335-beta":"2017-10-10T17:05:24.985Z","3.1.1336-beta":"2017-10-10T17:06:00.120Z","3.1.1337-beta":"2017-10-10T17:09:00.830Z","3.1.1338-beta":"2017-10-10T17:09:26.799Z","3.1.1339-beta":"2017-10-10T17:12:18.780Z","3.1.1340-beta":"2017-10-10T17:13:41.428Z","3.1.1342-beta":"2017-10-10T17:16:59.942Z","3.1.1341-beta":"2017-10-10T17:17:39.807Z","3.1.1343-beta":"2017-10-10T17:20:03.555Z","3.1.1344-beta":"2017-10-10T17:22:47.036Z","3.1.1345-beta":"2017-10-10T17:23:25.974Z","3.1.1346-beta":"2017-10-10T17:26:16.775Z","3.1.1347-beta":"2017-10-10T17:26:19.885Z","3.1.1349-beta":"2017-10-10T17:29:15.715Z","3.1.1348-beta":"2017-10-10T17:29:45.688Z","3.1.1350-beta":"2017-10-10T17:32:27.083Z","3.1.1351-beta":"2017-10-10T17:33:20.215Z","3.1.1352-beta":"2017-10-10T17:36:51.556Z","3.1.1353-beta":"2017-10-10T17:37:04.424Z","3.1.1354-beta":"2017-10-10T17:40:06.635Z","3.1.1355-beta":"2017-10-10T17:40:19.242Z","3.1.1357-beta":"2017-10-10T17:43:59.875Z","3.1.1356-beta":"2017-10-10T17:44:39.124Z","3.1.1358-beta":"2017-10-10T17:47:06.186Z","3.1.1359-beta":"2017-10-10T17:47:48.864Z","3.1.1361-beta":"2017-10-10T17:50:51.550Z","3.1.1360-beta":"2017-10-10T17:52:02.111Z","3.1.1362-beta":"2017-10-10T17:53:36.450Z","3.1.1363-beta":"2017-10-10T17:54:47.423Z","3.1.1364-beta":"2017-10-10T17:56:45.217Z","3.1.1365-beta":"2017-10-10T17:57:10.672Z","3.1.1366-beta":"2017-10-10T17:58:58.210Z","3.1.1368-beta":"2017-10-10T17:59:59.428Z","3.1.1367-beta":"2017-10-10T18:00:33.345Z","3.1.1369-beta":"2017-10-10T18:01:46.794Z","3.1.1371-beta":"2017-10-10T18:04:26.642Z","3.1.1370-beta":"2017-10-10T18:04:50.124Z","3.1.1372-beta":"2017-10-10T18:05:05.977Z","3.1.1373-beta":"2017-10-10T18:07:42.392Z","3.1.1375-beta":"2017-10-10T18:07:52.347Z","3.1.1374-beta":"2017-10-10T18:07:59.983Z","3.1.1376-beta":"2017-10-10T18:10:43.101Z","3.1.1378-beta":"2017-10-10T18:11:15.341Z","3.1.1377-beta":"2017-10-10T18:11:41.147Z","3.1.1379-beta":"2017-10-10T18:13:47.993Z","3.1.1381-beta":"2017-10-10T18:14:29.628Z","3.1.1380-beta":"2017-10-10T18:15:30.783Z","3.1.1382-beta":"2017-10-10T18:17:00.703Z","3.1.1383-beta":"2017-10-10T18:17:44.902Z","3.1.1384-beta":"2017-10-10T18:19:04.716Z","3.1.1386-beta":"2017-10-10T18:20:51.652Z","3.1.1385-beta":"2017-10-10T18:20:56.591Z","3.1.1387-beta":"2017-10-10T18:21:54.520Z","3.1.1389-beta":"2017-10-10T18:24:17.561Z","3.1.1388-beta":"2017-10-10T18:24:57.691Z","3.1.1390-beta":"2017-10-10T18:25:19.333Z","3.1.1391-beta":"2017-10-10T18:27:08.064Z","3.1.1392-beta":"2017-10-10T18:27:49.476Z","3.1.1393-beta":"2017-10-10T18:28:22.182Z","3.1.1394-beta":"2017-10-10T18:30:17.258Z","3.1.1395-beta":"2017-10-10T18:30:47.969Z","3.1.1396-beta":"2017-10-10T18:33:01.934Z","3.1.1397-beta":"2017-10-10T18:33:31.120Z","3.1.1398-beta":"2017-10-10T18:33:49.270Z","3.1.1399-beta":"2017-10-10T18:36:12.982Z","3.1.1400-beta":"2017-10-10T18:36:26.394Z","3.1.1401-beta":"2017-10-10T18:38:38.965Z","3.1.1403-beta":"2017-10-10T18:39:17.744Z","3.1.1402-beta":"2017-10-10T18:39:39.959Z","3.1.1405-beta":"2017-10-10T18:42:10.010Z","3.1.1404-beta":"2017-10-10T18:42:31.340Z","3.1.1406-beta":"2017-10-10T18:42:38.482Z","3.1.1407-beta":"2017-10-10T18:44:58.246Z","3.1.1408-beta":"2017-10-10T18:45:28.513Z","3.1.1409-beta":"2017-10-10T18:45:49.869Z","3.1.1410-beta":"2017-10-10T18:47:49.762Z","3.1.1411-beta":"2017-10-10T18:48:24.700Z","3.1.1412-beta":"2017-10-10T18:49:38.216Z","3.1.1414-beta":"2017-10-10T18:51:12.030Z","3.1.1413-beta":"2017-10-10T18:51:29.031Z","3.1.1415-beta":"2017-10-10T18:52:42.026Z","3.1.1417-beta":"2017-10-10T18:54:32.912Z","3.1.1418-beta":"2017-10-10T18:55:47.406Z","3.1.1416-beta":"2017-10-10T18:56:05.506Z","3.1.1420-beta":"2017-10-10T18:58:30.635Z","3.1.1421-beta":"2017-10-10T19:00:04.608Z","3.1.1419-beta":"2017-10-10T19:00:15.830Z","3.1.1422-beta":"2017-10-10T19:01:25.781Z","3.1.1423-beta":"2017-10-10T19:04:38.082Z","3.1.1425-beta":"2017-10-10T19:05:03.104Z","3.1.1424-beta":"2017-10-10T19:06:15.084Z","3.1.1426-beta":"2017-10-10T19:07:30.147Z","3.1.1427-beta":"2017-10-10T19:08:37.279Z","3.1.1428-beta":"2017-10-10T19:09:16.758Z","3.1.1429-beta":"2017-10-10T19:11:03.404Z","3.1.1430-beta":"2017-10-10T19:12:45.545Z","3.1.1431-beta":"2017-10-10T19:13:01.357Z","3.1.1432-beta":"2017-10-10T19:14:01.834Z","3.1.1434-beta":"2017-10-10T19:16:07.633Z","3.1.1433-beta":"2017-10-10T19:16:18.680Z","3.1.1435-beta":"2017-10-10T19:18:53.162Z","3.1.1436":"2017-10-10T19:18:57.554Z","3.1.1437-beta":"2017-10-10T19:19:29.129Z","3.1.1438-beta":"2017-10-10T19:22:21.939Z","3.1.1440-beta":"2017-10-10T19:22:25.453Z","3.1.1439-beta":"2017-10-10T19:22:36.933Z","3.1.1441-beta":"2017-10-10T19:22:54.618Z","3.1.1443-beta":"2017-10-10T19:27:48.531Z","3.1.1442-beta":"2017-10-10T19:28:04.778Z","3.1.1444-beta":"2017-10-10T19:28:22.363Z","3.1.1445-beta":"2017-10-10T19:32:03.237Z","3.1.1446-beta":"2017-10-10T19:42:10.517Z","3.1.1451-beta":"2017-10-10T20:23:26.285Z","3.1.1453-beta":"2017-10-10T20:27:54.872Z","3.1.1452-beta":"2017-10-10T20:28:32.014Z","3.1.1454-beta":"2017-10-10T20:30:58.902Z","3.1.1455-beta":"2017-10-10T20:32:00.113Z","3.1.1456-beta":"2017-10-10T20:34:49.313Z","3.1.1457-beta":"2017-10-10T20:35:03.797Z","3.1.1458-beta":"2017-10-10T20:37:32.645Z","3.1.1459-beta":"2017-10-10T20:38:45.732Z","3.1.1460-beta":"2017-10-10T20:41:19.710Z","3.1.1461-beta":"2017-10-10T20:42:45.955Z","3.1.1462-beta":"2017-10-10T20:44:29.293Z","3.1.1464-beta":"2017-10-10T20:47:35.441Z","3.1.1463-beta":"2017-10-10T20:48:27.531Z","3.1.1465-beta":"2017-10-10T20:51:56.269Z","3.1.1466-beta":"2017-10-10T20:52:44.297Z","3.1.1467-beta":"2017-10-10T20:54:44.429Z","3.1.1468-beta":"2017-10-10T20:56:29.793Z","3.1.1469-beta":"2017-10-10T20:57:35.393Z","3.1.1471-beta":"2017-10-10T20:59:56.381Z","3.1.1470-beta":"2017-10-10T21:00:13.207Z","3.1.1472-beta":"2017-10-10T21:00:55.301Z","3.1.1474-beta":"2017-10-10T21:04:03.419Z","3.1.1473-beta":"2017-10-10T21:04:07.286Z","3.1.1475-beta":"2017-10-10T21:04:37.198Z","3.1.1476":"2017-10-10T21:06:15.108Z","3.1.1477-beta":"2017-10-10T21:07:20.967Z","3.1.1478-beta":"2017-10-10T21:07:31.763Z","3.1.1479-beta":"2017-10-10T21:09:13.158Z","3.1.1480-beta":"2017-10-10T21:09:36.926Z","3.1.1481-beta":"2017-10-10T21:10:32.131Z","3.1.1482-beta":"2017-10-10T21:11:37.987Z","3.1.1483-beta":"2017-10-10T21:12:37.154Z","3.1.1485-beta":"2017-10-10T21:13:36.282Z","3.1.1484-beta":"2017-10-10T21:15:02.633Z","3.1.1486-beta":"2017-10-10T21:15:27.394Z","3.1.1487-beta":"2017-10-10T21:15:49.524Z","3.1.1488-beta":"2017-10-10T21:16:55.138Z","3.1.1489-beta":"2017-10-10T21:18:32.385Z","3.1.1491-beta":"2017-10-10T21:20:29.501Z","3.1.1492-beta":"2017-10-10T21:20:52.858Z","3.1.1490-beta":"2017-10-10T21:20:56.301Z","3.1.1494-beta":"2017-10-10T21:23:59.668Z","3.1.1493-beta":"2017-10-10T21:24:20.100Z","3.1.1495-beta":"2017-10-10T21:24:39.818Z","3.1.1496-beta":"2017-10-10T21:26:12.959Z","3.1.1497-beta":"2017-10-10T21:27:18.252Z","3.1.1498-beta":"2017-10-10T21:27:41.055Z","3.1.1499-beta":"2017-10-10T21:28:12.989Z","3.1.1500-beta":"2017-10-10T21:30:06.726Z","3.1.1502-beta":"2017-10-10T21:31:56.645Z","3.1.1503-beta":"2017-10-10T21:32:34.806Z","3.1.1501-beta":"2017-10-10T21:32:55.598Z","3.1.1504-beta":"2017-10-10T21:35:42.631Z","3.1.1507-beta":"2017-10-10T21:35:58.417Z","3.1.1505-beta":"2017-10-10T21:36:17.625Z","3.1.1506-beta":"2017-10-10T21:36:35.331Z","3.1.1508-beta":"2017-10-10T21:38:43.280Z","3.1.1509-beta":"2017-10-10T21:38:47.061Z","3.1.1510-beta":"2017-10-10T21:39:19.075Z","3.1.1511-beta":"2017-10-10T21:40:21.377Z","3.1.1512-beta":"2017-10-10T21:40:45.379Z","3.1.1513-beta":"2017-10-10T21:42:25.340Z","3.1.1515-beta":"2017-10-10T21:43:13.664Z","3.1.1518":"2017-10-10T21:46:06.364Z","3.1.1520-beta":"2017-10-11T14:40:38.288Z","3.1.1521-beta":"2017-10-11T21:12:25.880Z","3.1.1522-beta":"2017-10-11T21:51:52.369Z","3.1.1523-beta":"2017-10-12T15:39:30.661Z","3.1.1524-beta":"2017-10-12T15:48:30.871Z","3.1.1525":"2017-10-12T15:52:24.539Z","3.1.1526-beta":"2017-10-12T19:21:22.557Z","3.1.1527-beta":"2017-10-12T22:11:38.129Z","3.1.1528":"2017-10-12T22:19:05.076Z","3.1.1529-beta":"2017-10-13T22:26:16.399Z","3.1.1530-beta":"2017-10-16T04:53:48.015Z","3.1.1531-beta":"2017-10-16T05:12:20.816Z","3.1.1532-beta":"2017-10-16T15:54:27.733Z","3.1.1533-beta":"2017-10-16T22:28:20.798Z","3.1.1534-beta":"2017-10-17T01:29:43.061Z","3.1.1535-beta":"2017-10-17T17:19:07.370Z","3.1.1536-beta":"2017-10-17T20:38:09.345Z","3.1.1537-beta":"2017-10-17T20:39:26.941Z","3.1.1538-beta":"2017-10-17T20:49:48.807Z","3.2.1539-beta":"2017-10-17T20:54:27.803Z","3.1.1540-beta":"2017-10-17T20:59:57.993Z","3.1.1541":"2017-10-17T21:10:42.804Z","3.1.1542-beta":"2017-10-17T23:57:04.808Z","3.1.1543":"2017-10-18T19:25:59.850Z","3.2.1544":"2017-10-18T21:59:43.875Z","3.2.1545-beta":"2017-10-18T22:53:20.110Z","3.2.1546-beta":"2017-10-19T11:41:12.872Z","3.2.1547":"2017-10-19T20:42:23.692Z","3.2.1548-beta":"2017-10-20T01:03:33.062Z","3.2.1549":"2017-10-20T01:05:48.402Z","3.2.1551-beta":"2017-10-20T15:04:58.867Z","3.2.1552-beta":"2017-10-20T18:32:14.069Z","3.2.1553":"2017-10-20T18:37:16.013Z","3.2.1554":"2017-10-20T20:31:09.992Z","3.2.1555":"2017-10-20T23:04:02.068Z","3.2.1556-beta":"2017-10-23T15:14:38.599Z","3.2.1557-beta":"2017-10-23T15:24:01.873Z","3.2.1558":"2017-10-23T15:29:38.319Z","3.2.1559-beta":"2017-10-23T16:11:19.422Z","3.2.1560-beta":"2017-10-23T16:20:18.203Z","3.2.1561":"2017-10-23T16:21:04.760Z","3.2.1562":"2017-10-23T17:39:23.541Z","3.2.1563-beta":"2017-10-24T15:57:00.719Z","3.2.1564":"2017-10-24T16:39:42.070Z","3.2.1566-beta":"2017-10-24T21:09:29.294Z","3.2.1567-beta":"2017-10-24T21:17:16.259Z","3.2.1568":"2017-10-24T22:03:38.671Z","3.2.1570-beta":"2017-10-25T00:51:40.488Z","3.2.1571-beta":"2017-10-25T17:17:14.042Z","3.2.1572":"2017-10-25T21:10:38.320Z","3.2.1573-beta":"2017-10-25T21:55:07.297Z","3.2.1574":"2017-10-25T23:14:24.429Z","3.2.1576-beta":"2017-10-26T17:21:33.428Z","3.2.1577":"2017-10-26T17:24:05.187Z","3.2.1578":"2017-10-26T23:03:57.080Z","3.2.1579":"2017-10-27T17:46:42.184Z","3.2.1580":"2017-10-27T18:03:07.530Z","3.2.1581-beta":"2017-10-30T16:38:54.194Z","3.2.1582":"2017-10-30T17:21:03.436Z","3.2.1583-beta":"2017-10-30T18:34:54.642Z","3.2.1584":"2017-10-30T19:01:54.628Z","3.2.1585-beta":"2017-10-30T22:00:24.230Z","3.2.1586-beta":"2017-10-31T02:09:42.791Z","3.2.1587-beta":"2017-10-31T13:30:32.385Z","3.2.1588-beta":"2017-10-31T16:09:43.468Z","3.2.1589":"2017-10-31T16:40:03.440Z","3.2.1590":"2017-10-31T18:16:18.113Z","3.2.1591":"2017-10-31T19:54:55.499Z","3.2.1592":"2017-10-31T20:20:17.754Z","3.2.1593-beta":"2017-11-01T00:45:38.758Z","3.2.1594-beta":"2017-11-01T16:35:13.091Z","3.3.1595-beta":"2017-11-02T00:30:24.990Z","3.2.1596-beta":"2017-11-02T01:27:06.911Z","3.2.1597-beta":"2017-11-02T01:33:22.417Z","3.2.1598":"2017-11-02T01:44:29.247Z","3.2.1600":"2017-11-02T02:31:16.407Z","3.2.1601-beta":"2017-11-02T02:36:57.265Z","3.2.1602-beta":"2017-11-02T16:01:52.284Z","3.2.1603-beta":"2017-11-02T16:10:51.301Z","3.2.1604-beta":"2017-11-02T16:34:59.739Z","3.2.1605-beta":"2017-11-02T16:44:17.333Z","3.2.1606":"2017-11-02T16:55:29.776Z","3.2.1607-beta":"2017-11-02T17:25:21.739Z","3.2.1608-beta":"2017-11-02T17:36:12.904Z","3.2.1609":"2017-11-02T17:45:26.309Z","3.3.1610":"2017-11-02T19:32:13.328Z","3.3.1612":"2017-11-02T21:27:32.990Z","3.3.1611":"2017-11-02T21:30:49.671Z","3.3.1613":"2017-11-02T22:05:52.605Z","3.3.1614":"2017-11-02T22:41:14.993Z","3.3.1619":"2017-11-02T23:17:37.575Z","3.3.1620":"2017-11-03T15:32:44.293Z","3.3.1621-beta":"2017-11-03T15:57:06.569Z","3.3.1622":"2017-11-03T16:03:06.707Z","3.3.1623-beta":"2017-11-04T20:02:40.421Z","3.3.1624":"2017-11-04T20:08:19.319Z","3.3.1629-beta":"2017-11-06T21:13:43.833Z","3.3.1630-beta":"2017-11-06T22:39:38.329Z","3.3.1631-beta":"2017-11-06T22:50:51.077Z","3.3.1632-beta":"2017-11-06T23:42:33.898Z","3.3.1633-beta":"2017-11-07T00:13:43.664Z","3.3.1634-beta":"2017-11-07T00:15:49.460Z","3.3.1635-beta":"2017-11-07T00:48:23.639Z","3.3.1636-beta":"2017-11-07T01:01:28.306Z","3.3.1637-beta":"2017-11-07T01:13:12.205Z","3.3.1638-beta":"2017-11-07T01:39:09.979Z","3.3.1639-beta":"2017-11-07T04:31:04.235Z","3.3.1640":"2017-11-07T04:43:00.867Z","3.3.1641-beta":"2017-11-08T18:41:46.311Z","3.3.1642-beta":"2017-11-08T19:04:14.610Z","3.3.1643-beta":"2017-11-08T19:34:53.867Z","3.3.1644":"2017-11-08T19:37:36.828Z","3.3.1645":"2017-11-08T19:54:22.615Z","3.3.1646-beta":"2017-11-08T21:55:59.340Z","3.3.1647-beta":"2017-11-08T22:52:18.631Z","3.3.1649":"2017-11-08T23:56:24.499Z","3.3.1650-beta":"2017-11-09T00:55:34.808Z","3.3.1651-beta":"2017-11-12T22:28:12.433Z","3.3.1654-beta":"2017-11-13T19:42:45.987Z","3.3.1658-beta":"2017-11-13T22:25:47.565Z","3.3.1659":"2017-11-13T22:32:41.720Z","3.3.1660":"2017-11-13T23:46:37.419Z","3.3.1661-beta":"2017-11-16T16:48:31.323Z","3.3.1662-beta":"2017-11-16T16:58:55.386Z","3.3.1663":"2017-11-16T17:09:32.789Z","3.3.1664":"2017-11-16T17:33:32.599Z","3.3.1665-beta":"2017-11-16T18:38:33.429Z","3.3.1666-beta":"2017-11-16T18:45:56.383Z","3.3.1667":"2017-11-16T18:59:04.916Z","3.3.1668-beta":"2017-11-16T19:00:02.187Z","3.3.1669":"2017-11-16T20:17:14.382Z","3.3.1670-beta":"2017-11-16T22:33:53.698Z","3.3.1671":"2017-11-16T22:56:08.936Z","3.3.1672-beta":"2017-11-20T18:56:37.203Z","3.3.1673":"2017-11-20T19:07:56.236Z","3.3.1674-beta":"2017-11-21T17:26:37.503Z","3.3.1675-beta":"2017-11-21T17:30:26.418Z","3.3.1676-beta":"2017-11-21T17:46:24.579Z","3.3.1679-beta":"2017-11-21T20:04:34.112Z","3.3.1680-beta":"2017-11-21T22:15:35.424Z","3.3.1681-beta":"2017-11-21T22:31:04.748Z","3.3.1682-beta":"2017-11-22T16:58:59.896Z","3.3.1683-beta":"2017-11-27T14:43:35.318Z","3.3.1684":"2017-11-27T15:49:16.372Z","3.3.1685":"2017-11-27T15:50:40.907Z","3.3.1686":"2017-11-27T15:51:25.079Z","3.3.1687":"2017-11-27T17:25:00.635Z","3.3.1688-beta":"2017-11-28T18:08:41.236Z","3.3.1689-beta":"2017-12-04T15:53:57.178Z","3.3.1690-beta":"2017-12-04T19:26:46.847Z","3.3.1691-beta":"2017-12-04T19:29:50.814Z","3.3.1692-beta":"2017-12-04T20:20:13.249Z","3.3.1693-beta":"2017-12-04T23:29:28.143Z","3.3.1694":"2017-12-05T14:23:42.008Z","3.3.1695":"2017-12-05T14:25:14.261Z","3.3.1697-beta":"2017-12-05T16:53:34.629Z","3.3.1698-beta":"2017-12-05T17:01:58.015Z","3.3.1699":"2017-12-05T19:34:27.788Z","3.3.1700":"2017-12-05T19:34:34.862Z","3.3.1702-beta":"2017-12-06T22:20:06.182Z","3.3.1703-beta":"2017-12-07T15:36:59.944Z","3.3.1704-beta":"2017-12-07T19:58:15.462Z","3.3.1705-beta":"2017-12-07T20:55:20.754Z","3.3.1706-beta":"2017-12-07T21:25:27.558Z","3.4.1707-beta":"2017-12-07T21:40:11.286Z","3.3.1708":"2017-12-07T22:50:19.148Z","3.3.1709-beta":"2017-12-08T00:47:24.056Z","3.3.1710":"2017-12-08T20:46:29.610Z","3.3.1711":"2017-12-11T19:49:38.989Z","3.4.1712-beta":"2017-12-11T20:57:20.160Z","3.3.1713-beta":"2017-12-11T21:14:23.591Z","3.4.1714-beta":"2017-12-11T21:23:44.788Z","3.3.1716-beta":"2017-12-12T14:39:40.325Z","3.3.1717":"2017-12-12T15:25:14.520Z","3.4.1718-beta":"2017-12-12T15:29:29.421Z","3.4.1719-beta":"2017-12-12T15:30:21.335Z","3.4.1720-beta":"2017-12-12T15:35:06.956Z","3.3.1721-beta":"2017-12-12T16:12:03.428Z","3.3.1726-beta":"2017-12-12T21:54:35.960Z","3.3.1729-beta":"2017-12-12T22:53:02.755Z","3.3.1730":"2017-12-12T22:58:39.467Z","3.3.1731-beta":"2017-12-12T23:07:44.407Z","3.3.1732":"2017-12-12T23:35:45.640Z","3.3.1733":"2017-12-13T00:53:42.793Z","3.3.1734-beta":"2017-12-13T03:54:28.376Z","3.3.1735":"2017-12-13T04:19:17.041Z","3.3.1736-beta":"2017-12-13T06:32:04.696Z","3.3.1737-beta":"2017-12-13T16:36:32.895Z","3.3.1738":"2017-12-13T16:46:15.316Z","3.3.1739-beta":"2017-12-13T17:18:04.130Z","3.3.1740-beta":"2017-12-13T17:21:07.483Z","3.3.1741":"2017-12-13T17:41:40.870Z","3.3.1742-beta":"2017-12-13T18:01:06.279Z","3.3.1743-beta":"2017-12-13T18:02:51.896Z","3.3.1744":"2017-12-13T19:09:14.144Z","3.3.1745-beta":"2017-12-13T20:18:41.052Z","3.3.1746":"2017-12-13T20:20:44.218Z","3.3.1747-beta":"2017-12-14T00:01:13.045Z","3.3.1748":"2017-12-14T00:09:37.288Z","3.3.1749":"2017-12-14T03:32:19.409Z","3.3.1750-beta":"2017-12-14T19:42:00.979Z","3.3.1752-beta":"2017-12-15T19:14:45.646Z","3.3.1753-beta":"2017-12-15T19:52:38.285Z","3.3.1754":"2017-12-15T19:52:56.997Z","3.3.1755-beta":"2017-12-15T19:53:42.928Z","3.3.1756":"2017-12-15T20:03:39.145Z","3.3.1757":"2017-12-15T20:06:42.063Z","3.3.1758-beta":"2017-12-16T17:15:18.613Z","3.3.1759-beta":"2017-12-16T17:17:26.428Z","3.3.1760":"2017-12-16T17:26:48.900Z","3.3.1761":"2017-12-16T18:06:43.390Z","3.3.1762-beta":"2017-12-18T22:24:03.240Z","3.3.1763-beta":"2017-12-18T23:45:06.917Z","3.3.1765":"2017-12-19T15:57:48.515Z","3.3.1764-beta":"2017-12-19T15:59:54.528Z","3.3.1766":"2017-12-19T16:15:07.832Z","3.4.1768-beta":"2017-12-19T22:28:25.984Z","3.3.1769-beta":"2017-12-19T23:04:47.806Z","3.3.1770-beta":"2017-12-19T23:07:05.311Z","3.3.1771":"2017-12-19T23:13:39.711Z","3.3.1772":"2017-12-20T18:21:42.598Z","3.3.1773-beta":"2017-12-20T20:33:36.017Z","3.3.1776-beta":"2017-12-21T19:10:33.148Z","3.3.1777":"2017-12-21T19:33:09.858Z","3.4.1778-beta":"2017-12-21T22:17:38.806Z","3.3.1779-beta":"2017-12-21T22:37:53.085Z","3.3.1780":"2017-12-21T23:21:13.028Z","3.3.1781-beta":"2017-12-21T23:33:00.245Z","4.3.1782-beta":"2017-12-22T18:05:26.625Z","4.3.1783-beta":"2017-12-22T18:08:59.280Z","4.3.1784":"2017-12-22T18:15:55.774Z","4.3.1785":"2017-12-22T18:21:27.769Z","4.4.1786-beta":"2017-12-22T21:38:42.834Z","4.3.1787":"2017-12-23T03:36:44.546Z","4.3.1788-beta":"2017-12-28T17:23:32.425Z","4.3.1789-beta":"2017-12-28T17:23:59.790Z","4.3.1790":"2017-12-28T17:31:11.222Z","4.3.1791-beta":"2017-12-28T18:15:58.310Z","4.3.1792-beta":"2017-12-29T15:23:37.938Z","4.3.1793":"2017-12-29T16:10:15.910Z","4.3.1794":"2017-12-29T17:00:21.244Z","4.3.1795-beta":"2017-12-29T19:22:58.879Z","4.3.1796-beta":"2017-12-29T19:38:50.548Z","4.3.1797":"2017-12-29T19:43:46.510Z","4.3.1798-beta":"2018-01-02T20:42:00.456Z","4.3.1799":"2018-01-03T15:28:23.392Z","4.3.1800-beta":"2018-01-03T21:33:25.728Z","4.3.1801":"2018-01-04T21:07:17.910Z","4.3.1803-beta":"2018-01-05T16:29:11.721Z","4.3.1804":"2018-01-05T16:38:24.746Z","4.3.1805-beta":"2018-01-05T20:01:44.685Z","4.3.1806-beta":"2018-01-05T20:17:44.173Z","4.3.1807":"2018-01-05T20:24:24.296Z","4.3.1809-beta":"2018-01-08T17:38:59.169Z","4.3.1810-beta":"2018-01-08T17:40:56.921Z","4.3.1811":"2018-01-08T18:55:24.339Z","4.4.1812-beta":"2018-01-09T19:48:31.381Z","4.5.1813-beta":"2018-01-09T19:57:17.254Z","4.3.1814-beta":"2018-01-09T21:43:25.360Z","4.3.1815":"2018-01-09T23:12:02.251Z","4.5.1816-beta":"2018-01-10T23:03:15.151Z","4.4.1817-beta":"2018-01-10T23:28:22.308Z","4.4.1818":"2018-01-12T16:54:23.499Z","4.5.1819-beta":"2018-01-12T17:05:27.069Z","4.4.1821":"2018-01-25T22:53:52.747Z","4.4.1822-beta":"2018-01-27T01:22:20.537Z","4.5.1823":"2018-01-29T14:13:45.106Z","4.5.1824-beta":"2018-01-29T15:16:44.400Z","4.5.1825-beta":"2018-01-29T18:57:25.452Z","4.5.1826-beta":"2018-01-29T21:33:17.279Z","4.5.1827":"2018-01-29T21:46:11.051Z","4.5.1828":"2018-01-31T15:45:34.027Z","4.6.1829-beta":"2018-02-01T18:39:04.325Z","4.6.1830-beta":"2018-02-01T19:30:52.878Z","4.6.1831-beta":"2018-02-01T22:55:14.212Z","4.6.1832":"2018-02-02T17:33:15.923Z","4.6.1833-beta":"2018-02-02T21:17:43.243Z","4.6.1834-beta":"2018-02-02T21:17:48.892Z","4.6.1835-beta":"2018-02-02T21:25:23.397Z","4.6.1837-beta":"2018-02-09T16:36:16.660Z","4.6.1838":"2018-02-09T19:28:34.990Z","4.6.1839-beta":"2018-02-09T20:43:42.150Z","4.6.1841-beta":"2018-02-09T21:08:33.931Z","4.6.1842-beta":"2018-02-09T21:41:28.998Z","4.6.1843":"2018-02-09T21:46:57.660Z","4.6.1844":"2018-02-09T21:48:19.018Z","4.6.1845-beta":"2018-02-09T21:53:13.412Z","4.6.1846-beta":"2018-02-09T22:05:23.705Z","4.6.1847":"2018-02-12T17:41:06.438Z","4.6.1848-beta":"2018-02-12T18:41:41.405Z","4.6.1849-beta":"2018-02-12T19:44:46.472Z","4.6.1852":"2018-02-13T17:08:31.614Z","4.6.1851":"2018-02-13T17:08:53.646Z","4.6.1853-beta":"2018-02-13T20:27:20.043Z","4.6.1854-beta":"2018-02-13T22:23:39.746Z","4.6.1855-beta":"2018-02-13T22:39:19.255Z","4.6.1856":"2018-02-13T22:45:01.122Z","4.6.1857":"2018-02-13T23:43:22.931Z","4.6.1858-beta":"2018-02-14T20:27:17.787Z","4.6.1860":"2018-02-15T18:36:08.119Z","4.6.1861-beta":"2018-02-16T23:27:44.033Z","4.6.1862-beta":"2018-02-20T17:49:50.055Z","4.6.1863":"2018-02-20T17:55:43.743Z","4.6.1865-beta":"2018-02-21T01:17:15.077Z","4.6.1866-beta":"2018-02-21T14:32:43.303Z","4.6.1867-beta":"2018-02-21T15:38:14.071Z","4.6.1868":"2018-02-21T16:17:34.152Z","4.6.1869-beta":"2018-02-21T16:50:45.001Z","4.6.1870-beta":"2018-02-21T19:50:24.580Z","4.6.1871-beta":"2018-02-21T21:27:06.060Z","4.6.1872-beta":"2018-02-21T21:33:32.849Z","4.6.1873":"2018-02-21T21:52:34.425Z","4.6.1874-beta":"2018-02-21T22:52:48.268Z","4.6.1876-beta":"2018-02-22T16:40:17.355Z","4.6.1878":"2018-02-22T16:56:31.707Z","4.6.1879-beta":"2018-02-22T18:48:56.994Z","4.6.1880-beta":"2018-02-22T19:29:56.904Z","4.6.1881":"2018-02-22T19:38:14.015Z","4.6.1882-beta":"2018-02-22T20:16:26.308Z","4.6.1884":"2018-02-23T01:06:04.359Z","4.6.1885":"2018-02-23T01:06:12.002Z","4.6.1886-beta":"2018-02-23T01:14:49.156Z","4.6.1887":"2018-02-23T01:21:52.928Z","4.6.1889":"2018-02-23T01:22:49.103Z","4.6.1890-beta":"2018-02-23T15:43:36.809Z","4.6.1891-beta":"2018-02-23T19:34:19.507Z","4.6.1892-beta":"2018-02-23T21:02:13.664Z","4.6.1893-beta":"2018-02-23T21:30:15.604Z","4.6.1896-beta":"2018-02-26T16:08:27.432Z","4.6.1897-beta":"2018-02-26T16:14:28.131Z","4.6.1898":"2018-02-26T16:53:24.462Z","4.6.1899-beta":"2018-02-26T17:51:48.629Z","4.6.1900-beta":"2018-02-26T19:51:17.991Z","4.6.1901-beta":"2018-02-26T22:16:56.438Z","4.6.1902-beta":"2018-02-26T23:21:33.617Z","4.6.1903-beta":"2018-02-27T15:41:42.703Z","4.6.1904-beta":"2018-02-27T16:49:41.753Z","4.6.1905-beta":"2018-02-27T17:09:23.843Z","4.6.1906":"2018-02-27T18:38:00.429Z","4.6.1907-beta":"2018-02-27T18:42:14.393Z","4.6.1908":"2018-02-27T19:16:55.689Z","4.6.1909":"2018-02-27T20:01:17.281Z","4.6.1910-beta":"2018-02-27T22:53:01.384Z","4.6.1911-beta":"2018-02-28T15:50:21.826Z","4.6.1912-beta":"2018-02-28T19:40:05.828Z","4.6.1914":"2018-02-28T21:03:25.661Z","4.6.1913-beta":"2018-02-28T21:04:04.065Z","5.0.1915-beta":"2018-02-28T21:15:38.324Z","4.6.1916-beta":"2018-03-01T02:17:52.089Z","4.6.1917-beta":"2018-03-01T02:46:07.364Z","4.6.1919":"2018-03-01T17:04:34.994Z","4.6.1918":"2018-03-01T17:05:16.327Z","4.6.1920-beta":"2018-03-01T22:38:43.157Z","4.6.1921":"2018-03-01T22:49:23.330Z","4.6.1922-beta":"2018-03-05T19:58:09.548Z","4.6.1923-beta":"2018-03-05T22:30:47.393Z","4.6.1924":"2018-03-05T22:32:35.316Z","4.6.1925-beta":"2018-03-05T22:58:00.647Z","4.6.1927":"2018-03-06T16:48:15.718Z","4.6.1926-beta":"2018-03-06T16:49:14.724Z","4.6.1928":"2018-03-06T16:52:40.571Z","4.6.1929-beta":"2018-03-06T17:13:29.387Z","4.6.1930":"2018-03-06T17:28:56.131Z","4.6.1931-beta":"2018-03-06T17:33:08.587Z","4.6.1932-beta":"2018-03-06T17:37:38.226Z","4.6.1933":"2018-03-06T19:05:27.162Z","4.6.1934-beta":"2018-03-06T21:04:26.220Z","4.6.1935-beta":"2018-03-06T21:30:26.690Z","4.6.1936":"2018-03-06T21:54:02.417Z","4.6.1937":"2018-03-06T21:55:16.696Z","4.6.1938":"2018-03-06T21:55:24.180Z","4.6.1939-beta":"2018-03-06T22:04:10.098Z","4.6.1940":"2018-03-06T22:14:58.683Z","4.6.1941-beta":"2018-03-06T22:35:48.976Z","4.6.1942":"2018-03-06T22:54:55.055Z","4.6.1943-beta":"2018-03-07T20:32:15.431Z","4.6.1952":"2018-03-09T15:30:43.322Z","4.6.1953-beta":"2018-03-09T16:33:54.912Z","4.6.1954":"2018-03-09T17:01:09.203Z","4.6.1955":"2018-03-09T20:51:53.405Z","4.6.1956-beta":"2018-03-12T01:27:48.037Z","4.6.1957-beta":"2018-03-12T17:06:14.032Z","4.6.1958":"2018-03-12T18:38:01.636Z","4.6.1959-beta":"2018-03-12T18:42:48.660Z","4.6.1960":"2018-03-12T18:59:30.962Z","4.6.1961-beta":"2018-03-12T19:59:08.196Z","4.6.1962":"2018-03-12T20:56:17.644Z","4.6.1963":"2018-03-12T21:46:44.108Z","4.6.1964-beta":"2018-03-12T22:19:19.206Z","4.6.1965-beta":"2018-03-12T22:42:41.360Z","4.6.1966-beta":"2018-03-12T22:58:01.563Z","4.6.1967-beta":"2018-03-12T23:19:11.178Z","4.6.1968-beta":"2018-03-13T20:27:55.812Z","4.6.1969-beta":"2018-03-13T20:31:33.848Z","4.6.1970":"2018-03-13T20:47:40.504Z","4.6.1971":"2018-03-14T13:23:45.003Z","4.6.1972-beta":"2018-03-14T14:11:50.878Z","4.6.1973":"2018-03-14T14:46:05.591Z","4.6.1974-beta":"2018-03-14T17:12:53.924Z","4.6.1975-beta":"2018-03-14T18:14:58.312Z","4.6.1978":"2018-03-14T18:38:44.872Z","4.6.1979-beta":"2018-03-14T18:56:14.556Z","4.6.1980-beta":"2018-03-14T21:42:45.142Z","4.6.1981-beta":"2018-03-14T22:08:33.725Z","4.6.1982":"2018-03-14T22:33:50.792Z","4.6.1983-beta":"2018-03-14T22:42:32.446Z","4.6.1985-beta":"2018-03-14T23:11:34.601Z","4.6.1986":"2018-03-14T23:15:14.789Z","4.6.1987-beta":"2018-03-14T23:24:13.779Z","4.6.1988-beta":"2018-03-14T23:32:58.219Z","4.6.1989":"2018-03-15T14:49:34.139Z","4.6.1990":"2018-03-15T15:43:38.568Z","4.6.1991-beta":"2018-03-15T17:46:30.011Z","4.6.1993-beta":"2018-03-16T15:18:29.962Z","4.6.1994-beta":"2018-03-16T18:50:41.903Z","4.6.1995-beta":"2018-03-16T19:21:48.502Z","4.6.1996":"2018-03-16T19:38:35.173Z","4.6.1997-beta":"2018-03-16T20:37:51.475Z","4.6.1998-beta":"2018-03-16T22:19:58.521Z","4.6.2001":"2018-03-19T16:39:54.046Z","4.7.2002-beta":"2018-03-19T17:29:16.009Z","4.7.2003-beta":"2018-03-19T19:11:34.136Z","4.7.2004":"2018-03-19T19:20:12.196Z","4.7.2005":"2018-03-19T20:14:49.234Z","4.7.2006-beta":"2018-03-20T20:49:32.412Z","4.7.2007":"2018-03-20T20:52:29.188Z","4.7.2009-beta":"2018-03-21T18:29:31.190Z","4.7.2013-beta":"2018-03-21T19:29:50.921Z","4.7.2014":"2018-03-21T19:35:15.454Z","4.7.2015-beta":"2018-03-21T20:28:27.150Z","4.7.2016-beta":"2018-03-21T20:34:05.441Z","4.7.2017-beta":"2018-03-21T20:45:53.681Z","4.7.2018-beta":"2018-03-21T20:49:49.071Z","4.7.2019":"2018-03-21T20:59:22.988Z","4.7.2020-beta":"2018-03-21T21:15:07.890Z","4.7.2021-beta":"2018-03-21T21:23:12.832Z","4.7.2022-beta":"2018-03-21T21:26:37.622Z","4.7.2023-beta":"2018-03-21T21:52:53.495Z","4.7.2024-beta":"2018-03-21T21:53:48.169Z","4.7.2025-beta":"2018-03-21T22:33:15.213Z","4.7.2026":"2018-03-21T23:59:21.577Z","4.7.2027-beta":"2018-03-22T00:29:45.861Z","4.7.2028-beta":"2018-03-22T14:10:44.686Z","4.7.2029":"2018-03-22T15:09:26.894Z","4.7.2030":"2018-03-22T19:46:47.157Z","4.7.2031-beta":"2018-03-23T20:53:40.124Z","4.7.2032":"2018-03-23T21:14:17.055Z","4.7.2033-beta":"2018-03-26T09:06:06.579Z","4.7.2034-beta":"2018-03-26T14:29:34.789Z","4.7.2035-beta":"2018-03-26T14:38:03.731Z","4.7.2036-beta":"2018-03-26T16:35:49.927Z","4.7.2038-beta":"2018-03-26T19:16:51.089Z","4.7.2039-beta":"2018-03-26T19:45:22.595Z","4.7.2040-beta":"2018-03-26T21:12:07.703Z","4.7.2041-beta":"2018-03-26T22:41:35.285Z","4.7.2042":"2018-03-27T10:33:04.894Z","4.7.2043-beta":"2018-03-27T19:06:30.501Z","4.7.2044":"2018-03-27T19:47:55.107Z","4.7.2045-beta":"2018-03-28T14:44:59.636Z","4.7.2046-beta":"2018-03-28T18:29:56.482Z","4.7.2047-beta":"2018-03-29T19:15:54.052Z","4.7.2048-beta":"2018-03-29T21:11:16.978Z","4.7.2049-beta":"2018-03-29T23:36:15.126Z","4.7.2050-beta":"2018-03-29T23:41:59.333Z","4.7.2051-beta":"2018-03-29T23:46:08.049Z","4.7.2052-beta":"2018-03-29T23:50:56.491Z","4.7.2053":"2018-03-29T23:51:42.271Z","4.7.2054":"2018-03-30T00:00:19.725Z","4.7.2055-beta":"2018-03-30T16:20:39.753Z","4.7.2056":"2018-03-30T16:25:02.873Z","4.7.2057-beta":"2018-04-02T14:58:04.703Z","4.7.2058":"2018-04-02T16:12:09.581Z","4.7.2059":"2018-04-03T15:43:32.892Z","4.7.2060-beta":"2018-04-03T22:54:15.997Z","4.7.2062-beta":"2018-04-03T23:32:14.181Z","4.7.2063":"2018-04-04T17:01:00.748Z","4.7.2065-beta":"2018-04-04T20:43:36.190Z","4.7.2066-beta":"2018-04-04T21:52:46.053Z","4.7.2067":"2018-04-05T16:22:37.459Z","4.7.2068-beta":"2018-04-05T17:43:26.455Z","4.7.2070-beta":"2018-04-05T18:20:32.106Z","4.7.2071-beta":"2018-04-05T19:10:51.015Z","4.7.2073":"2018-04-06T14:22:58.966Z","4.7.2075-beta":"2018-04-06T16:10:46.784Z","4.7.2076":"2018-04-06T16:15:34.059Z","4.7.2077":"2018-04-06T17:04:37.906Z","4.8.2078-beta":"2018-04-06T21:32:08.032Z","4.8.2079":"2018-04-06T21:40:58.184Z","4.8.2080-beta":"2018-04-09T18:38:35.554Z","4.8.2082-beta":"2018-04-09T19:08:42.372Z","4.8.2083":"2018-04-09T20:00:03.462Z","4.8.2084-beta":"2018-04-09T20:34:50.327Z","4.8.2085-beta":"2018-04-09T20:52:18.595Z","4.8.2088-beta":"2018-04-10T19:26:50.098Z","4.8.2090":"2018-04-10T22:25:10.223Z","4.8.2089":"2018-04-10T22:26:01.521Z","4.8.2091-beta":"2018-04-11T14:37:59.460Z","4.8.2092":"2018-04-11T14:46:27.955Z","4.8.2093-beta":"2018-04-11T16:02:30.816Z","4.8.2094":"2018-04-11T16:31:42.807Z","4.8.2096-beta":"2018-04-11T17:29:37.540Z","4.8.2097-beta":"2018-04-12T03:07:40.899Z","4.8.2098-beta":"2018-04-12T03:20:03.113Z","4.8.2101-beta":"2018-04-12T10:24:23.241Z","4.8.2102-beta":"2018-04-12T17:17:52.272Z","4.8.2103":"2018-04-12T17:30:15.686Z","4.8.2104-beta":"2018-04-12T18:16:48.001Z","4.8.2105-beta":"2018-04-12T20:10:40.342Z","4.8.2106":"2018-04-13T15:56:14.787Z","4.8.2107-beta":"2018-04-16T12:44:58.549Z","4.8.2108-beta":"2018-04-16T13:22:13.510Z","4.8.2109-beta":"2018-04-16T14:44:31.934Z","4.8.2110":"2018-04-16T14:52:20.836Z","4.8.2111":"2018-04-17T12:09:50.055Z","4.8.2112-beta":"2018-04-18T01:00:33.676Z","4.8.2113-beta":"2018-04-18T01:01:35.645Z","4.8.2114-beta":"2018-04-18T14:31:59.913Z","4.8.2115-beta":"2018-04-18T15:24:36.087Z","4.8.2116-beta":"2018-04-18T17:36:46.823Z","4.8.2117-beta":"2018-04-18T19:22:38.416Z","4.8.2118-beta":"2018-04-18T21:47:19.044Z","4.8.2119-beta":"2018-04-18T22:13:08.847Z","4.8.2120":"2018-04-18T22:14:37.294Z","4.8.2121-beta":"2018-04-19T11:48:14.625Z","4.8.2122":"2018-04-19T11:57:47.684Z","4.8.2123-beta":"2018-04-20T11:03:34.192Z","4.8.2124":"2018-04-20T11:14:54.237Z","4.8.2125-beta":"2018-04-20T21:03:27.922Z","4.8.2126":"2018-04-20T21:13:28.723Z","4.8.2127":"2018-04-20T21:39:21.878Z","4.8.2128":"2018-04-20T21:47:18.622Z","4.8.2129-beta":"2018-04-23T16:50:09.718Z","4.8.2130-beta":"2018-04-23T21:57:17.062Z","4.8.2131-beta":"2018-04-23T22:00:52.372Z","4.8.2132":"2018-04-23T22:04:40.121Z","4.8.2133-beta":"2018-04-24T18:35:07.542Z","4.8.2134-beta":"2018-04-24T19:53:10.646Z","4.8.2135-beta":"2018-04-24T21:08:56.139Z","4.8.2136-beta":"2018-04-24T21:15:17.344Z","4.8.2137":"2018-04-24T21:22:02.398Z","4.8.2138-beta":"2018-04-24T22:24:00.988Z","4.8.2139-beta":"2018-04-25T16:29:58.292Z","4.8.2140-beta":"2018-04-25T16:38:08.613Z","4.8.2141-beta":"2018-04-25T20:19:49.960Z","4.8.2142":"2018-04-26T14:32:44.099Z","4.8.2143-beta":"2018-04-26T18:06:51.536Z","4.8.2144-beta":"2018-04-26T18:18:11.986Z","4.8.2145-beta":"2018-04-26T18:20:21.354Z","4.8.2146":"2018-04-26T18:28:03.023Z","4.8.2147":"2018-04-26T18:56:58.449Z","4.8.2148-beta":"2018-04-26T19:32:03.973Z","4.8.2149-beta":"2018-04-26T19:40:13.774Z","4.8.2150-beta":"2018-04-26T19:43:32.305Z","4.8.2151":"2018-04-26T19:47:31.687Z","4.8.2152-beta":"2018-04-27T12:01:56.191Z","4.8.2153":"2018-04-27T12:14:44.182Z","4.8.2154":"2018-04-27T16:48:51.721Z","4.8.2156-beta":"2018-04-27T21:37:06.197Z","4.8.2157":"2018-04-27T21:49:29.100Z","4.8.2158":"2018-04-27T22:42:35.580Z","4.8.2161-beta":"2018-04-28T10:03:34.285Z","4.8.2162":"2018-04-28T10:07:48.742Z","4.8.2163-beta":"2018-04-30T14:47:07.868Z","4.8.2164-beta":"2018-04-30T14:49:25.585Z","4.8.2165":"2018-04-30T14:53:24.649Z","4.8.2166-beta":"2018-04-30T15:34:04.342Z","4.8.2167":"2018-04-30T15:47:56.980Z","4.8.2168-beta":"2018-05-02T23:17:21.876Z","4.8.2169":"2018-05-02T23:21:10.654Z","4.8.2170-beta":"2018-05-03T15:12:17.302Z","4.8.2171":"2018-05-03T15:46:18.155Z","4.8.2172-beta":"2018-05-03T16:26:08.304Z","4.8.2173-beta":"2018-05-03T16:39:10.906Z","4.8.2174":"2018-05-03T16:55:29.626Z","4.8.2175":"2018-05-03T22:21:42.948Z","4.8.2176-beta":"2018-05-07T15:51:44.950Z","4.8.2177-beta":"2018-05-07T17:46:25.085Z","4.8.2178":"2018-05-07T18:50:19.692Z","4.8.2179-beta":"2018-05-07T19:21:02.997Z","4.8.2180":"2018-05-07T21:35:39.406Z","4.8.2181-beta":"2018-05-08T18:59:26.239Z","4.8.2182-beta":"2018-05-08T19:04:21.261Z","4.8.2184-beta":"2018-05-09T14:13:12.053Z","4.8.2185":"2018-05-09T14:17:43.072Z","4.8.2186":"2018-05-09T14:27:34.076Z","4.8.2187-beta":"2018-05-09T22:16:11.760Z","4.8.2188-beta":"2018-05-10T14:55:23.397Z","4.8.2189":"2018-05-10T15:42:30.466Z","4.8.2193-beta":"2018-05-10T21:23:25.216Z","4.8.2194-beta":"2018-05-10T21:24:34.297Z","4.8.2195-beta":"2018-05-11T15:02:04.399Z","4.8.2196-beta":"2018-05-11T17:59:19.224Z","4.8.2197-beta":"2018-05-11T18:23:49.212Z","4.8.2198":"2018-05-11T18:32:05.617Z","4.8.2200-beta":"2018-05-14T13:47:03.226Z","4.8.2201-beta":"2018-05-14T14:01:05.332Z","4.8.2202-beta":"2018-05-14T14:07:20.737Z","4.8.2203":"2018-05-14T14:16:40.998Z","4.8.2204":"2018-05-14T14:35:27.388Z","4.8.2205-beta":"2018-05-14T15:11:38.441Z","4.8.2206":"2018-05-14T15:37:10.304Z","4.8.2207-beta":"2018-05-14T16:06:31.237Z","4.8.2208":"2018-05-14T18:00:50.754Z","4.8.2209-beta":"2018-05-14T19:24:34.195Z","4.8.2210":"2018-05-14T19:30:29.473Z","4.8.2211-beta":"2018-05-14T19:33:40.274Z","4.8.2212-beta":"2018-05-14T20:35:49.741Z","4.8.2213-beta":"2018-05-14T20:55:39.498Z","4.8.2214":"2018-05-14T21:00:40.682Z","4.8.2215":"2018-05-14T21:31:09.912Z","4.8.2216-beta":"2018-05-15T20:42:02.274Z","4.8.2217":"2018-05-16T14:52:03.889Z","4.8.2218-beta":"2018-05-16T20:36:14.380Z","4.8.2219-beta":"2018-05-16T20:47:45.388Z","4.8.2220-beta":"2018-05-17T16:25:12.892Z","4.8.2221":"2018-05-17T16:30:41.455Z","4.8.2222":"2018-05-17T16:38:44.168Z","4.8.2223":"2018-05-18T14:26:35.040Z","4.8.2225-beta":"2018-05-19T02:11:00.270Z","4.8.2226-beta":"2018-05-19T02:13:31.466Z","4.8.2227":"2018-05-21T01:45:14.223Z","4.8.2228-beta":"2018-05-22T15:23:35.834Z","4.8.2229-beta":"2018-05-22T15:33:44.909Z","4.8.2230":"2018-05-22T15:46:13.568Z","4.8.2231-beta":"2018-05-22T15:46:53.351Z","4.8.2232":"2018-05-22T15:59:51.703Z","4.8.2233-beta":"2018-05-23T13:00:21.107Z","4.8.2234-beta":"2018-05-23T15:15:01.210Z","4.8.2235":"2018-05-23T18:45:57.905Z","4.8.2236-beta":"2018-05-23T19:46:05.427Z","4.8.2237":"2018-05-23T19:52:02.275Z","4.8.2238-beta":"2018-05-23T22:01:12.702Z","5.0.2239-beta":"2018-05-23T22:24:12.376Z","5.0.2240-beta":"2018-05-23T22:31:04.639Z","5.0.2241":"2018-05-23T22:42:25.903Z","4.9.2242":"2018-05-23T23:30:42.674Z","4.9.2243":"2018-05-24T16:06:41.037Z","4.9.2245":"2018-05-24T16:12:36.972Z","4.9.2244":"2018-05-24T16:12:58.165Z","4.9.2247-beta":"2018-05-24T19:05:22.278Z","4.9.2248-beta":"2018-05-24T20:00:19.013Z","4.9.2249-beta":"2018-05-24T20:22:30.119Z","4.9.2250-beta":"2018-05-25T14:36:50.229Z","4.9.2251-beta":"2018-05-25T14:56:18.885Z","4.9.2252":"2018-05-25T15:08:04.345Z","4.9.2253-beta":"2018-05-25T15:40:43.407Z","4.9.2254":"2018-05-25T16:35:35.297Z","4.9.2255":"2018-05-29T15:03:14.450Z","4.9.2257-beta":"2018-05-30T20:22:14.026Z","4.9.2258-beta":"2018-05-30T20:45:39.095Z","4.9.2259-beta":"2018-05-31T19:30:33.618Z","4.9.2260":"2018-05-31T20:55:36.612Z","4.9.2261-beta":"2018-05-31T20:59:04.920Z","4.9.2262-beta":"2018-05-31T22:10:54.003Z","4.9.2263":"2018-05-31T22:40:30.498Z","4.9.2264":"2018-06-01T15:39:10.845Z","4.9.2265-beta":"2018-06-01T15:44:37.530Z","4.9.2266":"2018-06-01T18:48:22.743Z","4.9.2267":"2018-06-01T19:21:26.050Z","4.9.2268-beta":"2018-06-01T20:38:06.903Z","4.9.2269":"2018-06-01T20:44:42.593Z","4.9.2270-beta":"2018-06-01T20:49:41.588Z","4.9.2271-beta":"2018-06-01T21:10:37.722Z","4.9.2272-beta":"2018-06-01T21:28:06.583Z","4.9.2273":"2018-06-01T21:29:32.726Z","4.9.2274-beta":"2018-06-01T21:55:09.789Z","4.9.2275":"2018-06-02T18:56:57.904Z","4.9.2276-beta":"2018-06-04T14:39:29.079Z","4.9.2277":"2018-06-04T14:50:12.288Z","4.10.2278-beta":"2018-06-04T19:37:17.837Z","4.9.2279-beta":"2018-06-04T19:41:06.012Z","4.10.2280-beta":"2018-06-04T19:45:24.688Z","4.10.2282-beta":"2018-06-04T21:16:31.624Z","4.10.2283":"2018-06-04T21:49:17.222Z","4.10.2285-beta":"2018-06-05T14:38:24.727Z","4.10.2286":"2018-06-05T14:53:08.395Z","4.10.2287-beta":"2018-06-05T15:06:33.199Z","4.10.2288":"2018-06-05T17:53:08.381Z","4.10.2289-beta":"2018-06-07T17:24:21.989Z","4.10.2290-beta":"2018-06-07T20:31:17.612Z","4.10.2291":"2018-06-08T15:09:13.055Z","4.10.2292-beta":"2018-06-12T01:00:55.147Z","4.10.2293-beta":"2018-06-12T01:02:10.887Z","4.10.2294":"2018-06-12T01:23:45.133Z","4.10.2295-beta":"2018-06-12T18:42:26.094Z","4.10.2296-beta":"2018-06-12T18:49:10.371Z","4.10.2297-beta":"2018-06-13T15:52:07.945Z","4.11.2298-beta":"2018-06-13T16:01:50.265Z","4.11.2299-beta":"2018-06-13T19:02:04.937Z","4.10.2300-beta":"2018-06-13T19:29:14.051Z","4.11.2301":"2018-06-13T19:53:26.837Z","4.11.2302":"2018-06-13T19:54:05.820Z","4.11.2303-beta":"2018-06-14T16:59:57.136Z","4.11.2304":"2018-06-14T20:17:18.839Z","4.11.2305-beta":"2018-06-15T16:31:16.044Z","4.12.2307-beta":"2018-06-15T16:33:21.895Z","4.11.2306-beta":"2018-06-15T16:35:33.705Z","5.0.2309-beta":"2018-06-15T17:29:35.473Z","4.11.2310-beta":"2018-06-15T18:34:56.533Z","4.11.2311-beta":"2018-06-15T18:54:22.632Z","4.11.2312-beta":"2018-06-18T14:20:47.717Z","4.11.2313-beta":"2018-06-18T15:08:13.169Z","4.11.2314":"2018-06-18T15:21:28.484Z","4.11.2315":"2018-06-18T16:59:45.452Z","4.11.2316-beta":"2018-06-18T17:26:36.379Z","4.12.2317-beta":"2018-06-18T17:43:12.825Z","4.11.2318":"2018-06-18T18:09:50.665Z","4.12.2319-beta":"2018-06-18T19:10:18.262Z","4.12.2320":"2018-06-18T19:28:05.131Z","5.0.2321-beta":"2018-06-19T02:15:13.726Z","5.0.2322-beta":"2018-06-19T02:17:29.789Z","4.12.2323-beta":"2018-06-19T15:49:32.885Z","4.12.2324-beta":"2018-06-19T16:42:41.079Z","4.12.2325":"2018-06-19T17:51:39.221Z","4.12.2326":"2018-06-19T17:57:53.825Z","4.13.2327-beta":"2018-06-19T19:29:18.517Z","5.0.2328-beta":"2018-06-19T23:40:28.831Z","5.0.2329":"2018-06-19T23:43:33.162Z","5.0.2330-beta":"2018-06-21T18:52:53.035Z","5.0.2331-beta":"2018-06-21T22:59:26.438Z","5.0.2332":"2018-06-22T19:23:07.041Z","5.0.2333-beta":"2018-06-25T15:45:25.299Z","5.0.2334":"2018-06-25T17:26:04.320Z","5.0.2335":"2018-06-25T20:07:30.969Z","5.0.2336-beta":"2018-06-26T20:33:22.410Z","5.0.2337":"2018-06-26T21:45:53.178Z","5.0.2339":"2018-06-27T15:31:18.489Z","5.0.2340-beta":"2018-06-29T18:40:40.988Z","5.0.2341-beta":"2018-07-02T18:06:04.050Z","5.0.2342-beta":"2018-07-03T10:03:23.943Z","5.0.2343":"2018-07-03T11:16:10.014Z","5.0.2344":"2018-07-03T14:17:14.225Z","5.0.2345-beta":"2018-07-03T16:06:23.998Z","5.0.2346":"2018-07-03T16:25:43.198Z","5.0.2347-beta":"2018-07-05T16:59:43.642Z","5.0.2348":"2018-07-05T17:13:06.267Z","5.0.2349-beta":"2018-07-06T18:42:40.669Z","5.0.2350-beta":"2018-07-06T19:20:44.804Z","5.0.2351-beta":"2018-07-06T20:07:22.834Z","5.0.2352-beta":"2018-07-09T15:16:55.203Z","5.0.2353":"2018-07-09T15:28:13.004Z","5.0.2354-beta":"2018-07-09T19:36:46.748Z","5.0.2355-beta":"2018-07-10T14:02:59.558Z","5.0.2356-beta":"2018-07-10T14:34:44.632Z","5.0.2357-beta":"2018-07-10T15:22:16.182Z","5.0.2358-beta":"2018-07-10T15:23:50.627Z","5.0.2359":"2018-07-10T15:32:56.204Z","5.0.2361-beta":"2018-07-10T15:51:57.016Z","5.0.2362-beta":"2018-07-10T16:03:29.651Z","5.0.2363-beta":"2018-07-10T16:05:06.611Z","5.0.2364-beta":"2018-07-10T21:30:22.662Z","5.0.2366-beta":"2018-07-11T14:51:58.247Z","5.0.2367":"2018-07-11T16:34:42.381Z","5.0.2368":"2018-07-11T19:28:18.510Z","5.0.2369-beta":"2018-07-12T02:06:35.539Z","5.0.2370":"2018-07-12T15:48:17.409Z","5.0.2371-beta":"2018-07-12T18:09:18.545Z","5.0.2372-beta":"2018-07-12T20:00:55.631Z","5.0.2373":"2018-07-12T20:06:15.950Z","5.0.2374-beta":"2018-07-13T00:15:46.667Z","5.0.2375":"2018-07-13T00:27:54.897Z","5.0.2377-beta":"2018-07-13T03:34:10.475Z","5.0.2379-beta":"2018-07-13T04:02:51.016Z","5.0.2378-beta":"2018-07-13T04:07:45.721Z","5.0.2381-beta":"2018-07-13T14:29:32.199Z","5.0.2382-beta":"2018-07-13T16:03:34.061Z","5.0.2383":"2018-07-13T16:08:37.993Z","5.0.2384-beta":"2018-07-13T20:41:36.202Z","5.0.2385-beta":"2018-07-13T21:12:26.718Z","5.0.2386-beta":"2018-07-16T00:24:43.486Z","5.0.2387-beta":"2018-07-16T13:48:26.202Z","5.0.2388":"2018-07-16T14:23:58.091Z","5.0.2389":"2018-07-16T14:44:09.943Z","5.0.2390":"2018-07-16T15:16:55.768Z","5.0.2391-beta":"2018-07-16T21:20:29.425Z","5.0.2392":"2018-07-16T21:25:43.338Z","5.1.2395-beta":"2018-07-17T00:25:18.416Z","5.1.2398-beta":"2018-07-17T21:54:41.378Z","5.0.2401-beta":"2018-07-18T14:58:11.088Z","5.0.2402-beta":"2018-07-18T15:00:01.585Z","5.0.2404-beta":"2018-07-18T18:48:15.692Z","5.0.2405-beta":"2018-07-18T19:03:48.109Z","5.0.2406-beta":"2018-07-18T20:05:02.886Z","5.0.2407-beta":"2018-07-18T20:08:46.391Z","5.0.2408-beta":"2018-07-18T20:41:57.092Z","5.0.2409-beta":"2018-07-18T20:42:25.921Z","5.0.2410-beta":"2018-07-18T20:48:05.685Z","5.0.2411-beta":"2018-07-18T21:02:44.962Z","5.0.2412-beta":"2018-07-18T21:40:33.712Z","5.0.2414-beta":"2018-07-18T21:51:04.411Z","5.1.2416-beta":"2018-07-18T23:35:00.497Z","5.1.2417":"2018-07-18T23:39:10.867Z","5.2.2418-beta":"2018-07-19T00:01:09.391Z","5.2.2419-beta":"2018-07-19T00:06:12.687Z","5.1.2420-beta":"2018-07-19T15:18:20.946Z","5.1.2421-beta":"2018-07-19T17:46:42.760Z","5.1.2422-beta":"2018-07-19T18:02:11.547Z","5.1.2423":"2018-07-20T00:38:02.110Z","5.1.2425-beta":"2018-07-20T17:02:45.746Z","5.1.2426":"2018-07-20T18:08:29.484Z","5.2.2427-beta":"2018-07-20T22:20:23.055Z","5.2.2428":"2018-07-21T01:19:00.595Z","5.2.2429":"2018-07-21T02:21:45.375Z","5.2.2430":"2018-07-21T02:35:50.981Z","5.2.2431-beta":"2018-07-23T15:51:12.896Z","5.2.2433-beta":"2018-07-23T18:31:13.826Z","5.2.2434":"2018-07-23T18:39:05.569Z","5.2.2435":"2018-07-23T20:47:25.362Z","5.2.2436-beta":"2018-07-23T21:49:09.095Z","5.2.2437-beta":"2018-07-23T22:06:20.498Z","5.2.2438-beta":"2018-07-24T18:26:01.364Z","5.2.2439":"2018-07-24T18:37:32.232Z","5.2.2440-beta":"2018-07-24T18:39:18.347Z","5.2.2441-beta":"2018-07-24T18:39:35.285Z","5.2.2442-beta":"2018-07-24T19:37:24.578Z","5.2.2443-beta":"2018-07-24T21:38:15.906Z","5.2.2444":"2018-07-24T22:17:56.283Z","5.2.2445":"2018-07-25T18:44:52.229Z","5.2.2446-beta":"2018-07-25T19:54:32.513Z","5.2.2447":"2018-07-25T20:10:13.239Z","5.2.2449-beta":"2018-07-26T17:06:46.012Z","5.2.2448-beta":"2018-07-26T17:07:36.609Z","5.2.2450":"2018-07-26T17:29:35.193Z","5.2.2451":"2018-07-26T17:30:01.193Z","5.2.2452-beta":"2018-07-26T18:55:02.385Z","5.2.2453-beta":"2018-07-26T20:53:24.659Z","5.2.2454-beta":"2018-07-27T01:02:52.778Z","5.2.2455-beta":"2018-07-27T02:14:04.125Z","6.0.2456-beta":"2018-07-27T02:23:52.897Z","6.0.2457-beta":"2018-07-27T02:29:41.620Z","6.0.2459":"2018-07-27T02:32:29.288Z","6.0.2460":"2018-07-27T02:49:32.767Z","6.0.2462":"2018-07-27T13:47:47.416Z","6.0.2464-beta":"2018-07-27T13:53:40.885Z","6.0.2465":"2018-07-27T13:58:01.779Z","6.0.2466-beta":"2018-07-27T15:51:29.057Z","6.0.2467-beta":"2018-07-27T16:43:42.082Z","6.0.2468":"2018-07-27T17:01:45.749Z","6.0.2470":"2018-08-02T23:58:58.890Z","6.0.2471-beta":"2018-08-03T19:23:03.000Z","6.0.2472-beta":"2018-08-03T19:37:55.730Z","6.0.2473":"2018-08-03T21:36:21.674Z","6.0.2474-beta":"2018-08-07T16:42:08.348Z","6.0.2475":"2018-08-07T17:06:34.129Z","6.0.2476-beta":"2018-08-08T16:09:45.847Z","6.0.2477":"2018-08-08T18:36:38.991Z","6.0.2478-beta":"2018-08-09T07:29:06.615Z","6.0.2479-beta":"2018-08-09T17:43:15.352Z","6.0.2480":"2018-08-09T19:25:33.809Z","6.0.2481":"2018-08-13T19:15:02.743Z","6.0.2482-beta":"2018-08-14T09:44:32.686Z","6.0.2485-beta":"2018-08-14T21:04:48.943Z","6.0.2486":"2018-08-14T21:16:29.058Z","6.0.2487-beta":"2018-08-14T21:35:11.260Z","6.0.2488":"2018-08-14T21:44:09.301Z","6.0.2489-beta":"2018-08-16T08:57:30.990Z","6.0.2490-beta":"2018-08-16T09:18:37.203Z","6.0.2491-beta":"2018-08-16T11:53:42.333Z","6.0.2492":"2018-08-16T14:14:40.974Z","6.0.2493-beta":"2018-08-17T12:58:38.869Z","6.0.2494":"2018-08-17T13:06:44.420Z","6.0.2495":"2018-08-21T07:42:55.179Z","0.0.0":"2018-08-22T12:00:50.801Z","6.0.2498-beta":"2018-08-23T08:55:41.587Z","6.0.2499":"2018-08-23T09:47:21.871Z","6.0.2502":"2018-08-24T01:24:13.988Z","6.0.2503-beta":"2018-08-24T21:29:29.202Z","6.0.2504-beta":"2018-08-24T21:31:03.422Z","6.0.2505-beta":"2018-08-27T22:25:43.786Z","6.0.2506-beta":"2018-08-29T11:27:58.910Z","6.0.2507":"2018-08-29T11:54:02.897Z","6.0.2508-beta":"2018-08-29T16:09:34.109Z","6.0.2511-beta":"2018-08-30T17:25:25.439Z","6.0.2513-beta":"2018-08-30T20:15:35.671Z","6.0.2514":"2018-08-30T20:21:24.363Z","6.0.2515-beta":"2018-08-31T15:45:01.476Z","6.0.2516-beta":"2018-08-31T15:56:36.026Z","6.0.2517":"2018-09-03T08:11:05.606Z","6.0.2518-beta":"2018-09-03T13:35:39.277Z","6.0.2519":"2018-09-03T13:43:05.313Z","6.0.2520-beta":"2018-09-04T15:51:04.807Z","6.0.2521-beta":"2018-09-04T15:58:27.914Z","6.0.2522":"2018-09-04T16:03:21.015Z","6.0.2523-beta":"2018-09-04T17:31:35.589Z","6.0.2524-beta":"2018-09-04T17:34:33.652Z","6.0.2525-beta":"2018-09-04T18:02:04.081Z","6.0.2526-beta":"2018-09-04T18:46:57.981Z","6.0.2527":"2018-09-04T19:01:07.806Z","6.0.2528-beta":"2018-09-04T20:13:28.057Z","6.0.2529-beta":"2018-09-04T20:18:42.719Z","6.0.2530":"2018-09-04T20:24:24.247Z","6.0.2531":"2018-09-05T00:28:51.852Z","6.0.2533-beta":"2018-09-05T14:38:58.174Z","6.0.2532-beta":"2018-09-05T14:39:33.150Z","6.0.2534":"2018-09-05T14:59:19.328Z","6.0.2535":"2018-09-05T15:32:03.247Z","6.0.2537-beta":"2018-09-07T17:40:02.259Z","6.0.2538":"2018-09-07T18:13:46.001Z","6.0.2539-beta":"2018-09-11T09:08:23.308Z","6.0.2540-beta":"2018-09-12T20:15:20.126Z","6.0.2541-beta":"2018-09-13T21:53:48.522Z","6.0.2542-beta":"2018-09-14T10:58:32.805Z","6.0.2543":"2018-09-14T15:02:26.051Z","6.0.2544":"2018-09-18T07:27:57.933Z","6.0.2545-beta":"2018-09-18T14:11:56.009Z","6.0.2546":"2018-09-18T14:25:57.409Z","6.0.2548-beta":"2018-09-19T17:58:56.568Z","6.0.2549-beta":"2018-09-20T21:41:57.502Z","6.0.2550":"2018-09-21T13:22:36.788Z","6.0.2551-beta":"2018-09-24T14:46:57.801Z","6.0.2552-beta":"2018-09-24T16:30:38.276Z","6.0.2553-beta":"2018-09-24T17:38:35.689Z","6.0.2554-beta":"2018-09-24T22:29:08.214Z","6.0.2555-beta":"2018-09-25T00:19:11.598Z","6.0.2556-beta":"2018-09-25T01:16:39.778Z","6.0.2557":"2018-09-25T14:59:39.269Z","6.0.2558-beta":"2018-09-26T16:45:55.670Z","6.0.2559-beta":"2018-09-26T16:50:10.265Z","6.0.2560-beta":"2018-09-27T16:04:21.282Z","6.0.2561-beta":"2018-09-27T16:05:46.802Z","6.0.2562":"2018-09-27T18:34:33.885Z","6.0.2563-beta":"2018-09-27T19:29:25.748Z","6.0.2564-beta":"2018-09-27T19:34:06.089Z","6.0.2565-beta":"2018-09-27T19:56:08.094Z","6.0.2566-beta":"2018-09-27T20:12:58.445Z","6.0.2567-beta":"2018-09-27T20:27:43.366Z","6.0.2568":"2018-09-27T20:32:51.755Z","6.0.2569-beta":"2018-09-28T00:08:19.483Z","6.0.2570-beta":"2018-09-28T08:25:25.352Z","6.0.2571":"2018-09-28T08:47:44.919Z","6.0.2572-beta":"2018-09-28T12:46:52.260Z","6.0.2573-beta":"2018-09-28T14:19:35.692Z","6.1.2575-beta":"2018-09-28T17:23:42.416Z","6.1.2574-beta":"2018-09-28T17:24:44.807Z","6.1.2576-beta":"2018-09-28T18:40:06.844Z","6.1.2577-beta":"2018-09-28T19:58:22.053Z","6.0.2578-beta":"2018-10-01T15:17:28.370Z","6.0.2579-beta":"2018-10-01T18:55:11.133Z","6.0.2580-beta":"2018-10-01T19:55:45.410Z","6.0.2581-beta":"2018-10-01T22:07:42.489Z","6.0.2582-beta":"2018-10-02T14:59:50.171Z","6.0.2583-beta":"2018-10-02T15:40:10.517Z","6.0.2584":"2018-10-02T15:57:55.811Z","6.1.2585":"2018-10-03T13:50:21.149Z","6.1.2586-beta":"2018-10-03T14:46:55.115Z","6.1.2587-beta":"2018-10-04T16:38:55.741Z","6.1.2588-beta":"2018-10-04T21:37:37.476Z","6.1.2589-beta":"2018-10-05T00:02:53.651Z","6.1.2590-beta":"2018-10-05T15:20:29.304Z","6.1.2591-beta":"2018-10-05T22:03:18.630Z","6.1.2593":"2018-10-08T16:47:53.194Z","6.1.2595-beta":"2018-10-08T18:30:46.464Z","6.1.2597":"2018-10-08T18:53:53.381Z","6.1.2596":"2018-10-08T18:54:07.948Z","6.1.2598":"2018-10-08T18:54:38.982Z","6.1.2599":"2018-10-08T20:08:43.055Z","6.1.2600-beta":"2018-10-09T19:51:30.654Z","6.1.2601":"2018-10-10T00:16:58.972Z","6.1.2602":"2018-10-10T00:24:34.577Z","6.1.2603-beta":"2018-10-12T15:30:25.758Z","6.1.2604-beta":"2018-10-12T20:30:02.238Z","6.1.2605":"2018-10-14T21:33:36.670Z","6.1.2607-beta":"2018-10-16T15:37:59.698Z","6.1.2608-beta":"2018-10-16T15:45:02.666Z","6.1.2609":"2018-10-16T15:56:01.231Z","6.1.2610-beta":"2018-10-18T18:12:36.332Z","6.1.2611-beta":"2018-10-18T18:43:09.989Z","6.1.2612-beta":"2018-10-18T19:11:12.086Z","6.1.2614-beta":"2018-10-18T19:17:06.367Z","6.1.2613-beta":"2018-10-18T19:18:39.044Z","6.1.2615-beta":"2018-10-18T19:27:29.593Z","6.1.2616-beta":"2018-10-18T20:26:46.666Z","6.1.2617-beta":"2018-10-19T14:45:37.319Z","6.1.2618-beta":"2018-10-19T15:28:58.977Z","6.1.2620-beta":"2018-10-19T16:19:57.703Z","6.1.2621-beta":"2018-10-19T18:03:53.751Z","6.1.2622-beta":"2018-10-19T18:13:28.350Z","6.1.2623-beta":"2018-10-22T19:00:25.661Z","6.1.2624-beta":"2018-10-22T19:35:12.038Z","6.1.2625":"2018-10-22T20:23:59.851Z","6.1.2626-beta":"2018-10-24T13:37:23.561Z","6.1.2627-beta":"2018-10-26T18:38:04.395Z","6.1.2628-beta":"2018-10-26T20:51:46.770Z","6.1.2629-beta":"2018-10-29T14:03:38.032Z","6.1.2630-beta":"2018-11-14T16:17:30.109Z","6.1.2631-beta":"2018-11-16T23:41:36.796Z","6.1.2632":"2018-11-19T15:52:16.884Z","6.1.2633-beta":"2018-11-23T12:27:02.220Z","6.1.2634-beta":"2018-11-23T12:28:51.142Z","6.1.2635":"2018-11-23T12:50:20.466Z","6.1.2636-beta":"2018-12-07T18:05:03.394Z","6.1.2637-beta":"2018-12-11T16:46:54.756Z","6.1.2638-beta":"2018-12-11T17:23:27.291Z","6.1.2639":"2018-12-11T22:28:26.135Z","6.1.2640":"2018-12-11T22:43:42.479Z","6.1.2641-beta":"2018-12-19T16:35:23.764Z","6.1.2642":"2018-12-19T19:28:29.580Z","6.1.2645-beta":"2019-01-15T19:02:24.149Z","6.1.2651":"2019-03-08T20:45:35.985Z","6.1.2":"2019-03-08T20:56:05.239Z","6.1.3-beta":"2019-03-08T21:58:57.530Z","6.1.4-beta":"2019-03-08T21:59:54.899Z","6.1.2653-beta":"2019-03-08T22:15:35.878Z","6.1.2654-beta":"2019-03-08T22:23:45.709Z","6.1.2656-beta":"2019-03-12T19:59:50.741Z","6.1.2657-beta":"2019-03-12T20:05:21.830Z","6.1.2658-beta":"2019-03-12T20:22:06.368Z","6.1.2660-beta":"2019-03-12T20:30:21.335Z","6.1.2661-beta":"2019-03-12T20:34:33.810Z","6.1.2662-beta":"2019-03-12T20:41:19.856Z","6.1.2664-beta":"2019-03-12T21:06:32.057Z","6.1.2665-beta":"2019-03-12T21:20:23.623Z","6.1.2666-beta":"2019-03-12T21:24:19.458Z","6.1.2667-beta":"2019-03-12T21:29:25.197Z","6.1.2668":"2019-03-12T21:38:01.759Z","6.1.2669-beta":"2019-03-12T21:42:41.464Z","6.1.2670-beta":"2019-03-12T21:51:14.046Z","6.1.2671-beta":"2019-03-12T22:01:05.145Z","6.1.2672-beta":"2019-03-12T22:04:39.325Z","6.1.2673-beta":"2019-03-12T22:17:48.176Z","6.1.2674-beta":"2019-03-13T13:17:14.747Z","6.1.2675-beta":"2019-03-13T13:20:33.027Z","6.1.2676-beta":"2019-03-13T14:12:52.671Z","6.1.2677-beta":"2019-03-13T14:41:02.904Z","6.1.2678-beta":"2019-03-13T14:55:56.176Z","6.1.2679-beta":"2019-03-13T15:06:43.638Z","6.1.2680-beta":"2019-03-13T17:03:22.371Z","6.1.2682":"2019-03-13T17:05:04.512Z","6.1.2683":"2019-03-13T17:15:59.489Z","6.1.2684-beta":"2019-03-13T20:20:50.681Z","6.1.2685-beta":"2019-03-14T14:20:13.950Z","6.1.2686-beta":"2019-03-14T15:18:18.456Z","6.1.2687-beta":"2019-03-14T15:19:15.257Z","6.1.2688":"2019-03-14T15:26:30.368Z","6.1.2689-beta":"2019-03-15T14:48:03.997Z","6.1.2690-beta":"2019-03-15T14:54:07.032Z","6.1.2691-beta":"2019-03-15T15:16:14.562Z","6.1.2692":"2019-03-15T15:23:24.293Z","6.1.2693":"2019-03-15T19:48:46.280Z","6.1.2695-beta":"2019-03-16T11:30:57.372Z","6.1.2696":"2019-03-18T10:07:50.466Z","6.1.2697-beta":"2019-03-18T16:29:33.505Z","6.1.2698-beta":"2019-03-18T17:30:24.577Z","6.1.2699-beta":"2019-03-18T17:33:26.335Z","6.1.2700-beta":"2019-03-18T18:50:36.439Z","6.1.2701-beta":"2019-03-18T20:14:27.713Z","6.1.2702":"2019-03-18T21:59:06.860Z","6.1.2703-beta":"2019-03-18T22:56:41.584Z","6.1.2704":"2019-03-19T21:56:44.900Z","6.1.2706-beta":"2019-03-21T15:28:58.217Z","6.1.2709":"2019-03-21T22:15:09.236Z","6.1.2717":"2019-03-22T20:17:14.709Z","6.1.2744-beta":"2019-04-01T15:05:42.690Z","6.1.2746-beta":"2019-04-01T19:46:01.927Z","6.1.2747-beta":"2019-04-01T20:14:52.702Z","6.1.2748-beta":"2019-04-01T22:38:05.040Z","6.1.2749-beta":"2019-04-01T23:53:49.058Z","6.1.2750-beta":"2019-04-02T01:53:38.284Z","6.1.2751-beta":"2019-04-02T02:47:28.899Z","6.1.2753-beta":"2019-04-02T17:25:59.180Z","6.1.2754-beta":"2019-04-03T14:29:32.647Z","6.1.2755":"2019-04-03T14:48:03.388Z","6.1.2756-beta":"2019-04-03T20:01:34.988Z","6.1.2757-beta":"2019-04-03T20:18:01.718Z","6.1.2758-beta":"2019-04-03T20:24:33.164Z","6.1.2759":"2019-04-03T20:41:42.012Z","6.1.2760-beta":"2019-04-03T20:44:26.134Z","6.1.2761-beta":"2019-04-05T15:31:53.251Z","6.1.2763":"2019-04-05T20:05:07.512Z","6.1.2764-beta":"2019-04-10T20:35:36.000Z","6.1.2777-beta":"2019-04-11T21:52:36.259Z","6.1.2778-beta":"2019-04-11T21:57:16.237Z","6.1.2779-beta":"2019-04-15T15:49:07.167Z","6.1.2780-beta":"2019-04-15T15:54:36.505Z","7.0.2781-beta":"2019-04-15T17:06:25.335Z","6.1.2782-beta":"2019-04-15T17:35:09.268Z","6.1.2783-beta":"2019-04-15T18:04:36.875Z","6.1.2784-beta":"2019-04-15T18:38:03.368Z","6.1.2785-beta":"2019-04-15T19:30:41.488Z","6.1.2786-beta":"2019-04-15T19:37:11.477Z","6.1.2787-beta":"2019-04-15T19:46:10.389Z","6.1.2788-beta":"2019-04-15T19:47:53.421Z","6.1.2789-beta":"2019-04-15T19:52:51.869Z","6.1.2790-beta":"2019-04-15T21:42:38.953Z","6.1.2791-beta":"2019-04-15T21:49:35.868Z","6.1.2792-beta":"2019-04-15T22:08:16.965Z","6.1.2793-beta":"2019-04-15T22:33:12.298Z","6.1.2794-beta":"2019-04-16T18:56:19.052Z","6.1.2795-beta":"2019-04-16T20:08:43.858Z","7.0.2796":"2019-04-17T17:54:10.232Z","7.0.2797-beta":"2019-04-17T18:14:34.115Z","7.0.2798-beta":"2019-04-17T18:32:32.220Z","7.0.2799-beta":"2019-05-02T16:38:55.118Z","7.0.2800-beta":"2019-05-03T16:38:01.981Z","7.0.2801-beta":"2019-05-06T18:44:20.817Z","7.0.2802-beta":"2019-05-06T19:04:14.931Z","7.0.2803-beta":"2019-05-06T19:14:29.913Z","7.0.2804-beta":"2019-05-06T19:32:46.638Z","7.0.2805-beta":"2019-05-06T19:37:46.924Z","7.0.2806-beta":"2019-05-06T21:12:17.319Z","7.0.2807-beta":"2019-05-07T15:51:14.821Z","7.0.2808-beta":"2019-05-07T15:59:22.844Z","7.0.2809-beta":"2019-05-07T16:24:16.078Z","7.0.2810-beta":"2019-05-07T21:25:15.609Z","7.0.2811-beta":"2019-05-08T15:20:41.161Z","7.0.2812-beta":"2019-05-08T16:20:15.231Z","7.0.2813-beta":"2019-05-08T16:47:20.501Z","7.0.2814-beta":"2019-05-08T17:02:32.146Z","7.0.2815-beta":"2019-05-08T18:36:31.856Z","7.0.2816-beta":"2019-05-08T18:49:04.110Z","7.0.2817-beta":"2019-05-08T22:17:52.472Z","7.0.2818-beta":"2019-05-13T17:22:48.052Z","7.0.2819-beta":"2019-05-13T17:28:19.453Z","7.0.2820-beta":"2019-05-13T18:35:49.599Z","7.0.2821-beta":"2019-05-13T19:41:13.380Z","7.0.2822-beta":"2019-05-13T20:16:06.794Z","7.0.2823-beta":"2019-05-14T13:30:15.651Z","7.0.2824-beta":"2019-05-14T18:42:31.517Z","7.0.2825-beta":"2019-05-14T20:26:38.970Z","7.0.2826-beta":"2019-05-15T22:28:26.218Z","7.0.2827-beta":"2019-05-16T13:59:25.743Z","7.0.2828-beta":"2019-05-16T14:16:16.062Z","7.0.2829-beta":"2019-05-16T16:14:14.427Z","7.0.2830-beta":"2019-05-16T17:00:25.257Z","7.0.2831-beta":"2019-05-17T15:24:16.180Z","7.0.2832-beta":"2019-05-17T15:32:33.427Z","7.0.2833-beta":"2019-05-17T19:58:18.650Z","7.0.2834":"2019-05-20T15:48:05.341Z","7.0.2835-beta":"2019-05-20T16:42:56.486Z","7.0.2836":"2019-05-20T16:45:08.026Z","8.0.2838-beta":"2019-05-20T17:21:15.973Z","8.0.2839":"2019-05-20T17:30:44.540Z","8.0.2843-beta":"2019-06-03T20:45:49.406Z","8.0.2844-beta":"2019-06-03T20:53:36.025Z","8.0.2846-beta":"2019-06-03T20:58:56.427Z","8.0.2847-beta":"2019-06-04T14:49:15.172Z","8.0.2848-beta":"2019-06-04T15:18:34.502Z","8.0.2849":"2019-06-04T15:41:02.581Z","8.0.2851-beta":"2019-06-05T17:11:19.256Z","8.0.2852-beta":"2019-06-05T17:14:06.862Z","8.0.2853-beta":"2019-06-05T18:59:50.234Z","8.0.2854-beta":"2019-06-05T19:49:06.263Z","8.0.2855":"2019-06-05T20:01:25.497Z","8.0.2857-beta":"2019-06-06T14:33:29.227Z","8.0.2858-beta":"2019-06-06T17:01:06.895Z","8.0.2859-beta":"2019-06-07T16:10:19.856Z","8.0.2860":"2019-06-07T19:42:23.430Z","8.0.2861":"2019-06-10T11:09:11.331Z","8.0.2862":"2019-06-10T14:47:31.565Z","8.0.2863-beta":"2019-06-10T23:24:09.454Z","8.0.2864-beta":"2019-06-11T11:33:46.159Z","8.0.2865":"2019-06-11T14:00:35.833Z","8.0.2866-beta":"2019-06-12T09:41:00.170Z","8.0.2867-beta":"2019-06-12T12:44:51.040Z","8.0.2868-beta":"2019-06-12T13:05:14.910Z","8.0.2869-beta":"2019-06-12T13:19:35.074Z","8.0.2870":"2019-06-12T14:34:06.943Z","8.0.2871-beta":"2019-06-12T19:52:55.159Z","8.0.2872":"2019-06-12T19:59:18.715Z","8.0.2873-beta":"2019-06-12T21:09:11.959Z","8.0.2874":"2019-06-13T16:00:58.922Z","8.0.2875-beta":"2019-06-14T21:21:33.046Z","8.0.2876":"2019-06-17T13:22:57.005Z","8.0.2877-beta":"2019-07-12T20:15:04.063Z","8.0.2878":"2019-07-12T23:15:12.033Z","8.0.2879":"2019-07-15T14:04:52.824Z","8.0.2882-beta":"2019-07-24T19:51:45.692Z","8.0.2883":"2019-07-24T19:59:42.161Z","8.0.2884-beta":"2019-07-25T18:07:06.431Z","8.0.2885":"2019-07-29T15:43:50.971Z","8.0.2887":"2019-08-13T23:16:17.515Z","8.0.2888":"2019-08-13T23:37:15.190Z","8.0.2889":"2019-08-14T00:49:31.459Z","8.0.2890-beta":"2019-08-19T19:43:28.506Z","8.0.2891-beta":"2019-08-19T19:44:48.027Z","8.0.2892-beta":"2019-08-19T20:05:46.176Z","8.0.2893":"2019-08-19T22:04:33.978Z","8.0.2895-beta":"2019-08-20T17:41:34.630Z","8.0.2896":"2019-08-20T18:44:28.599Z","8.0.2897-beta":"2019-08-23T10:10:31.054Z","8.0.2899-beta":"2019-08-23T20:25:46.711Z","8.0.2901-beta":"2019-08-23T22:24:10.028Z","8.0.2902-beta":"2019-08-26T14:49:47.398Z","8.0.2903-beta":"2019-08-26T17:54:04.913Z","8.0.2904-beta":"2019-08-26T18:20:05.823Z","8.0.2905-beta":"2019-08-28T19:37:35.487Z","8.0.2906-beta":"2019-08-28T20:36:45.885Z","8.0.2907-beta":"2019-08-28T20:38:07.115Z","6.1.2764":"2019-09-03T16:46:55.165Z","6.1.2765":"2019-09-03T17:07:07.462Z","8.0.2908-beta":"2019-09-11T12:14:56.920Z","8.0.2910-beta":"2019-09-11T15:56:33.512Z","8.0.2911":"2019-09-12T08:03:27.656Z","8.0.2912-beta":"2019-09-12T13:36:15.531Z","8.0.2913":"2019-09-13T08:52:14.048Z","8.0.2914-beta":"2019-09-16T14:40:41.114Z","8.0.2915-beta":"2019-09-18T18:05:20.992Z","8.0.2916-beta":"2019-09-25T15:39:03.998Z","8.0.2917":"2019-09-25T15:45:51.318Z","8.0.2918":"2019-09-27T14:42:37.121Z","8.0.2919-beta":"2019-09-27T15:35:00.688Z","8.0.2920":"2019-09-27T15:40:15.159Z","6.1.2766":"2019-09-27T21:14:15.805Z","6.1.2796":"2019-09-27T21:35:58.908Z","6.2.0":"2019-09-30T16:01:28.206Z","8.0.2921":"2019-09-30T17:35:58.129Z","8.0.2922-beta":"2019-10-01T21:13:18.954Z","8.0.2923":"2019-10-04T15:21:28.974Z","8.0.2924-beta":"2019-12-02T11:44:13.319Z","8.0.2925":"2019-12-02T12:00:01.257Z","8.0.2926-beta":"2019-12-06T07:55:21.641Z","8.0.2927-beta":"2019-12-06T08:51:17.969Z","8.0.2928-beta":"2019-12-06T09:31:36.168Z","8.0.2929":"2019-12-06T10:08:21.154Z","8.0.2947":"2020-01-22T05:00:20.855Z","8.0.2948-beta":"2020-01-22T05:02:23.198Z","8.0.2950-beta":"2020-01-22T05:02:56.339Z","8.0.2952-beta":"2020-01-22T05:03:27.026Z","8.0.2951-beta":"2020-01-22T05:04:14.403Z","8.0.2953-beta":"2020-01-22T05:05:14.114Z","8.0.2954-beta":"2020-01-22T05:05:44.570Z","8.0.2955-beta":"2020-01-22T05:06:17.958Z","8.0.2956-beta":"2020-01-22T05:06:50.094Z","8.0.2957-beta":"2020-01-22T05:07:10.319Z","8.0.2958-beta":"2020-01-22T05:08:02.610Z","8.0.2959-beta":"2020-01-22T05:08:35.450Z","8.0.2960-beta":"2020-02-05T11:52:55.268Z","8.0.2961-beta":"2020-02-20T18:01:40.684Z","8.0.2962":"2020-02-20T19:25:04.208Z","8.0.2964-beta":"2020-03-03T15:01:13.357Z","8.0.2965":"2020-03-04T05:02:13.109Z","8.0.2966":"2020-03-04T05:02:31.051Z","8.0.2968":"2020-03-04T05:02:47.569Z","8.0.2967":"2020-03-04T05:03:03.454Z","8.0.2969":"2020-03-04T05:03:28.281Z","8.0.2970-beta":"2020-03-04T05:04:37.674Z","8.0.2971-beta":"2020-03-04T05:04:58.871Z","8.0.2972-beta":"2020-03-08T04:42:14.987Z","8.0.2973-beta":"2020-03-11T21:10:11.947Z","8.0.2974":"2020-03-12T19:07:11.386Z","8.0.2975-beta":"2020-03-13T22:51:51.260Z","8.0.2977-beta":"2020-03-30T14:55:58.593Z","8.0.2978":"2020-03-30T15:13:30.615Z","8.0.2979":"2020-03-30T15:17:55.953Z","8.0.2980-beta":"2020-04-02T11:59:03.529Z","8.0.2981-beta":"2020-04-03T13:34:55.480Z","8.0.2982-beta":"2020-04-07T12:34:04.221Z","8.0.2983-beta":"2020-04-07T13:04:45.966Z","8.0.2984-beta":"2020-04-07T14:51:40.043Z","8.0.2985":"2020-04-07T15:18:36.683Z","8.0.2986-beta":"2020-04-08T14:58:06.016Z","8.0.2987":"2020-04-08T15:02:44.675Z","8.0.2988-beta":"2020-04-09T11:41:20.131Z","8.0.2989":"2020-04-09T11:49:11.396Z","8.0.2990":"2020-04-28T00:21:07.836Z","8.0.2991":"2020-04-28T00:21:36.656Z","8.0.2994":"2020-04-28T00:22:11.526Z","8.0.2992":"2020-04-28T00:23:32.908Z","8.0.2996":"2020-04-28T00:23:58.120Z","8.0.2995":"2020-04-28T00:25:16.076Z","8.0.2997":"2020-04-28T00:33:23.767Z","8.0.2998":"2020-04-28T14:16:22.843Z","8.0.2999-beta":"2020-04-29T23:27:05.599Z","8.0.3000-beta":"2020-05-05T14:26:09.479Z","8.0.3002-beta":"2020-05-18T23:18:02.866Z","8.0.3001":"2020-05-18T23:22:25.459Z","8.0.3003":"2020-05-18T23:24:53.809Z","8.0.3004-beta":"2020-06-05T20:09:22.661Z","8.0.3005-beta":"2020-07-29T21:44:34.498Z","8.0.3006-beta":"2020-09-04T09:25:56.294Z","8.0.3007-beta":"2020-09-30T15:26:16.749Z","8.0.3008":"2020-09-30T16:34:20.774Z","8.0.3010":"2020-09-30T18:05:19.916Z","8.0.3011-beta":"2020-09-30T18:10:33.523Z","8.0.3012":"2020-09-30T21:16:31.690Z","8.0.3013-beta":"2020-09-30T21:46:58.229Z","8.0.3014-beta":"2020-12-11T04:53:39.891Z","8.0.3018-beta":"2021-02-09T15:44:38.614Z","8.0.3019-beta":"2021-02-09T18:10:39.373Z","8.0.3020":"2021-02-10T08:22:58.444Z","8.0.3021-beta":"2021-02-10T08:30:36.219Z","8.0.3023-beta":"2021-02-10T13:10:41.238Z","8.0.3024":"2021-02-10T16:00:59.392Z","8.0.3025-beta":"2021-02-12T15:03:20.313Z","8.0.3026-beta":"2021-02-12T16:56:28.885Z","8.0.3027-beta":"2021-02-12T16:58:09.673Z","8.0.3028":"2021-02-15T08:02:08.598Z","8.0.3029-beta":"2021-03-09T01:42:03.457Z","8.0.3032-beta":"2021-03-12T16:45:51.495Z","8.0.3033-beta":"2021-03-30T14:47:44.133Z","8.0.3035-beta":"2021-04-05T11:33:24.034Z","8.0.3036":"2021-04-05T13:30:00.184Z","8.0.3037-beta":"2021-04-06T09:51:34.027Z","8.0.3038":"2021-04-06T11:15:02.140Z","8.0.3039-beta":"2021-04-06T14:00:59.268Z","8.0.3040":"2021-04-06T14:06:35.928Z","8.0.3041-beta":"2021-05-06T22:43:17.426Z","8.0.3042-beta":"2021-05-07T09:35:38.299Z","8.0.3043-beta":"2021-05-08T08:36:28.670Z","8.0.3044-beta":"2021-05-10T02:40:07.072Z","8.0.3045-beta":"2021-05-21T16:39:01.994Z","8.0.3046":"2021-05-26T14:28:33.821Z","8.0.3047":"2021-05-27T04:08:15.040Z","8.0.3048":"2021-05-27T04:13:18.321Z","8.0.3049":"2021-05-27T04:14:01.913Z","8.0.3050":"2021-06-03T21:22:38.288Z","8.0.1-beta":"2021-06-04T03:09:17.462Z","8.1.2-beta":"2021-06-04T03:11:22.014Z","8.1.3-beta":"2021-06-04T03:56:36.554Z","8.1.4":"2021-06-04T03:58:40.359Z","8.1.5":"2021-06-04T04:03:16.126Z","8.1.6":"2021-06-04T04:06:05.335Z","8.1.7":"2021-06-04T04:07:04.240Z","8.1.13-beta":"2021-06-04T04:10:50.747Z","8.1.18-beta":"2021-06-04T04:11:19.309Z","8.1.9-beta":"2021-06-04T04:11:42.828Z","8.1.11-beta":"2021-06-04T04:12:12.843Z","8.1.10-beta":"2021-06-04T04:12:34.362Z","8.1.12-beta":"2021-06-04T04:12:58.828Z","8.1.8-beta":"2021-06-04T04:13:18.679Z","8.1.19":"2021-06-04T04:13:52.734Z","8.1.20":"2021-06-04T04:16:37.454Z","8.1.15-beta":"2021-06-04T04:17:02.989Z","8.1.17-beta":"2021-06-04T04:17:17.569Z","8.1.21":"2021-06-04T04:18:22.030Z","8.1.22":"2021-06-04T04:19:43.978Z","8.1.14-beta":"2021-06-04T04:20:24.290Z","8.1.24":"2021-06-04T04:23:35.440Z","8.1.25":"2021-06-04T04:26:14.364Z","8.1.23":"2021-06-04T04:26:40.969Z","8.1.31-beta":"2021-08-30T12:26:48.676Z","8.1.32":"2021-08-30T12:51:05.377Z","8.1.34-beta":"2021-09-01T14:39:04.073Z","8.1.35":"2021-09-02T09:55:10.748Z","8.1.40-beta":"2021-09-02T12:34:07.665Z","8.1.41":"2021-09-02T12:38:07.901Z","8.1.42-beta":"2021-09-02T13:38:42.038Z","8.1.44-beta":"2021-09-02T17:18:52.592Z","8.1.45-beta":"2021-09-03T09:25:28.269Z","8.1.46":"2021-09-03T10:00:32.227Z","8.1.47":"2021-09-03T10:14:47.805Z","8.1.49-beta":"2021-09-13T16:04:13.824Z","8.1.50":"2021-09-14T07:43:02.105Z","8.1.54-beta":"2021-10-21T15:42:01.231Z","8.1.56-beta":"2021-10-21T16:18:53.433Z","8.1.57":"2021-10-21T16:24:42.748Z","8.1.58":"2021-11-02T09:22:24.713Z","8.1.69-beta":"2022-08-18T13:49:40.604Z","8.1.70-beta":"2022-08-18T14:25:40.509Z","8.1.71":"2022-08-18T14:36:52.911Z","8.1.73-beta":"2022-08-18T16:06:49.849Z","8.1.75-beta":"2022-08-19T09:40:34.035Z","8.1.76":"2022-08-19T09:54:21.368Z","8.1.78-beta":"2022-08-19T11:08:41.160Z","8.1.79":"2022-08-19T11:21:58.729Z","8.1.80-beta":"2022-08-19T13:46:20.083Z","8.1.82-beta":"2022-08-19T14:25:38.756Z","8.1.83":"2022-08-22T09:48:12.737Z","8.1.84-beta":"2022-08-22T12:09:25.630Z","8.1.85":"2022-08-22T12:28:55.733Z","8.1.86-beta":"2022-08-23T08:10:48.312Z","8.1.87":"2022-08-23T08:45:16.025Z","8.1.88-beta":"2022-08-23T10:23:03.604Z","8.1.89":"2022-08-23T11:17:21.672Z","8.1.90-beta":"2022-08-24T11:09:57.013Z","8.1.91":"2022-08-24T12:46:52.653Z","8.1.92-beta":"2022-09-08T10:23:40.170Z","8.1.93":"2022-09-13T06:59:07.960Z","8.1.94-beta":"2022-09-15T08:33:55.230Z","8.1.95":"2022-09-15T08:46:44.061Z","8.1.98-beta":"2022-12-07T17:36:38.394Z","8.1.99":"2022-12-07T18:01:17.201Z","8.1.101-beta":"2022-12-29T12:34:16.325Z","8.1.102":"2022-12-29T15:04:40.569Z","8.1.104-beta":"2023-01-11T17:39:58.346Z","8.1.105":"2023-01-11T19:02:35.304Z","8.1.106-beta":"2023-01-11T20:46:47.061Z","8.1.107":"2023-01-11T20:49:59.390Z","8.1.108-beta":"2023-01-13T04:03:27.915Z","8.1.109":"2023-01-17T15:00:08.736Z","8.1.110-beta":"2023-01-19T21:50:48.950Z","8.1.111":"2023-01-19T22:11:00.398Z","8.1.112-beta":"2023-01-20T00:38:26.246Z","8.1.113-beta":"2023-01-20T03:30:34.371Z","8.1.116-beta":"2023-01-23T23:15:03.474Z","8.1.117-beta":"2023-01-24T00:24:56.605Z","8.1.118":"2023-01-24T13:59:30.119Z","8.1.119-beta":"2023-01-25T16:30:36.240Z","8.1.120-beta":"2023-01-25T17:03:35.397Z","8.1.121":"2023-01-25T17:06:30.779Z","8.1.123-beta":"2023-02-16T11:55:31.037Z","8.1.125-beta":"2023-02-16T12:09:17.575Z","8.1.126":"2023-02-16T13:19:30.163Z","8.1.128-beta":"2023-02-16T14:08:24.582Z","8.1.129":"2023-02-16T14:10:34.462Z","8.1.131-beta":"2023-02-27T23:41:34.456Z","8.1.132-beta":"2023-03-09T10:07:56.348Z","8.1.133":"2023-03-09T10:41:08.153Z","8.1.134-beta":"2023-03-09T13:33:06.309Z","8.1.135":"2023-03-09T14:01:42.137Z","8.1.137-beta":"2023-03-17T21:11:43.556Z","8.1.138":"2023-03-20T14:10:01.797Z","8.1.139-beta":"2023-03-20T15:22:07.760Z","8.1.140":"2023-03-20T16:02:24.070Z","8.1.141-beta":"2023-03-29T07:09:41.816Z","8.1.142":"2023-03-29T07:58:52.783Z","8.1.147-beta":"2023-04-03T10:58:25.187Z","8.1.153-beta":"2023-04-05T08:33:10.363Z","8.1.154":"2023-04-05T08:36:36.125Z","8.1.155-beta":"2023-04-05T08:48:22.224Z","8.1.156":"2023-04-05T08:50:07.141Z","8.1.158-beta":"2023-04-05T09:11:46.425Z","8.1.160":"2023-04-05T09:17:23.518Z","8.1.161-beta":"2023-04-06T10:26:29.040Z","8.1.163-beta":"2023-04-06T15:08:41.599Z","8.1.164":"2023-04-06T15:11:08.293Z","8.1.165-beta":"2023-04-06T18:50:59.639Z","8.1.168-beta":"2023-04-07T09:41:37.665Z","8.1.170-beta":"2023-04-07T10:20:49.399Z","8.1.171-beta":"2023-04-07T10:37:02.538Z","8.1.172-beta":"2023-04-07T10:56:30.537Z","8.1.173-beta":"2023-04-07T11:02:46.485Z","8.1.176-beta":"2023-04-07T15:13:49.294Z","8.1.178-beta":"2023-04-07T15:57:25.496Z","8.1.179":"2023-04-10T07:44:10.820Z","8.1.184-beta":"2023-04-10T14:39:50.935Z","8.1.185":"2023-04-10T14:41:48.080Z","8.1.186-beta":"2023-04-10T16:02:06.787Z","8.1.187":"2023-04-10T16:05:45.326Z","8.1.189-beta":"2023-04-11T07:54:10.629Z","8.1.190-beta":"2023-04-11T09:25:53.676Z","8.1.191":"2023-04-11T10:30:47.777Z","8.1.194-beta":"2023-04-12T21:06:06.483Z","8.1.195":"2023-04-12T21:11:22.511Z","8.1.197":"2023-04-12T22:00:44.158Z","8.1.196-beta":"2023-04-12T22:01:10.311Z","8.1.198":"2023-04-13T08:38:49.207Z","8.1.199-beta":"2023-04-13T08:43:42.529Z","8.1.200-beta":"2023-04-13T09:02:20.181Z","8.1.201-beta":"2023-04-13T09:32:51.631Z","8.1.202":"2023-04-13T09:38:53.959Z","8.1.203-beta":"2023-04-13T12:19:29.826Z","8.1.204-beta":"2023-04-13T12:42:30.129Z","8.1.205-beta":"2023-04-13T13:36:05.485Z","8.1.206":"2023-04-13T14:23:22.056Z","8.1.207-beta":"2023-04-13T14:53:00.384Z","8.1.208":"2023-04-13T15:29:21.588Z","8.1.209-beta":"2023-04-13T18:06:08.309Z","8.1.210-beta":"2023-04-14T11:19:31.455Z","8.1.211":"2023-04-17T11:48:15.812Z","8.1.212-beta":"2023-04-17T12:40:20.448Z","8.1.213":"2023-04-17T16:11:05.739Z","8.1.214-beta":"2023-04-18T08:03:52.098Z","8.1.216-beta":"2023-04-18T08:45:19.084Z","8.1.217":"2023-04-18T08:55:00.844Z","8.1.218-beta":"2023-04-18T11:25:16.244Z","8.1.219":"2023-04-18T11:31:41.728Z","8.1.220-beta":"2023-04-18T14:46:50.086Z","8.1.221-beta":"2023-04-18T15:23:05.439Z","8.1.222":"2023-04-18T15:56:00.464Z","8.1.223-beta":"2023-04-18T19:10:41.180Z","8.1.224":"2023-04-18T19:28:09.557Z","8.1.225-beta":"2023-04-20T13:56:31.391Z","8.1.226-beta":"2023-04-20T13:57:49.637Z","8.1.228-beta":"2023-04-20T14:27:26.186Z","8.1.229-beta":"2023-04-20T15:26:24.334Z","8.1.230":"2023-04-21T09:59:36.141Z","8.1.231":"2023-04-21T10:00:20.896Z","8.1.233-beta":"2023-04-21T11:37:54.942Z","8.1.234-beta":"2023-04-21T11:59:45.818Z","8.1.235-beta":"2023-04-21T12:09:38.970Z","8.1.236":"2023-04-21T12:30:46.986Z","8.1.237":"2023-04-24T07:25:35.408Z","8.1.238":"2023-04-24T09:35:28.387Z","8.1.239-beta":"2023-04-24T10:26:58.939Z","8.1.240":"2023-04-24T11:00:54.969Z","8.1.244-beta":"2023-04-25T16:42:07.115Z","8.1.245-beta":"2023-04-26T15:47:18.568Z","8.1.247-beta":"2023-04-26T21:24:58.466Z","8.1.249-beta":"2023-04-27T07:12:54.468Z","8.1.250":"2023-04-27T07:18:39.548Z","8.1.251-beta":"2023-04-28T12:48:34.103Z","8.1.252-beta":"2023-04-28T13:49:07.963Z","8.1.253":"2023-05-01T09:25:12.903Z","8.1.255-beta":"2023-05-01T10:59:05.679Z","8.1.256-beta":"2023-05-01T13:37:14.106Z","8.1.257":"2023-05-02T07:20:00.825Z","8.1.258":"2023-05-05T09:39:20.849Z","8.1.259-beta":"2023-05-12T13:20:42.688Z","8.1.260-beta":"2023-05-12T13:24:58.337Z","8.1.261":"2023-05-15T09:03:15.151Z","8.1.263-beta":"2023-06-20T13:00:43.203Z","8.1.264":"2023-06-20T16:15:28.870Z","8.1.266-beta":"2023-06-21T11:55:43.408Z","8.1.267":"2023-06-21T13:31:11.994Z","8.1.269-beta":"2023-06-22T12:44:08.874Z","8.1.270":"2023-06-22T13:00:33.016Z","8.1.272-beta":"2023-08-09T19:54:30.794Z","8.1.274-beta":"2023-08-10T12:08:42.565Z","8.1.277-beta":"2023-09-25T09:53:49.849Z","8.1.279-beta":"2023-09-25T11:34:20.779Z","8.1.280-beta":"2023-09-25T11:44:06.073Z","8.1.281":"2023-09-25T12:40:39.786Z","8.1.283-beta":"2023-10-05T13:31:24.702Z","8.1.284":"2023-10-05T13:45:48.091Z","8.1.285-beta":"2023-10-06T08:45:52.637Z","8.1.286-beta":"2023-10-06T11:11:43.303Z","8.1.287-beta":"2023-10-06T11:24:49.353Z","8.1.288-beta":"2023-10-06T11:29:14.631Z","8.1.289":"2023-10-06T11:32:15.675Z","8.1.291-beta":"2023-10-10T14:29:01.535Z","8.1.292-beta":"2023-10-10T14:35:33.053Z","8.1.293-beta":"2023-10-10T14:41:57.643Z","8.1.294":"2023-10-11T07:12:50.906Z","8.1.295-beta":"2023-10-11T11:47:04.124Z","8.1.296":"2023-10-11T12:24:19.654Z","8.1.297-beta":"2023-10-20T13:21:19.650Z","8.1.298":"2023-10-20T13:28:17.307Z","8.1.300-beta":"2023-11-02T09:30:46.198Z","8.1.301-beta":"2023-11-02T10:35:02.809Z","8.1.302-beta":"2023-11-02T10:37:18.811Z","8.1.303":"2023-11-02T10:39:27.945Z","8.1.305-beta":"2023-12-20T16:23:37.044Z","8.1.307-beta":"2023-12-20T21:28:43.406Z","8.1.308":"2023-12-21T10:53:36.860Z","8.1.309-beta":"2024-01-05T19:19:33.081Z","8.1.310-beta":"2024-01-05T19:38:54.178Z","8.1.311-beta":"2024-01-26T13:07:55.222Z","8.1.312-beta":"2024-01-26T13:13:56.858Z","8.1.313-beta":"2024-01-26T13:29:19.740Z","8.1.314-beta":"2024-01-29T12:55:49.931Z","8.1.315-beta":"2024-01-29T13:00:26.802Z","8.1.316-beta":"2024-01-29T13:03:58.396Z","8.1.317":"2024-01-29T14:55:52.567Z"},"homepage":"https://github.com/meetup/meetup-web-components#readme","repository":{"type":"git","url":"git+https://github.com/meetup/meetup-web-components.git"},"author":{"name":"Meetup"},"bugs":{"url":"https://github.com/meetup/meetup-web-components/issues"},"license":"UNLICENSED","readmeFilename":"README.md"}